Cookie的应用——Servlet实现三天免登录
2024-09-01 07:44:57
1、工程结构:
2、Servlet的运用:
(1)登录界面:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8");//设置浏览器编码格式 response.getWriter().write("<html>"); response.getWriter().write("<head>"); response.getWriter().write("<title>"); response.getWriter().write("Login"); response.getWriter().write("</title>"); response.getWriter().write("</head>"); response.getWriter().write("<body bgcolor=\"aqua\">"); response.getWriter().write("<center>"); response.getWriter().write("<h3>"); response.getWriter().write("登录"); response.getWriter().write("</h3>"); response.getWriter().write("<form action=\"/Servlet_login_war_exploded/login\" method=\"get\">"); response.getWriter().write(" 用户名:<input type=\"text\" name=\"username\" size=\"12\"><br>"); response.getWriter().write("密 码 :<input type=\"password\" name=\"password\" size=\"6\" ><br><br>"); response.getWriter().write("<input type=\"submit\" value=\"登录\">"); response.getWriter().write("<input type=\"reset\" value=\"取消\">"); response.getWriter().write("</form>"); response.getWriter().write("</center>"); response.getWriter().write("</body>"); response.getWriter().write("</html>"); }
(2)LogServlet实现数据库和表单数据的连接,如果在数据库中有对应的用户登录信息则登录成功。如果是第一次登录,还需要建立Cookie,以便下次登陆的时候能够直接读取Cookie中的信息,不用再手动输入自己的信息。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection con=null; login log= null; String account=request.getParameter("username");//获得表单数据 String password=request.getParameter("password"); Cookie cookie=new Cookie(account,password); cookie.setPath("/Servlet_login_war_exploded/cookie"); cookie.setMaxAge(**);//三天 response.addCookie(cookie); try { con=C3p0Utils.getConnection(); QueryRunner qr = new QueryRunner(); String sql = "Select * from login where account=? and password=?"; Object[] select = {account,password}; log = qr.query(con, sql, new BeanHandler<login>((login.class)), select); if(log!=null){ response.getWriter().write("nihao"+account); } else{ response.getWriter().write("wrong"); } } catch (SQLException e) { throw new RuntimeException(e); } }
在响应中,存在Cookie信息和Cookie的过期时间。
(3)查询Cookie是否存在,如果存在,再与数据库中的信息进行对比(只有Cookie是不行的,防止用户已经对账户注销,即数据库中已经没有了用户的信息,而使用Cookie进行登录显然是不合理的)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8");//设置浏览器编码格式 Cookie[] cookies=request.getCookies(); Connection con=null; login log= null; ; try { con= C3p0Utils.getConnection(); QueryRunner qr = new QueryRunner(); String sql = "Select * from login"; List<login> list = qr.query(con, sql, new BeanListHandler<login>((login.class))); if(cookies!=null) {//验证数据库中是否有与Cookie对应的用户 ; i < list.size(); i++) { log= list.get(i); for (Cookie cookie : cookies) { if((log.getAccount().equals(cookie.getName()))&&(log.getPassword().equals(cookie.getValue()))){ successNum++; } } } ){ response.getWriter().write("Successful login with Cookie!"); } else{ request.getRequestDispatcher("page").forward(request,response); } } else{ request.getRequestDispatcher("page").forward(request,response);//请求转发 } } catch (SQLException e) { throw new RuntimeException(e); } }
(4)过程演示:
第一次访问CookieServlet(因为没有Cookie,或者没有符合要求的Cookie,因此要手动输入实现登录):
点击登录(在这个过程中,已经生成了Cookie):
第二次访问CookieServlet(将Cookie中的信息与数据库中的数据进行比对),下图是已经有Cookie的情况:
显然:第二次访问的时候,没有登录界面,可以直接调用Cookie中的数据。
最新文章
- Double Dispatch讲解与实例-面试题
- oracle中number类型的数据使用as string 得到的值为null
- 8.python笔记之面向对象基础
- Treap树
- 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题
- WindowManager
- ios面试汇总
- 递归与尾递归(C语言)
- [codility] Lession1 - Iterations - BinaryGap
- [JAVA]JAVA章4 Thread Dump如何分析
- fcn16s
- RDD编程接口
- 在64位win10下安装32位oracle
- easyui基于web的打印实现 .
- 转:git设置过滤忽略的文件或文件夹
- codevs 1080 线段树练习 CDQ分治
- eclipse在Windows7 64 位下出现Unhandled event loop exception No more handles
- Vue学习计划基础笔记(六) - 组件基础
- BZOJ 1066:[SCOI2007]蜥蜴(最大流)
- 简单了解Linux的inode与block