1 核心逻辑代码

public static void remember(HttpServletRequest request,
HttpServletResponse response, String logonName, String logonPwd)
{

//创建2个Cookie分别存放登录名和密码
//如果logonName中存在中文,此时response中不能存放,将logonName转换成二进制的形式
//对中文进行编码
try {
logonName = URLEncoder. encode(logonName, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Cookie nameCookie = new Cookie( "name",logonName);
Cookie passwordCookie = new Cookie( "password",logonPwd);
//设置Cookie的有效路径(项目的绝对路径)
nameCookie.setPath(request.getContextPath()+ "/");
passwordCookie.setPath(request.getContextPath()+ "/");
//设置Cookie的有效时长(1个星期),用页面的复选框进行判断是否需要设置
String remeberMe = request.getParameter( "remeberMe");
//如果选择复选框(设置有效时长为1个星期)
if(remeberMe!= null && remeberMe.equals( "yes")){
nameCookie.setMaxAge(7*24*60*60);
passwordCookie.setMaxAge(7*24*60*60);
}
//没有选择复选框(清空有效时长)
else{
nameCookie.setMaxAge(0);
passwordCookie.setMaxAge(0);
}
//将2个Cookie放置到response对象中
response.addCookie(nameCookie);
response.addCookie(passwordCookie);
}

}

2 创建自定义过滤器,实现doFilter方法。

3 获取访问页面时,需要先执行filter的页面路径

String path=request.getServletPath();

4 在访问menu/index.jsp页面之前,先加载记住我的功能属性,放置到request对象中,在index.jsp中进行显示

private void forwardIndexPage (String path, HttpServletRequest request) {
//表示跳转到的是,首页的index.jsp
if(path!= null && path.equals( "/index.jsp")){
String name = "";
String password = "";
String checked = "";
Cookie [] cookies = request.getCookies();
if(cookies!= null && cookies. length>0){
for(Cookie cookie:cookies){
if(cookie.getName().equals( "name")){
name = cookie.getValue();
//如果name存在中文的二进制,需要将二进制的格式转换成中文
try {
name = URLDecoder. decode(name, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
checked = "checked";
}
if(cookie.getName().equals( "password")){
password = cookie.getValue();
}
}
}
request.setAttribute( "name", name);
request.setAttribute( "password", password);
request.setAttribute( "checked", checked);
}
}

5 在web.xml中添加过滤器,要放在struts核心拦截器前,防止struts拦截器转发