1.为什么要实现记住用户名功能
我们在登陆QQ的时候,需要输入QQ账号和密码,因为QQ号比较长,如果每次登陆都要重新输入一遍的话,会显得格外繁杂。因此我们在自己的电脑上登陆QQ的时候,可以勾选记住用户名功能,这个我们就不用每次都输入账号密码了
2.怎样实现记住用户名功能
我们之前学过cookie,cookie简单的说就是缓存,它可以将服务器的数据缓存到客户端,我们就用cookie来实现记住登陆用户名的功能。cookie类中封装了setMaxAge方法,可是设置cookie的缓存时间,我们就是通过控制cookie的缓存时间来实现这个功能。先创建一个cookie对象,将从request对象中解析到的用户名数据存储到cookie中,判断是否勾选记住用户名的复选框,如果未勾选(即得到的remember值为null)我们便设置cookie的有效实现为0,如果勾选则设置有效时间为Integer对象中的常量MAX_VALUE
因为还没有学过JSP,所以先用servlet来实现一个登陆界面,在显示界面之前,我们要先判断在cookie是否存在用户名,如果存在,就优先将保存的用户名显示到界面上
下面是实现代码
package edu.swpu.login;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String userName ="";
String checked = "";
//得到客户端保存的Cookie数据
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies != null && i < cookies.length; i++) {
if("userName".equals(cookies[i].getName())){
userName = cookies[i].getValue();
checked = "checked='checked'";
}
}
out.write("<form action='"+request.getContextPath()+"/servlet/doLogin' method='post'>");
out.write("用户名:<input type='text' name='userName' value='"+userName+"'/><br/>");
out.write("密码:<input type='password' name='pwd'/><br/>");
out.write("<input type='checkbox' name='remember' "+checked+" />记住用户名<br/>");
out.write("<input type='submit' value='登录'/><br/>");
out.write("</form>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package edu.swpu.login;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DoLoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//获取表单数据
String userName = request.getParameter("userName");
String pwd = request.getParameter("pwd");
String remember = request.getParameter("remember");
Cookie ck = new Cookie("userName", userName);
ck.setPath("/");
//处理业务逻辑
//分发转向
if("tom".equals(userName)&&"123".equals(pwd)){
if(remember != null){
ck.setMaxAge(Integer.MAX_VALUE); //设置Cookie的有效保存时间
}else{
ck.setMaxAge(0); //删除Cookie
}
response.addCookie(ck); //将Cookie写回到客户端
out.write("登录成功!");
}else{
out.write("登录失败!");
//设置2秒跳到重新登录
response.setHeader("refresh", "2;url="+request.getContextPath()+"/servlet/login");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}