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";     
        }
        
        
    }
  • 相关阅读:
    Linq to OBJECT延时标准查询操作符
    LINQ to XML
    动态Linq(结合反射)
    HDU 1242 dFS 找目标最短路
    HDu1241 DFS搜索
    hdu 1224 最长路
    BOJ 2773 第K个与m互质的数
    ZOJ 2562 反素数
    2016 ccpc 杭州赛区的总结
    bfs UESTC 381 Knight and Rook
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/6860047.html
Copyright © 2011-2022 走看看