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>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/login" method="get">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="text" name="password"/></td>
</tr>
<tr>
<td colspan="1"><input type="checkbox" name="saveName" value="ok">记住用户名</td>
<td colspan="1"><input type="checkbox" name="autoLogin" value="ok">自动登录</td>
</tr>
<tr>
<td colspan="2"><input type="submit"></td>
</tr>
</table>
</form>
<script type="text/javascript">
onload=function(){
var s = "${cookie.savename.value}";
s = decodeURI(s);
//alert(s);
document.getElementsByName("username")[0].value=s;
}
</script>
</body>
</html>
servlet
package com.huida.web.servlet;
import java.io.IOException;
import java.net.URLEncoder;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.huida.bean.User;
import com.huida.constant.Constant;
import com.huida.service.UserService;
/**
* 登录
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0设置编码
request.setCharacterEncoding("utf-8");
//1.获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+"...."+password);
//2.调用service
User user=null;
try {
user = new UserService().login(username, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//3.判断user是否为空
if(user==null){
//System.out.println("没有此用户");
request.getRequestDispatcher("/login.jsp").forward(request, response);
//System.out.println("为空了....");
return;
}else{
//System.out.println("有此用户");
//不为空 跳转到sucess.jsp
request.getSession().setAttribute("user", user);
//判断是否勾选了自动登录 若勾选了需要将用户名和密码放入到cookie中,写回浏览器 cookie不支持中文
if(Constant.IS_AUTO_LOGIN.equals(request.getParameter("autoLogin"))){
Cookie c = new Cookie("autologin",username+"-"+password);
c.setMaxAge(3600);
c.setPath(request.getContextPath()+"/");
response.addCookie(c);
}
//判断是否勾选 了记住用户名
//Constant.IS_SAVE_NAME.equals(request.getParameter("saveName"))
//Constant.IS_SAVE_NAME.equals(request.getParameter("saveName"))
if(true){
System.out.println("进来了");
//创建cookie
Cookie c = new Cookie("savename", URLEncoder.encode(username,"utf-8"));
c.setMaxAge(3600);
c.setPath(request.getContextPath()+"/");
response.addCookie(c);
}
//页面重定向
response.sendRedirect(request.getContextPath()+"/success.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
filter
package com.huida.web.filter;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.huida.bean.User;
import com.huida.service.UserService;
import com.huida.utils.CookUtils;
import net.sf.json.JSON;
import net.sf.json.JSONArray;
public class AutoLoginFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
//强转
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
//判断session中有无登录用户没有的话继续自动登录
User user = (User) request.getSession().getAttribute("user");
//System.out.println(JSONArray.fromObject(user));
if(user==null){
//没用用户 需要自动登录
//判断访问的资源是否有和登录注册相关,若相关则不需要自动登录
String path = request.getRequestURI();
//System.out.println(path);
if(!path.contains("/login")){
//获取指定的cookie
Cookie c = CookUtils.getCookieByName("autologin",request.getCookies());
//判断cookie是否为空
//若不为空 获取值(username password) 调用service完成登录
if(c!=null){
String username = c.getValue().split("-")[0];
String password = c.getValue().split("-")[1];
//调用service完成登录
//User user = null;
try {
user = new UserService().login(username, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(user!=null){
//将user放入session中
request.getSession().setAttribute("user", user);
}
}
}
}
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}