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,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(3*24*3600);//三天 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,IOException { request.setCharacterEnCoding("utf-8"); response.setContentType("text/HTML; charset=utf-8");//设置浏览器编码格式 cookie[] cookies=request.getcookies(); Connection con=null; login log= null; int successNum=0; try { con= C3p0Utils.getConnection(); queryRunner qr = new queryRunner(); String sql = "Select * from login"; List<login> List = qr.query(con,new BeanListHandler<login>((login.class))); if(cookies!=null) {//验证数据库中是否有与cookie对应的用户 for (int i = 0; i < List.size(); i++) { log= List.get(i); for (cookie cookie : cookies) { if((log.getAccount().equals(cookie.getname()))&&(log.getpassword().equals(cookie.getValue()))){ successNum++; } } } if(successNum>=1){ 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中的数据。
总结以上是内存溢出为你收集整理的Cookie的应用——Servlet实现三天免登录全部内容,希望文章能够帮你解决Cookie的应用——Servlet实现三天免登录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)