• 案例12-对案例11中文名乱码问题的解决


    查看:案例11

    1 web层LoginServlet修改

    package www.test.web.servlet;
    
    import java.io.IOException;
    import java.net.URLEncoder;
    import java.sql.SQLException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import www.test.domain.User;
    import www.test.service.LoginService;
    
    public class LoginServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            // 解决乱码问题
            request.setCharacterEncoding("UTF-8");
            HttpSession session = request.getSession();
    
            // 获得页面输入的验证
            String checkCode_client = request.getParameter("checkCode");
            // 获得生成图片的文字的验证码
            String checkCode_session = (String) request.getSession().getAttribute("checkcode_session");
            // 比对页面的和生成图片的文字的验证码是否一致
            if (!checkCode_session.equals(checkCode_client)) {
                request.setAttribute("loginInfo", "您的验证码不正确");
                request.getRequestDispatcher("/login.jsp").forward(request, response);
                return;
            }
            // 获取用户输入的数据
            String username = request.getParameter("username"); //中文名 张三
            String password = request.getParameter("password");
    
            LoginService service = new LoginService();
            User user = null;
            try {
                user = service.login(username, password);
            } catch (SQLException e) {
    
                e.printStackTrace();
            }
    
            if (user != null) {
                // 登录成功
                // 判断用户是否勾选自动登录
                String autoLogin = request.getParameter("autoLogin");
                if (autoLogin != null) {
                    //对中文张三进行编码
                    String username_code = URLEncoder.encode(username, "UTF-8");// %AE4%kfj
                    
                    Cookie cookie_username = new Cookie("cookie_username", username_code);
                    Cookie cookie_password = new Cookie("cookie_password", user.getPassword());
                    // 设置 cookie 的持久化时间
                    cookie_username.setMaxAge(60 * 60);
                    cookie_password.setMaxAge(60 * 60);
                    // 设置 cookie 的携带路径
                    cookie_username.setPath(request.getContextPath());
                    cookie_password.setPath(request.getContextPath());
                    // 发送 cookie
                    response.addCookie(cookie_username);
                    response.addCookie(cookie_password);
                }
                //将登录的用户的 user 对象存到 session 中
                session.setAttribute("user", user);
                //重定向到首页
                response.sendRedirect(request.getContextPath());
                
            } else {
                request.setAttribute("loginInfo", "密码或者用户名不正确");
                request.getRequestDispatcher("/login.jsp").forward(request, response);
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    2 web层AutoLoginFilter

    package www.test.web.filter;
    
    import java.io.IOException;
    import java.net.URLDecoder;
    import java.sql.SQLException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import www.test.domain.User;
    import www.test.service.LoginService;
    
    public class AutoLoginFilter implements Filter {
    
        public AutoLoginFilter() {
            super();
        }
    
        private FilterConfig filterConfig;
    
        public void init(FilterConfig filterConfig) throws ServletException {
    
            this.filterConfig = filterConfig;
    
        }
    
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain)
                throws IOException, ServletException {
    
            HttpServletRequest request = (HttpServletRequest) req;
    
            HttpServletResponse response = (HttpServletResponse) res;
    
            HttpSession session = request.getSession();
    
            // 获得 cookie 中用户名和密码 进行登录的操作
            // 定义 cookie_username
            String cookie_username = null;
            // 定义 cookie_password
            String cookie_password = null;
            // 获得 cookie
            Cookie[] cookies = request.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {// 获得名字是 cookie_username 和
                                                // cookie_password
                    if ("cookie_username".equals(cookie.getName())) {
                        cookie_username = cookie.getValue();
                      //恢复中文用户名
                        cookie_username = URLDecoder.decode(cookie_username, "UTF-8");
                    }
                    if ("cookie_password".equals(cookie.getName())) {
                        cookie_password = cookie.getValue();
                    }
                }
            }
            // 判断 username 和 password 是否是 null
            if (cookie_username != null && cookie_password != null) {
                // 登录的代码
                LoginService service = new LoginService();
                
                User user = null;
                try {
                    user = service.login(cookie_username, cookie_password);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                // 将登录的用户的 user 对象存到 session 中
                session.setAttribute("user", user);
            }
            
            //放行
            filterChain.doFilter(request, response);
        }
    
        public void destroy() {
    
        }
    }
  • 相关阅读:
    根据条件把一个字符串拆分成几个字符串
    【SQLServer】SQL Server 2000的分页方法(SQL篇)
    【C#】NHibernate下实现SQL2000分页(SQL篇)
    【Oracle】仿Oracle Sequence的自定义年份Sequence(适合任何数据库)
    【Oracle】仿Oracle Sequence的自定义年份Sequence(适合任何数据库)(续)
    【C#】NHibernate下为SQL Server添加随机排序
    【LoadRunner】LoadRunner 9.5回放Windows Socket时CPU 100%
    【CSS】CSS Cookbook例子:创建水平导航菜单
    【CSS】CSS Cookbook例子:创建文字导航菜单和翻转特效
    【Flex】实现模块顺序执行
  • 原文地址:https://www.cnblogs.com/jepson6669/p/8407292.html
Copyright © 2020-2023  润新知