本案例实现的功能是:
在用户登录时,勾选下次自动登录复选框,下次用户就可以不用登录直接进入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 } }