1.cookie是什么?

cookie是web应用当中非常常用的一种技术,用于储存某些特定的用户信息。

2.cookie的作用?

在用户登陆时将用户的信息存放在cookie中,用户在一定的时间中再次登陆时不需要输入用户名和密码直接跳转到下一个界面。

3.设置cookie

Cookie cookie = new Cookie("key", "value");

cookie.setMaxAge(saveTime*24*60*60);

生存周期默认时间为秒,如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效。

cookie.setPath("/test/test2");

设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getContextPath() + web.xml里配置的该Servlet的url-pattern路径部分) 。

response.addCookie(cookie);

4.读取cookie

该方法可以读取当前路径以及“直接父路径”的所有Cookie对象,如果没有任何Cookie的话,则返回null。如果设置了路径使用这个方法也没有值。

Cookie[] cookies = request.getCookies();

5.删除cookie

Cookie cookie = new Cookie("key", null);

cookie.setMaxAge(0);

设置为0为立即删除该Cookie;

cookie.setPath("/test/test2");

删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie;

response.addCookie(cookie);

下面看一个例子,这是模拟126邮箱登陆的小功能。建立一个名为AutoLoginFilter的project,包结构如下:

Java cookie的使用_cookie

project下有三个java文件、两个jsp还有个html,

CheckLogin.java代码如下:

 

Java cookie的使用_休闲_02public class CheckLogin 
Java cookie的使用_Java_05
Java cookie的使用_Java_06     
public static boolean login(String username, String password) {   
Java cookie的使用_Java_09            
if ("admin".equals(username) && "123456".equals(password)) {   
Java cookie的使用_Java_05                
return true;   
Java cookie的使用_休闲_13            }
 else {   
Java cookie的使用_Java_05                
return false;   
Java cookie的使用_Java_17            }
   
Java cookie的使用_Java_17        }
   
Java cookie的使用_Java_05
Java cookie的使用_职场_20}
 
Java cookie的使用_Java_21
Java cookie的使用_Java_21

IndexFilter.java代码如下:

 

Java cookie的使用_Java_21package com.bx.course;
Java cookie的使用_Java_24
/**
Java cookie的使用_Java_05* Filter可以实现对请求的过滤和重定向等,也就是说可以操作request和response,session等对象,listner只能监听到以上对象的属性的修改。
Java cookie的使用_职场_20
*/
 
Java cookie的使用_Java_21
Java cookie的使用_Java_21
import java.io.IOException;   
Java cookie的使用_Java_21
import javax.servlet.Filter;   
Java cookie的使用_Java_21
import javax.servlet.FilterChain;   
Java cookie的使用_Java_21
import javax.servlet.FilterConfig;   
Java cookie的使用_Java_21
import javax.servlet.ServletException;   
Java cookie的使用_Java_21
import javax.servlet.ServletRequest;   
Java cookie的使用_Java_21
import javax.servlet.ServletResponse;   
Java cookie的使用_Java_21
import javax.servlet.http.Cookie;   
Java cookie的使用_Java_21
import javax.servlet.http.HttpServletRequest;   
Java cookie的使用_Java_21
import javax.servlet.http.HttpServletResponse;   
Java cookie的使用_cookie_39
public class IndexFilter implements Filter {   
Java cookie的使用_cookie_42    
public void destroy() {   
Java cookie的使用_Java_05        
// TODO Auto-generated method stub   
Java cookie的使用_Java_17
    }
   
Java cookie的使用_Java_05    
public void doFilter(ServletRequest arg0, ServletResponse arg1,   
Java cookie的使用_cookie_48            FilterChain arg2) 
throws IOException, ServletException 
Java cookie的使用_Java_05        System.out.println(
"every request pass here haha");
Java cookie的使用_Java_05        HttpServletRequest request 
= (HttpServletRequest) arg0;   
Java cookie的使用_Java_05        HttpServletResponse response 
= (HttpServletResponse) arg1;   
Java cookie的使用_Java_05        Cookie[] cookies 
= request.getCookies();  
Java cookie的使用_Java_05
//        Cookie cookie = new Cookie("user",null);
Java cookie的使用_Java_05
//        cookie.setMaxAge(0);
Java cookie的使用_Java_05
//        response.addCookie(cookie);
Java cookie的使用_Java_05
        String[] cooks = null;   
Java cookie的使用_Java_05        String username 
= null;   
Java cookie的使用_Java_05        String password 
= null
Java cookie的使用_Java_61        
if (cookies != null{   
Java cookie的使用_Java_64            
for (Cookie coo : cookies) {   
Java cookie的使用_Java_05                String aa 
= coo.getValue(); 
Java cookie的使用_Java_05                System.out.println(
"1");
Java cookie的使用_Java_05                cooks 
= aa.split("==");   
Java cookie的使用_Java_70                
if (cooks.length == 2{
Java cookie的使用_Java_05                    System.out.println(cooks[
0]+cooks[1]);
Java cookie的使用_Java_05                    username 
= cooks[0];   
Java cookie的使用_Java_05                    password 
= cooks[1];   
Java cookie的使用_Java_17                }
   
Java cookie的使用_Java_17            }
   
Java cookie的使用_Java_17        }
 
Java cookie的使用_Java_05        System.out.println(
"cookie username | " + username);
Java cookie的使用_Java_05        System.out.println(
"cookie password | " + password);
Java cookie的使用_职场_81        
if (CheckLogin.login(username, password)) {
Java cookie的使用_Java_05            System.err.println(
"check successfully cookie data ");
Java cookie的使用_Java_05            request.getSession().setAttribute(
"username",username);   
Java cookie的使用_Java_05            request.getRequestDispatcher(
"/main126.jsp").forward(request, response);
Java cookie的使用_职场_87        }
else{   
Java cookie的使用_Java_05            arg2.doFilter(request,response );   
Java cookie的使用_Java_17        }
   
Java cookie的使用_Java_17    }
   
Java cookie的使用_Java_93    
public void init(FilterConfig arg0) throws ServletException {   
Java cookie的使用_Java_05        
// TODO Auto-generated method stub   
Java cookie的使用_Java_17
    }
   
Java cookie的使用_职场_20}
 
Java cookie的使用_Java_21
Java cookie的使用_Java_21

LoginServlet.java代码如下:

 

Java cookie的使用_Java_21package com.bx.course;
Java cookie的使用_Java_21
import java.io.IOException;   
Java cookie的使用_Java_21
Java cookie的使用_Java_21
import javax.servlet.ServletException;   
Java cookie的使用_Java_21
import javax.servlet.http.Cookie;   
Java cookie的使用_Java_21
import javax.servlet.http.HttpServlet;   
Java cookie的使用_Java_21
import javax.servlet.http.HttpServletRequest;   
Java cookie的使用_Java_21
import javax.servlet.http.HttpServletResponse;   
Java cookie的使用_cookie_109
public class LoginServlet extends HttpServlet {   
Java cookie的使用_Java_05    
public void doGet(HttpServletRequest request, HttpServletResponse response)   
Java cookie的使用_职场_113            
throws ServletException, IOException {   
Java cookie的使用_Java_05        
this.doPost(request, response);   
Java cookie的使用_Java_17    }
   
Java cookie的使用_Java_05    
public void doPost(HttpServletRequest request, HttpServletResponse response)   
Java cookie的使用_Java_119            
throws ServletException, IOException {   
Java cookie的使用_Java_05           String username
=request.getParameter("username");   
Java cookie的使用_Java_05           String password
=request.getParameter("password");   
Java cookie的使用_Java_05           String savetime
=request.getParameter("saveTime"); 
Java cookie的使用_Java_05           System.out.println(
"usrename  "+username+"  password "+password);
Java cookie的使用_职场_126           
if(CheckLogin.login(username, password)){   
Java cookie的使用_Java_129               
if(null!=savetime){   
Java cookie的使用_Java_05                   
int saveTime=Integer.parseInt(savetime);//这里接受的表单值为天来计算的   
Java cookie的使用_Java_05
                   int seconds=saveTime*24*60*60;   
Java cookie的使用_Java_05                   Cookie cookie 
= new Cookie("user", username+"=="+password); 
Java cookie的使用_Java_05                   cookie.setMaxAge(seconds);                      
Java cookie的使用_Java_05                   response.addCookie(cookie);   
Java cookie的使用_Java_17               }
   
Java cookie的使用_Java_05               request.setAttribute(
"username",username);   
Java cookie的使用_Java_05               request.getRequestDispatcher(
"/main126.jsp").forward(request,response);   
Java cookie的使用_职场_140           }
else{   
Java cookie的使用_Java_05               request.getRequestDispatcher(
"/failure.jsp").forward(request,response);   
Java cookie的使用_Java_17           }
   
Java cookie的使用_Java_17    }
   
Java cookie的使用_职场_20}
   
Java cookie的使用_Java_21
Java cookie的使用_Java_21

web.xml配置文件代码如下:

 

Java cookie的使用_Java_21<filter>
Java cookie的使用_Java_21        
<filter-name>loginFilter</filter-name>
Java cookie的使用_Java_21        
<filter-class>com.bx.course.IndexFilter</filter-class>
Java cookie的使用_Java_21    
</filter>
Java cookie的使用_Java_21    
<filter-mapping>
Java cookie的使用_Java_21        
<filter-name>loginFilter</filter-name>
Java cookie的使用_Java_21        
<url-pattern>/login.html</url-pattern>
Java cookie的使用_Java_21    
</filter-mapping>
Java cookie的使用_Java_21    
<servlet>
Java cookie的使用_Java_21        
<servlet-name>LoginServlet</servlet-name>
Java cookie的使用_Java_21        
<servlet-class>com.bx.course.LoginServlet</servlet-class>
Java cookie的使用_Java_21    
</servlet> 
Java cookie的使用_Java_21
Java cookie的使用_Java_21    
<servlet-mapping>
Java cookie的使用_Java_21        
<servlet-name>LoginServlet</servlet-name>
Java cookie的使用_Java_21        
<url-pattern>/login.do</url-pattern>
Java cookie的使用_Java_21    
</servlet-mapping>
Java cookie的使用_Java_21    
<welcome-file-list>
Java cookie的使用_Java_21        
<welcome-file>login.html</welcome-file>
Java cookie的使用_Java_21    
</welcome-file-list> 
Java cookie的使用_Java_21
Java cookie的使用_Java_21    
<welcome-file-list>
Java cookie的使用_Java_21        
<welcome-file>main126.jsp</welcome-file>
Java cookie的使用_Java_21    
</welcome-file-list> 
Java cookie的使用_Java_21
Java cookie的使用_Java_21

login.html代码如下:

 

Java cookie的使用_Java_21<html>  
Java cookie的使用_Java_21  
<head>  
Java cookie的使用_Java_21  
</head>  
Java cookie的使用_Java_21  
<body>  
Java cookie的使用_Java_21  
<form action="login.do">  
Java cookie的使用_Java_21    126邮箱登录
<br/><br/>
Java cookie的使用_Java_21           用户名:
<input type="text" name="username" ><br/>  
Java cookie的使用_Java_21           密    码:
<input type="text" name="password" ><br/>  
Java cookie的使用_Java_21   
<select name="saveTime">  
Java cookie的使用_Java_21        
<option value="366">一年</option>  
Java cookie的使用_Java_21        
<option value="183">半年</option>  
Java cookie的使用_Java_21        
<option value="30">一个月</option>    
Java cookie的使用_Java_21        
<option value="7">一周</option>  
Java cookie的使用_Java_21   
</select><br/>  
Java cookie的使用_Java_21   
<input type="submit" value="登录" />
Java cookie的使用_Java_21  
</form>  
Java cookie的使用_Java_21  
</body>  
Java cookie的使用_Java_21
</html>  
Java cookie的使用_Java_21
Java cookie的使用_Java_21

main126.jsp代码如下:

 

Java cookie的使用_Java_21<html>  
Java cookie的使用_Java_21  
<head>  
Java cookie的使用_Java_21     
<title>测试cookie</title>  
Java cookie的使用_Java_21  
</head>  
Java cookie的使用_Java_21  
<body>  
Java cookie的使用_Java_21         
<h2>登录成功,欢迎${username}的到来 126邮箱</h2><br/>
Java cookie的使用_Java_21         
<h3>测试cookie的功能
Java cookie的使用_Java_21  
</body>  
Java cookie的使用_Java_21
</html>  
Java cookie的使用_Java_21
Java cookie的使用_Java_21

failure.jsp代码如下:

 

Java cookie的使用_Java_21<body>
Java cookie的使用_Java_21    Login failure 
<br>
Java cookie的使用_Java_21  
</body>

 

运行效果:

在IE地址栏中输入http://localhost:8080/LoginFilter/login.html

显示如下界面:

Java cookie的使用_Java_209

输入用户名:admin    密码:123456 选择保存时间,然后点击登陆,就会进入以下界面:

Java cookie的使用_cookie_210

 

在保存时间内再次在IE地址栏中输入:http://localhost:8080/LoginFilter/login.html

就会直接进入登陆成功界面。如果用户名或密码不正确则会进入以下界面:

Java cookie的使用_Java_211