描述:使用jsp完成浏览器登录自动填写账号及密码功能
技术:pageContext + reqeust + response + cookie + EL
原理:
1.本程序表单是提交到本身
2.设置reqeust对象的编码,防止获取中文出现乱码
3.request调用getParameter方法获取账号及密码,提交到本身必须要进行空值判断并获取获取所有cookie
4.扫描客户端所有cookie判断是否已经存在标志属性,例如程序中使用的my,如果查找到则直接将标记设置为false,如果无标志属性则设置cookie,并将cookie添加到response中和设置cookie的保存时间,账号及密码使用#作为分隔,方便分隔
5.同理取出再次扫描客户端所有cookie,如果查找到属性标志则取出其值,然后调用split方法将账号及密码分隔并设置pageContext内置对象中,方便EL进行获取
6.EL根据属性取出值,EL的好处就是如果属性为空则用""进行替换
代码:
<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSP</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <% boolean flag = true; // 用于记录是否插入 Cookie[] cookiesTmp = request.getCookies(); // 获取所有cookie request.setCharacterEncoding("UTF-8"); //设置编码,防止出现中文乱码 String name = request.getParameter("uname"); // 获取用户名 String pass = request.getParameter("upass"); // 获取密码 // 注意表单提交到本身必须进行控制判断 if(cookiesTmp != null && name != null & pass!= null){ for (Cookie i : cookiesTmp) { // foreach方法遍历 if ("my".equals(i.getName())){ // 如果已经存在god(为此程序的cookie读取标志) flag = false; // 设置标记为不能插入 break; // 跳出 } } // 如果flag为真则设置cookie if (flag) { Cookie cookie = new Cookie("my",name + "#" + pass); // 设置保存时间为30分钟,单位秒30 * 60得到半小时的秒数 cookie.setMaxAge(30 * 60); response.addCookie(cookie); } } %> <!-- 假如有则取出账号及密码并设置属性 --> <% Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie i : cookies) { if ("my".equals(i.getName())){ // 设置属性,此处使用用了字符串分隔方法split // pageContext.setAttribute("属性名","值"); pageContext.setAttribute("name", i.getValue().split("#")[0]); pageContext.setAttribute("pass", i.getValue().split("#")[1]); } } } %> <!-- action=""表示提交到本身;${name}为EL表达式意思为取出name的属性值 --> <form action="" method="post"> <label for="uname">账号:</label> <input type="text" id="uname" name="uname" value="${name}"> <br> <br> <label for="upass">密码:</label> <input type="password" id="upass" name="upass" value="${pass}"> <br> <br> <input type="submit" value="登录"> <input type="reset" value="重置"> </form> </body> </html>
运行结果:
1.首次登陆
2.输入账号及密码并选择登陆
3.登陆完成后会回到,此时刷新一下发现账号和密码自动填写
提示:使用cookie保存密码很不安全,所以通常保存用户名即可,当然也可以由用户选择是否保存账号或密码