码迷,mamicode.com
首页 > 编程语言 > 详细

Java cookie的使用

时间:2016-05-11 19:39:18      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:

转自:http://www.blogjava.net/tscfengkui/archive/2011/01/21/343341.html

很感谢,让小白明白其中道理

Java cookie的使用

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,包结构如下:

技术分享

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

CheckLogin.java代码如下:

 

技术分享public class CheckLogin 
技术分享
技术分享     public static boolean login(String username, String password) {   
技术分享            if ("admin".equals(username) && "123456".equals(password)) {   
技术分享                return true;   
技术分享            } else {   
技术分享                return false;   
技术分享            }   
技术分享        }   
技术分享
技术分享
技术分享
技术分享

IndexFilter.java代码如下:

 

技术分享package com.bx.course;
技术分享/**
技术分享* Filter可以实现对请求的过滤和重定向等,也就是说可以操作request和response,session等对象,listner只能监听到以上对象的属性的修改。
技术分享*/ 
技术分享
技术分享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;   
技术分享public class IndexFilter implements Filter {   
技术分享    public void destroy() {   
技术分享        // TODO Auto-generated method stub   
技术分享    }   
技术分享    public void doFilter(ServletRequest arg0, ServletResponse arg1,   
技术分享            FilterChain arg2) throws IOException, ServletException 
技术分享        System.out.println("every request pass here haha");
技术分享        HttpServletRequest request = (HttpServletRequest) arg0;   
技术分享        HttpServletResponse response = (HttpServletResponse) arg1;   
技术分享        Cookie[] cookies = request.getCookies();  
技术分享//        Cookie cookie = new Cookie("user",null);
技术分享//        cookie.setMaxAge(0);
技术分享//        response.addCookie(cookie);
技术分享        String[] cooks = null;   
技术分享        String username = null;   
技术分享        String password = null; 
技术分享        if (cookies != null) {   
技术分享            for (Cookie coo : cookies) {   
技术分享                String aa = coo.getValue(); 
技术分享                System.out.println("1");
技术分享                cooks = aa.split("==");   
技术分享                if (cooks.length == 2) {
技术分享                    System.out.println(cooks[0]+cooks[1]);
技术分享                    username = cooks[0];   
技术分享                    password = cooks[1];   
技术分享                }   
技术分享            }   
技术分享        } 
技术分享        System.out.println("cookie username | " + username);
技术分享        System.out.println("cookie password | " + password);
技术分享        if (CheckLogin.login(username, password)) {
技术分享            System.err.println("check successfully cookie data ");
技术分享            request.getSession().setAttribute("username",username);   
技术分享            request.getRequestDispatcher("/main126.jsp").forward(request, response);
技术分享        }else{   
技术分享            arg2.doFilter(request,response );   
技术分享        }   
技术分享    }   
技术分享    public void init(FilterConfig arg0) throws ServletException {   
技术分享        // TODO Auto-generated method stub   
技术分享    }   
技术分享
技术分享
技术分享

LoginServlet.java代码如下:

 

技术分享package com.bx.course;
技术分享import java.io.IOException;   
技术分享
技术分享import javax.servlet.ServletException;   
技术分享import javax.servlet.http.Cookie;   
技术分享import javax.servlet.http.HttpServlet;   
技术分享import javax.servlet.http.HttpServletRequest;   
技术分享import javax.servlet.http.HttpServletResponse;   
技术分享public class LoginServlet extends HttpServlet {   
技术分享    public void doGet(HttpServletRequest request, HttpServletResponse response)   
技术分享            throws ServletException, IOException {   
技术分享        this.doPost(request, response);   
技术分享    }   
技术分享    public void doPost(HttpServletRequest request, HttpServletResponse response)   
技术分享            throws ServletException, IOException {   
技术分享           String username=request.getParameter("username");   
技术分享           String password=request.getParameter("password");   
技术分享           String savetime=request.getParameter("saveTime"); 
技术分享           System.out.println("usrename  "+username+"  password "+password);
技术分享           if(CheckLogin.login(username, password)){   
技术分享               if(null!=savetime){   
技术分享                   int saveTime=Integer.parseInt(savetime);//这里接受的表单值为天来计算的   
技术分享                   int seconds=saveTime*24*60*60;   
技术分享                   Cookie cookie = new Cookie("user", username+"=="+password); 
技术分享                   cookie.setMaxAge(seconds);                      
技术分享                   response.addCookie(cookie);   
技术分享               }   
技术分享               request.setAttribute("username",username);   
技术分享               request.getRequestDispatcher("/main126.jsp").forward(request,response);   
技术分享           }else{   
技术分享               request.getRequestDispatcher("/failure.jsp").forward(request,response);   
技术分享           }   
技术分享    }   
技术分享}   
技术分享
技术分享

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

 

技术分享<filter>
技术分享        <filter-name>loginFilter</filter-name>
技术分享        <filter-class>com.bx.course.IndexFilter</filter-class>
技术分享    </filter>
技术分享    <filter-mapping>
技术分享        <filter-name>loginFilter</filter-name>
技术分享        <url-pattern>/login.html</url-pattern>
技术分享    </filter-mapping>
技术分享    <servlet>
技术分享        <servlet-name>LoginServlet</servlet-name>
技术分享        <servlet-class>com.bx.course.LoginServlet</servlet-class>
技术分享    </servlet> 
技术分享
技术分享    <servlet-mapping>
技术分享        <servlet-name>LoginServlet</servlet-name>
技术分享        <url-pattern>/login.do</url-pattern>
技术分享    </servlet-mapping>
技术分享    <welcome-file-list>
技术分享        <welcome-file>login.html</welcome-file>
技术分享    </welcome-file-list> 
技术分享
技术分享    <welcome-file-list>
技术分享        <welcome-file>main126.jsp</welcome-file>
技术分享    </welcome-file-list> 
技术分享
技术分享

login.html代码如下:

 

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

main126.jsp代码如下:

 

技术分享<html>  
技术分享  <head>  
技术分享     <title>测试cookie</title>  
技术分享  </head>  
技术分享  <body>  
技术分享         <h2>登录成功,欢迎${username}的到来 126邮箱</h2><br/>
技术分享         <h3>测试cookie的功能
技术分享  </body>  
技术分享</html>  
技术分享
技术分享

failure.jsp代码如下:

 

技术分享<body>
技术分享    Login failure <br>
技术分享  </body>

 

运行效果:

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

显示如下界面:

技术分享

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

技术分享

 

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

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

技术分享

Java cookie的使用

标签:

原文地址:http://www.cnblogs.com/hhls/p/5482824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!