zoukankan      html  css  js  c++  java
  • JavaWeb网上图书商城完整项目--day02-21.退出功能的实现

    1、当用户点击退出的时候,跳转到登陆页面

    当用户点击退出的时候,需要将session中保存的登陆的用户销毁掉

    当用户点击退出的时候,调用UserServlet的quit方法

    退出按钮在top.jsp中,我们修改top.jsp页面的代码:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>top</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    <style type="text/css">
        body {
            background: #15B69A;
            margin: 0px;
            color: #ffffff;
        }
        a {
            text-transform:none;
            text-decoration:none;
            color: #ffffff;
            font-weight: 900;
        } 
        a:hover {
            text-decoration:underline;
        }
    </style>
      </head>
      
      <body>
    <h1 style="text-align: center;">传智播客网上书城系统</h1>
    <div style="font-size: 10pt; line-height: 10px;">
    <%--依据用户是否登陆显示不同的连接 --%>
    <c:choose>
      <c:when test="${empty  sessionScope.sessionUser}">
            <a href="<c:url value='/jsps/user/login.jsp'/>" target="_parent">传智会员登录</a> |&nbsp; 
          <a href="<c:url value='/jsps/user/regist.jsp'/>" target="_parent">注册传智会员</a>
      </c:when>
      
      <c:otherwise>
       传智会员:${sessionScope.sessionUser.loginname}&nbsp;&nbsp;|&nbsp;&nbsp;
      <a href="<c:url value='/jsps/cart/list.jsp'/>" target="body">我的购物车</a>&nbsp;&nbsp;|&nbsp;&nbsp;
      <a href="<c:url value='/jsps/order/list.jsp'/>" target="body">我的传智订单</a>&nbsp;&nbsp;|&nbsp;&nbsp;
      <a href="<c:url value='/jsps/user/pwd.jsp'/>" target="body">修改密码</a>&nbsp;&nbsp;|&nbsp;&nbsp;
      <a href="<c:url value='/UserServlet?method=quit'/>" target="_parent">退出</a>    
      </c:otherwise>
      
    </c:choose>
     
        
    
    
    
    </div>
      </body>
    </html>

    我们修改UserServlet的代码:

    package com.weiyuan.goods.user.web.servlet;
    
    import java.io.IOException;
    import java.net.URLEncoder;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.collections.map.HashedMap;
    
    import com.weiyuan.goods.user.domian.User;
    import com.weiyuan.goods.user.service.UserService;
    
    import cn.itcast.commons.CommonUtils;
    import cn.itcast.servlet.BaseServlet;
    
    /**
     * Servlet implementation class UserServlet
     */
    @WebServlet("/UserServlet")
    public class UserServlet extends BaseServlet{
        private static final long serialVersionUID = 1L;
        private UserService service = new UserService();
        /*
         * 用户注册页面使用ajax校验/*
         * 用户注册页面使用ajax校验用户名会调用该方法
         * *会调用该方法
         * */
        public String validateLoginname(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            //首先获得用户上传的用户名
            String loginName = request.getParameter("loginname");
            boolean  flag = service.ajaxValidateLoginName(loginName);
            response.getWriter().print(flag);
            return null;
        }
        /*
         * 用户注册页面使用ajax校验邮箱会调用该方法
         * */
        public String validateEmail(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
           //获得用户上传的emai
        
            String email = request.getParameter("email");
            System.out.println("validateEmail is called"+email);
            boolean  flag = service.ajaxValidateEmail(email);
            response.getWriter().print(flag);
            return null;
        }
        
        /*
         * 用户修改密码页面使用ajax校验原始的密码是否正确
         * */
        public String validateLoginpass(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
           //获得用户上传的emai
        
            String loginpass = request.getParameter("loginpass");
            boolean  flag = service.ajaxValidateLoginPass(loginpass);
            response.getWriter().print(flag);
            return null;
        }
        
        /*
         * 用户注册页面使用ajax校验验证码会调用该方法
         * */
        public String validateVerifyCode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
             //获得用户上传的verfycode
            String verifyCode  = request.getParameter("verifyCode");
            //获得session中保存的验证码
            String sessionCode = (String) request.getSession().getAttribute("vCode");
            //二者进行比较看是否相等
            System.out.println("validateVerifyCode is called"+verifyCode+":"+sessionCode);
            boolean  flag = sessionCode.equalsIgnoreCase(verifyCode);
            response.getWriter().print(flag);
            return null;
        }
        
        /*
         * 当用户从邮箱点击的激活的时候会调用该方法,并且把激活码传递过来
         * 
         * */
        public String activation(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
    
            String activationCode = request.getParameter("activationCode");
            System.out.println("email activationCode is :"+activationCode);
            try {
                service.activation(activationCode);
                //激活成功
                 request.setAttribute("code", "success"); //msg.jsp已经code的值来显示错误信息还是正确的信息
                 request.setAttribute("msg", "激活成功");
                 return "f:/jsps/msg.jsp";
            } catch (Exception e) {
               //将业务操作的异常信息在msg.jsp中显示出来
                String msg = e.getMessage();
                 request.setAttribute("code", "error"); //msg.jsp已经code的值来显示错误信息还是正确的信息
                 request.setAttribute("msg", msg);
                 return "f:/jsps/msg.jsp";
                
            }
            
        }
        
        
        /*
         * 当用户注册的时候会调用该方法
         * 
         * */
        public String regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            System.out.println("activation is called");
            
            //1、将请求的参数封装成User对象
                    User user = CommonUtils.toBean(request.getParameterMap(), User.class);
                    //2 、对传递过来的参数进行校验,把错误的信息封装到一个hashMap中
                      Map errors = validateParams(user, request);
                      if(errors.size() > 0){//说明参数错误,跳转到注册界面提示用户输入的参数有误
                          request.setAttribute("errors", errors);    
                          request.setAttribute("user", user);
                          return "f:/jsps/user/regist.jsp";
                      }
                     service.addUser(user);
                     request.setAttribute("code", "success");
                     request.setAttribute("msg", "用户注册成功,请马上到邮箱进行激活");
                      return "f:/jsps/msg.jsp";
              
        }
        
        
        /*
         * 当用户登录的时候会调用该方法
         * 
         * */
        public String login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            System.out.println("activation is called");
            
            /*1、第一步将用户提交的参数封装成javabean对象
             *
             *2、对提交的参数的进行合法性的校验
             *
             *3、通过用户名和密码去查找得到user对象
             *如果user对象为null,说明用户名和密码不正确,重定向到login.jsp提示用户名和密码错误
             *如果user对象不为null,查看当前用户的激活状态,如果当前用户没有被激活,提示当前用户没有被激活,重定向到login.jsp提示
             *如果user对象不为null,并且当前用户处于激活状态,把当前用户保存到session中,显示当前用户是谁
             *为了实现页面自定功能,需要把用户名保存到cookie中,主要cookie不支持中文,需要对
             *中文进行有效性的处理。
             *
             * 
             * 
             * */
            
            User formUser = CommonUtils.toBean(request.getParameterMap(), User.class);
            //对参数进行合法性的校验
            //2 、对传递过来的参数进行校验,把错误的信息封装到一个hashMap中
              Map errors = validateLoginParams(formUser, request);
              if(errors.size() > 0){//说明参数错误,跳转到注册界面提示用户输入的参数有误
                  request.setAttribute("errors", errors);    
                  request.setAttribute("user", formUser);
                  return "f:/jsps/user/login.jsp";
              }
              User user =service.login(formUser);
              
              //判断用户是否为null
              if(user == null){
                  request.setAttribute("msg", "输入的用户名和密码不正确");
                  request.setAttribute("user", formUser);
                  return "f:/jsps/user/login.jsp";
              }else{
                  if(0 == user.getStatus()){ //没有激活  
                      request.setAttribute("msg", "当前用户没有激活,请先激活该用户");
                      request.setAttribute("user", formUser);
                      return "f:/jsps/user/login.jsp"; 
                  }
                  //说明用户登录成功
                  request.getSession().setAttribute("sessionUser", user);
                  //将用户名保存到cookie中,因为cookie不支持中文使用URL进行编码
                   Cookie cookie = new Cookie("cookieLoginName", URLEncoder.encode(user.getLoginname(), "utf-8"));
                   cookie.setMaxAge(60*60*24);//cookie的有效期是一天
                   //添加cookie对象,把cookier对象返回给浏览器
                   response.addCookie(cookie);
                   //登录成功之后客户端使用redict重新登录到index.jsp主页面
                   return "r:/index.jsp";
                   
              }
        }
        
        
        public Map validateParams(User user,HttpServletRequest request){
            Map<String, String> map  = new HashedMap();
            //校验用户名
            String loginName = user.getLoginname();
            if(loginName == null || loginName.isEmpty()){
                map.put("loginname", "用户名不能为空");
            }
            if(loginName.length() < 3 || loginName.length() > 20){
                map.put("loginname", "用户名长度应该在3到20之间");
            }
            //校验用户名是否注册
            if(service.ajaxValidateLoginName(loginName)){
                map.put("loginname", "用户名已经被注册");
            }
            
            //检查登陆密码
            String loginpass = user.getLoginpass();
            if(loginpass == null || loginpass.isEmpty()){
                map.put("loginpass", "登陆密码不能为空");
            }
            if(loginpass.length() < 3 || loginpass.length() > 20){
                map.put("loginname", "登陆密码的长度应该在3到20之间");
            }
            
            //检查确认密码的信息
            //检查登陆密码
            String reloginpass = user.getReloginpass();
            if(reloginpass == null || reloginpass.isEmpty()){
                map.put("reloginpass", "登陆密码不能为空");
            }
            if(reloginpass.length() < 3 || reloginpass.length() > 20){
                map.put("reloginpass", "登陆密码的长度应该在3到20之间");
            }
            if(!reloginpass.equalsIgnoreCase(loginpass)){
                map.put("reloginpass", "两次输入的密码不一样");
            }
            
            //检查邮箱
            String email = user.getEmail();
            if(email == null || email.isEmpty()){
                map.put("email", "登陆邮箱不能为空");
            }
            //检查邮箱的格式是否正确
            if(!email.matches("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$")){
                map.put("email", "邮箱格式不正确");
            }
            
            
            //检查验证码是否相等
            String verifyCode = user.getVerifyCode();
            //获得session中保存的验证码
            String sessionCode =(String) request.getSession().getAttribute("vCode");
            if(!verifyCode.equalsIgnoreCase(sessionCode)){
                map.put("verifyCode", "验证码不正确");
            }
            
            return map;
            
            
            
        }
    
        
        public Map validateLoginParams(User user,HttpServletRequest request){
            Map<String, String> map  = new HashedMap();
            //校验用户名
            String loginName = user.getLoginname();
            if(loginName == null || loginName.isEmpty()){
                map.put("loginname", "用户名不能为空");
            }
            if(loginName.length() < 3 || loginName.length() > 20){
                map.put("loginname", "用户名长度应该在3到20之间");
            }
                            
            //检查验证码是否相等
            String verifyCode = user.getVerifyCode();
            //获得session中保存的验证码
            String sessionCode =(String) request.getSession().getAttribute("vCode");
            if(!verifyCode.equalsIgnoreCase(sessionCode)){
                map.put("verifyCode", "验证码不正确");
            }
            
            return map;
            
            
            
        }
    
        /*
         * 当用户修改密码的时候会调用该方法
         * */
        public String updatePassword(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            /*业务操作的流程
             * 1、将请求的参数封装成javaBean对象
             * 2、获得当前登录用户的uuid
             * 3、利用uuid和原始的密码去查找用户是否存在
             * 3、利用uuid去修改新的密码
             * 
             * */
            System.out.println("updatePassword is called");
            User formUser = CommonUtils.toBean(request.getParameterMap(), User.class);
            //如果用户登录成功了,会在session中保存该用户
            
            User loginUser = (User) request.getSession().getAttribute("sessionUser");
            if(loginUser == null){//说明当前用户没有登录,到pwd.jsp显示异常信息
                request.setAttribute("msg", "用户没有登录,请先登录在修改用户密码");
                 return "f:/jsps/user/login.jsp";     
            }
            try {
                service.updateUserPassword(loginUser.getUid(), loginUser.getLoginpass(), formUser.getNewpass());
                //说明修改密码成功
                 request.setAttribute("code", "success");
                 request.setAttribute("msg", "用户修改密码成功,请重新登录");
                  return "f:/jsps/msg.jsp";
            } catch (Exception e) {
                //修改密码失败
                request.setAttribute("msg",e.getMessage());
                 return "f:/jsps/user/pwd.jsp";     
            }
            
        }
        
        /*
         * 当用户点击退出按钮的时候调用该放阿飞
         * */
        public String quit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //将session对象保存的user对象销毁
            request.getSession().invalidate();//让session对象无效
            return "r:/jsps/user/login.jsp";     
        }
        
        
    }
  • 相关阅读:
    20165231 2017-2018-2 《Java程序设计》第5周学习总结
    结对学习感想及创意照
    20165231 第四周测试课下补做
    20165231 2017-2018-2 《Java程序设计》第4周学习总结
    20165231 2017-2018-2 《Java程序设计》第3周学习总结
    20165309 第七周学习总结
    20165309 实验一 Java开发环境的熟悉
    20165309 第四周测验总结
    20165309 第四周学习总结
    20165317第七周学习内容
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/6860047.html
Copyright © 2011-2022 走看看