Servlet实现登录-ajax方式 作者:马育民 • 2022-02-14 10:23 • 阅读:10064 # login.html ``` 登录 登录 用户名: 密码: 如果 type是submit,会直接提交表单,不执行这个函数(在不同的浏览器,显示顺序不同) ``` # LoginServlet ``` package com.zrgj.servlet; import java.io.IOException; import java.io.PrintWriter; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.fasterxml.jackson.databind.ObjectMapper; import com.zrgj.util.DbUtils; /** * * 该登录类,登录成功后,实现跳转 * * @author 马育民 * */ @WebServlet( urlPatterns="/login3") public class LoginServlet3 extends HttpServlet{ /** * HttpServletRequest req:封装请求信息(数据),如:封装提交来的用户名、密码 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html; charset=UTF-8"); //获取提交来的数据 String uname=req.getParameter("username"); String pass=req.getParameter("password"); DbUtils s=new DbUtils(); try { //try代码块,写可能抛异常的代码 s.connect("com.mysql.jdbc.Driver" , "jdbc:mysql://127.0.0.1:3308/scott?useSSL=false&useUnicode=true&characterEncoding=utf-8" ,"root" ,""); } catch (ClassNotFoundException e) {//e就是抛出异常的对象(将报错的信息封装到给对象中) // TODO Auto-generated catch block e.printStackTrace();//将异常的详细信息打印到控制台 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } //登录的sql String sql="SELECT uid,username,password FROM user WHERE username=? AND PASSWORD=? "; //创建参数的数组,将sql语句需要的参数,放入到该数组中 Object[] paras=new Object[2]; paras[0] = uname;//因为sql语句中第一个? 是用户名 paras[1] = pass; try { List list=s.query(sql, paras);//可能会抛出异常,因为可能写错sql语句 //如何处理,才能知道登录成功???? // TODO 待完成 if(list!=null && list.size()>0){ //说明登录成功! System.out.println("登录成功!");//其实没必要显示在控制台中 //将登录成功的消息封装到该map中 Map map =new HashMap(); map.put("code", 0); // code为0时,表示成功 map.put("msg", "登录成功!"); // msg:文字描述 //将java中map对象,转换成 json 格式的字符串 ObjectMapper om=new ObjectMapper(); String json=om.writeValueAsString(map); PrintWriter pw = resp.getWriter(); pw.write(json); pw.close();//关闭 }else{ //将登录成功的消息封装到该map中 Map map =new HashMap(); map.put("code", 1); // code为1时,表示用户名或密码错误,登录失败 map.put("msg", "登录失败,用户名或密码错误!"); // msg:文字描述 //将java中map对象,转换成 json 格式的字符串 ObjectMapper om=new ObjectMapper(); String json=om.writeValueAsString(map); PrintWriter pw = resp.getWriter(); pw.write(json); pw.close();//关闭 } System.out.println();//此无效代码的作用,是为了 debug时,能够停在该行,方便查看list元素 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace();//一定要打印异常,否则一旦报错,你不知道哪里报的错误 } try { s.close();//数据库资源非常宝贵,用完之后,要及时关闭掉。否则,长时间连接数据库不断开,会导致数据库无响应,再也连不上 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("接收到登录请求!用户名:"+uname+",密码:"+pass); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("调用doPost()"); doGet(req, resp); } } ``` 原文出处:http://malaoshi.top/show_1IX2m9TYOX8l.html