1.cookie是什么?html
cookie是web应用当中很是经常使用的一种技术,用于储存某些特定的用户信息。java
2.cookie的做用?web
在用户登录时将用户的信息存放在cookie中,用户在必定的时间中再次登录时不须要输入用户名和密码直接跳转到下一个界面。浏览器
3.设置cookiecookie
Cookie cookie = new Cookie("key", "value");session
cookie.setMaxAge(saveTime*24*60*60);app
生存周期默认时间为秒,若是设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效。jsp
cookie.setPath("/test/test2");ide
设置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
就会直接进入登录成功界面。若是用户名或密码不正确则会进入如下界面:
