代码粗略,请大佬们勿喷
这一次的编写需要特别注意cookies获取时的空指针异常
在使用cookie自动登录的时候未对账号密码进行输入,request.getParameter()会返回null值,避免使用null.equals("")防止空指针异常
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在servlet中获取获取cookie信息,完成登录功能
String cookieUser=null;
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies)
{
if("user".equals(cookie.getName())){
cookieUser=cookie.getValue();
break;
}
}
}
//使用编码过滤器后,在servlet中不在进行编码转换
String userName=request.getParameter("userName");
String password=request.getParameter("password");
HttpSession session=null;
if("admin".equals(userName)&&"123456".equals(password)||cookieUser!=null){
//避免空指针异常
//模拟登录成功,可以进行会话跟踪
session=request.getSession(); //获得当前用户的会话,如果没有则会创建一个新的会话
//(括号内如果是true)如果当前没有会话,则创建一个新的会话
//(括号内如果是false)如果当前没有回话,则返回null,不会创建新会话
//更新会话
session.setAttribute("LOGIN_USER", cookieUser!=null?cookieUser:userName);
//使用cookie实现自动登录功能
// 1.用户登录成功,创建cookie信息到客户端中
// 2.构造cookie对象
Cookie cookie=new Cookie("user",cookieUser!=null?cookieUser:userName );
//作用目录,设置cookie在服务器的生效路径
cookie.setPath("/");
cookie.setMaxAge(3600*2);//设置有效时间
//把cookie发送到客户端
//客户端接收到cookie后会保存到浏览器缓存中
response.addCookie(cookie);
//当浏览器再次打开本网站时,浏览器会读取有效的cookie信息,发送到服务器
// request.getRequestDispatcher("index.jsp").forward(request, response);
//表单提交后需要修改浏览器上的网址,否则,当刷新页面时会产生表单的重复提交、使用重定向
//解决表单重复提交方法:
// 1.在服务端使用页面重定向,返回一个新的URL
// 2.在ajax请求时,经常采用禁用提交按钮的方式
response.sendRedirect("index.jsp");
}else{
//模拟登录失败,
session=request.getSession(true);
session.removeAttribute("LOGIN_USER");
// request.getRequestDispatcher("index.html").forward(request, response);
response.sendRedirect("index.html");
}