首先,此案例需要准备三个JSP页面:
1. login.jsp:负责登陆页面的显示(表单提交给dologin.jsp页面处理)
2. dologin.jsp:负责判断用户是否登陆成功、用户是否勾选记住账号密码(勾选则使用Cookies保存用户信息)、查看用户信息
3. user.jsp :显示用户信息页面(只有勾选了十天内保存用户信息才会显示用户信息)
不添加任何业务逻辑的三个页面的代码如下:
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>用户登陆界面</title> </head> <body> <h1>用户登陆</h1> <hr> <form name="loginForm" action="dologin.jsp" method="post"> <table> <tr> <td>UserName:</td> <td><input type="text" name="username" value=""/></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="password" value=""/></td> </tr> <tr> <td colspan="2"><input type="checkbox" name="isUseCookies" checked="checked"/>十天内记住我的登陆状态</td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="登陆"/><input type="reset" value="取消" /></td> </tr> </table> </form> </body> </html>
运行效果:
dologin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登陆成功</title> </head> <body> <h1>登陆成功</h1> <hr> <a href="user.jsp">查看用户信息</a> </body> </html>
运行效果
user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登陆成功</title> </head> <body> <h1>用户资料</h1> <hr> 用户名:<br> 密码:<br> </body> </html>
运行效果
接下来添加业务逻辑代码。
login.jsp中要判断是否保存了该用户的登陆信息,保存了的信息直接赋值,不需要用户再次手动输入;dologin.jsp中判断是否需要保存用户信息,没保存的判断是否需要保存(使用Cookies保存);user.jsp中获取dologin.jsp处保存的Cookies信息。
1.dologin.jsp中的业务逻辑代码(判断是否需要保存用户信息并进行相应处理)
<% request.setCharacterEncoding("utf-8"); //防止中文乱码 //首先判断用户是否选择保存登陆状态 String[] isUseCookies = request.getParameterValues("isUseCookies"); //选择保存:不为空且大于0 if(isUseCookies != null && isUseCookies.length>0){ String username = URLEncoder.encode(request.getParameter("username"),"utf-8"); //使用URLEncoder解决 无法在Cookies对象中无法保存中文字符的问题 String password = URLEncoder.encode(request.getParameter("password"), "utf-8"); //使用Cookies对象保存字符串 Cookie usernemeCookie = new Cookie("username",username); Cookie passwordCookie = new Cookie("password",password);
<% String username = ""; //用户名 String password = ""; //密码 Cookie[] cookies = request.getCookies(); //保存有cookie对象 if(cookies != null && cookies.length > 0){ for(Cookie c: cookies){ if(c.getName().equals("username")){ username = c.getValue(); } if(c.getName().equals("passwird")){ password = c.getValue(); } } } %> 用户名:<%=username %><br> 密码:<%=password %><br>
//设置Cookie对象的最长生存期限(单位为秒):十天usernemeCookie.setMaxAge(864000);passwordCookie.setMaxAge(864000);//使用response对象 保存Cookie对象response.addCookie(usernemeCookie);response.addCookie(passwordCookie);}else{ //选择不保存Cookie[] cookies = request.getCookies();//如果已经保存了cookie对象 则需要将它的生存期限设为0if(cookies != null && cookies.length >0){for(Cookie c : cookies){if(c.getName().equals("username") || c.getName().equals("password")){c.setMaxAge(0); //设置cookies失效response.addCookie(c); //重新保存 不然不会起作用}}}}%>
2. user.jsp中的业务逻辑代码(只需获取cookies值,即接收用户信息)
<% request.setCharacterEncoding("utf-8"); String username = ""; //用户名 String password = ""; //密码 Cookie[] cookies = request.getCookies(); //保存有cookie对象 if(cookies != null && cookies.length > 0){ for(Cookie c: cookies){ if(c.getName().equals("username")){ username = URLDecoder.decode(c.getValue(),"utf-8"); } if(c.getName().equals("password")){ password = URLDecoder.decode(c.getValue(),"utf-8"); } } } %> 用户名:<%=username %><br> 密码:<%=password %><br>
3. login.jsp业务逻辑(判断是否保存过用户信息)
此处仍需要接收用户信息,与user.jsp中的代码相似
<% request.setCharacterEncoding("utf-8"); String username = ""; //用户名 String password = ""; //密码 Cookie[] cookies = request.getCookies(); //保存有cookie对象 if(cookies != null && cookies.length > 0){ for(Cookie c: cookies){ if(c.getName().equals("username")){ username = URLDecoder.decode(c.getValue(),"utf-8"); } if(c.getName().equals("password")){ password = URLDecoder.decode(c.getValue(),"utf-8"); } } } %>
<tr> <td>UserName:</td> <td><input type="text" name="username" value="<%=username %>"/></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="password"/ value="<%=password %>"></td> </tr>
下面是运行过程中出现的问题:
1.login.jsp与user.jsp中password单词乒协错误,造成输入的密码无法保存
2.只注意dologin.jsp中使用URLEncoder.encode()方法进行编码,却忘记在user.jsp\login.jsp中使用URLDecoder.decode()方法进行解码,而造成中文乱码问题
3. dologin.jsp中设置了request.setCharacterEncoding("utf-8"); 却在user.jsp\login.jsp中忘记设置