本案例实现的功能是:
在用户登录时,勾选下次自动登录复选框,下次用户就可以不用登录直接进入index.jsp主界面
实现代码如下
<%@ page language= "java" import= "java.util.*"pageEncoding ="UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://" +request.getServerName()+ ":"+request.getServerPort()+path+ "/" ;
%>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
< html>
<head >
<base href= "<%= basePath%> " >
<title >My JSP 'index.jsp' starting page</ title>
<meta http-equiv= "pragma" content ="no-cache" >
<meta http-equiv= "cache-control" content ="no-cache" >
<meta http-equiv= "expires" content= "0" >
<meta http-equiv= "keywords" content ="keyword1,keyword2,keyword3" >
<meta http-equiv= "description" content= "This is my page">
<!--
<link rel="stylesheet " type="text/css"href="styles.css">
-->
</head >
<body >
欢迎你${user.username } <br >
</body >
</ html>
//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>
<form action =" ${pageContext.request.contextPath }/servlet/loginServlet" method= "post">
用户名: < input type= "text" name ="username" >< br>
密码: < input type= "password" name = "pwd">< br >
<input type= "checkbox" name= "autologin" >自动登录 < br>
<input type= "submit" name= "login" value = "登录">
</form >
</ body>
</ html>
//web.xml
<? xml version= "1.0" encoding = "UTF-8"?>
< web-app xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"xmlns= "http://java.sun.com/xml/ns/javaee"xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id= "WebApp_ID" version = "3.0">
<display-name >day17_autoLogin </ display-name>
<filter >
<filter-name >AutonLoginFilter </ filter-name>
< filter-class >com.wency.servlet.AutonLoginFilter </ filter-class>
</filter >
<filter-mapping >
<filter-name >AutonLoginFilter </ filter-name>
<url-pattern >/* </ url-pattern>
</filter-mapping >
<servlet >
<servlet-name >LoginServlet </ servlet-name>
< servlet-class> com.wency.servlet.LoginServlet </servlet-class >
</servlet >
<servlet-mapping >
<servlet-name >LoginServlet </ servlet-name>
< url-pattern> /servlet/loginServlet </ url-pattern>
</servlet-mapping >
</ web-app>
//LoginServlet
package com.wency.servlet;
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;
import com.wency.entity.User;
import com.wency.service.ServiceImpl;
public class LoginServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public LoginServlet() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
String autologin = request.getParameter("autologin");
ServiceImpl serviceImpl=new ServiceImpl();
User user=serviceImpl.findUserByName(username);
if(user!=null){//如果用户不为空
//如果用户的密码输入正确
if(pwd.equals(user.getPwd())){
Cookie cookie=new Cookie("user",user.getUsername()+"&"+user.getPwd());
cookie.setPath("/");
if(autologin!=null){
cookie.setMaxAge(60*60*24*7);//保存cookie值7天
}else{
cookie.setMaxAge(0);//如果不自动登录则将cookie值清除
}
//将user加入到session中去
//将cookie加入到response中
response.addCookie(cookie);
request.getRequestDispatcher("/index.jsp")
.forward(request, response);
}
}else {
response.getWriter().print("用户名不存在!");
request.getRequestDispatcher("/login.jsp")
.forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
//AutologinFilter
package com.wency.servlet;
import java.io.IOException;
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.wency.entity.User;
import com.wency.service.ServiceImpl;
public class AutonLoginFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req , ServletResponse res ,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request =(HttpServletRequest) req ;
HttpServletResponse response =(HttpServletResponse) res ;
//获得cookies
Cookie[] cookies = request.getCookies();
String name= "" ;
String pwd ="" ;
ServiceImpl serviceImpl =newServiceImpl();
User user= null ;
String path= request.getContextPath();
String uri= request.getRequestURI();
path= uri.substring( path.length());
if (!("/login.jsp" .equals(path )||"/servlet/loginServlet" .equals(uri ))){
user=(User) request .getSession().getAttribute("user" );
}
if (cookies != null){
//如果用户还没登陆,则将user的信息保存到session中,否则直接放行
System. out .println("path: "+ path);
if (user == null){
//处理获得的cookie
for (int i = 0; i < cookies .length ; i ++) {
if ("user" .equals(cookies [i ].getName())){
String value =cookies [i ].getValue();
String[] strings =value .split("&" );
name= strings[0];
pwd= strings[1];
user =serviceImpl .findUserByName( name);
//将user加入到session中
request.getSession().setAttribute( "user" , user );
System. out .println("username: "+ user.getUsername());
}
}
}
}
//放行
chain.doFilter( req, res);
}
@Override
public void init(FilterConfig filterConfig )throws ServletException {
// TODO Auto-generated method stub
}
}