D14 Sping Boot 入门 Sping框架--Java Web之书城项目(五)

时间:2020-04-11
本文章向大家介绍D14 Sping Boot 入门 Sping框架--Java Web之书城项目(五),主要包括D14 Sping Boot 入门 Sping框架--Java Web之书城项目(五)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、登录--显示用户登录名

  Ⅰ、在UserServlet.java里的登录方法里把用户信息保存到session域中

    req.getSession().setAttribute("user",loginUser);//保存用户信息到Sesion域中,为了登陆后显示用户名  

 1  /**
 2      * 处理登录功能
 3      */
 4     protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
 5 
 6 
 7         //1、获取请求的参数
 8         String username = req.getParameter("username");
 9         String password = req.getParameter("password");
10 
11 //        2、调用XXXService.xxx()处理业务/userService.log()登录
12         //判断用户名是否存在
13         if(userService.existUsername(username)){
14 //        userService.login(new User(null,username,password,null));
15             User loginUser = userService.login(new User(null,username,password,null));
16             //3、根据login()方法返回结果判断登录是否成功
17             if(loginUser != null) {
18 
19                 //Ⅰ、成功
20                 System.out.println("login success");
21 
22                 //保存用户信息到Sesion域中,为了登陆后显示用户名
23                 req.getSession().setAttribute("user",loginUser);
24 
25                 //跳到登录成功页面
26                 req.getRequestDispatcher("/pages/user/login_success.jsp").forward(req,resp);
27             }else {
28 //
29 //          Ⅱ、失败
30                 System.out.println("login failed");
31                 //把错误信息和回显信息保存到Resquest域中
32                 req.setAttribute("loginError","用户名或密码错误");
33                 req.setAttribute("username",username);
34 //
35 //              跳回登录页面
36                 req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);
37             }
38         }else{
39             System.out.println("用户名["+username+"]不存在,请先注册");
40             req.setAttribute("loginError","用户名不存在");
41             req.setAttribute("username",username);
42 //              跳回登录页面
43             req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);
44         }
45 
46     }
UserServlet.java

  Ⅱ、前端用EL表达式获取用户信息

     "${sessionScope.user.username}" 

 1 <%--如果用户没有登陆,显示登录和注册--%>
 2         <c:if test="${empty sessionScope.user}">
 3             <a href="pages/user/login.jsp">登录</a> |
 4             <a href="pages/user/regist.jsp">注册</a>
 5         </c:if>
 6 
 7         <%--如果用户已经登陆,则显示登录成功之后的用户信息--%>
 8         <c:if test="${not empty sessionScope.user}">
 9             <span>欢迎<span class="um_span">${sessionScope.user.username}</span>光临书城</span>
10             <a href="pages/order/order.jsp">我的订单</a>
11             <a href="index.jsp">注销</a>&nbsp;&nbsp;
12         </c:if>
EL判断是否登录且显示信息

2、登出--用户注销

  1、销毁Session中用户的登录信息(或者销毁Session)

  2、重定向到首页或者登陆页面。

  Ⅰ、在UserServlet.java中添加用户注销方法logout();。

 1  /**
 2      * 处理注销功能
 3      */
 4     protected void logout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
 5 
 6         //1、销毁Session中用户的登录信息(或者销毁Session)
 7         req.getSession().invalidate();
 8         //2、重定向到首页或者登陆页面。
 9         resp.sendRedirect(req.getContextPath());  //到首页
10 
11 
12     }

  Ⅱ、前端用 <a href="userServlet?action=logout">注销</a> 访问注销

3、表达重复提交之---验证码 

表单重复提交有三种常见的情况:

  一:提交完表单。服务器使用请求转来进行页面跳转。这个时候,用户按下功能键 F5,就会发起最后一次的请求。

    造成表单重复提交问题。解决方法:使用重定向来进行跳转

  二:用户正常提交服务器,但是由于网络延迟等原因,迟迟未收到服务器的响应,这个时候,用户以为提交失败,

    就会着急,然后多点了几次提交操作,也会造成表单重复提交。

  三:用户正常提交服务器。服务器也没有延迟,但是提交完成后,用户回退浏览器。重新提交。也会造成表单重复提交。

原文地址:https://www.cnblogs.com/nuister/p/12679887.html