09. Servlet Cookie 处理
来源:互联网 发布:江苏省困难职工数据库 编辑:程序博客网 时间:2024/06/04 19:44
Servlet Cookie 处理
- Servlet 对 Cookie 的设置是直接在 HTTP 头信息中进行的,设置了 Cookie 的 Servlet 通常会发送类似的头信息:
- Set-Cookie 头包含了一个名称值对、一个 GMT 日期、一个路径和一个域,名称和值会被 URL 编码;
- expires 字段指定了Cookie的到期时间;
- 在浏览器被设置为储存Cookie,它会保留该信息到到期时间,如果浏览器指向任何匹配该 Cookie 的路径或域(path指定),它会重新发送 Cookie 到服务器,此时浏览器发送的头信息类似如下:
- Servlet 中对于 Cookie 的添加、获取、删除主要是通过 HttpServletRequest 和 HttpServletReponse 成员方法来实现的;
- Cookie 本身的属性修改、属性获取主要通过 javax.servlet.Cookie 类来实现,主要相关的API如下:
- 当Cookie中可能包含中文或其他非英文字符时,要对 Cookie 的键值进行相应的编码、解码
1
String encodeStr = java.net.URLEncoder.encode("中文字符串","UTF-8"); //编码
2
String decodeStr = java.net.URLDecoder.decode("编码后的中文字符串","UTF-8"); // 解码
设置/添加 Cookie 到响应头
通过 Servlet 设置添加 Cookie 一般包含以下3个步骤:
① 创建 Cookie 对象;
Cookie cookie = new Cookie("key","value");
② 设置 Cookie 的最大生命周期;
cookie.setMaxAge( 60 * 60 * 24 ); //单位时间为s,设置过期时间为24h
③ 发送 Cookie 到 HTTP 响应头;
response.addCookie( cookie );
示例代码如下:
1
public class Demo extends HttpServlet{
2
//将表单提交得到的 username 数据添加到Cookie
3
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IoException{
4
//创建Cookie对象
5
Cookie username = new Cookie("username", URLEncoder.encode(request.getParameter("username"),"UTF-8") );
6
//设置过期时间为 24h
7
username.setMaxAge(60 * 60 * 24);
8
//向相应头添加 Cookie
9
response.addCookie(username);
10
11
}
12
}
获取 Cookie 从请求头
获取Cookie,只需要通过HttpRequest的getCookies() 方法获取一个 Cookie 对象数组,然后循环遍历数组使用 getName() 和 getValue() 获取数组的键值对;
示例代码如下:
1
public class Demo extends HttpServlet{
2
//获取Cookie中key为username的value
3
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IoException{
4
String username = "";
5
//获取Cookie数组
6
Cookie[] cookies = request.getCookies();
7
//遍历数组,找出目标键值对
8
for(Cookie cookie :cookies){
9
if( cookie.getName().equals("username")){
10
username = cookie.getValue();
11
break;
12
}
13
}
14
}
15
}
删除 Cookie
Servlet 删除 Cookie 过程如下:
- 读取一个现有的 cookie,并把它存储在 Cookie 对象中;
- 使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie;
- 把这个 cookie 添加到响应头;
1
public class Demo extends HttpServlet{
2
//删除key为username的Cookie
3
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IoException{
4
5
Cookie username = null;
6
//获取Cookie数组,遍历数组找出目标Cookie对象
7
Cookie[] cookies = request.getCookies();
8
for(Cookie cookie :cookies){
9
if( cookie.getName().equals("username"))
10
username = cookie;
11
}
12
//设置cookie为到期时间为0
13
username.setMaxAge(0);
14
//将cookie添加到响应头中
15
response.addCookie(username);
16
}
17
}