Servlet会话管理二(Cookie)
Cookie是在HTTP协议下,将服务器传递给浏览器的的少量信息保存到浏览器客户端的一种技术,通过这种技术,即使在浏览器被关闭或链接中断的情况下,用户仍可以维护Cookie中的数据。
Cookie是经由服务器端的程序通过HTTP请求和响应发送到浏览器客户端的,是HTTP header的组成部分,因此其传输由HTTP协议控制。
Cookie的问题在于用户可以通过改变其浏览器设置来拒绝接受cookie
1个Cookie包含1个name,1个value,以及可选的属性。
Servlet通过HttpServletResponse.addCookie(Cookie cookie)向浏览器发送cookie,每次添加一个cookie
Servlet通过HttpServletRequest.getCookies()获取浏览器上的cookies
浏览器支持每个网站高达20个cookies,最多支持300个cookies
使用Cookie涉及的类和接口,都在javax.servlet.http包中
public class Cookie
extends java.lang.Object
implements java.lang.Cloneable, java.io.Serializable public interface HttpServletRequest
extends ServletRequest public interface HttpServletResponse
extends ServletResponse
Cookie的使用原理
1)服务器端创建Cookie对象,把会话数据存储在Cookie对象中
Cookie cookie = new Cookie(name, value);
2)服务器端将cookie对象发送到浏览器客户端(隐藏发送一个set-cookie名称的响应头)
httpServletResponse.addCookie(cookie);
3)浏览器得到服务器发送的cookie,将其保存在浏览器客户端
4)浏览器在下次请求服务器时,会带着cookie信息(包含在HTTP header中)
5)服务器获取浏览器提交的cookie
httpServeltRequest.getCookies() // 返回一个Cookie数组,遍历该数组,得到特定名称的cookie;若没有cookie,返回null
通过Servlet创建并设置cookie的三个步骤
Cookie cookie = new Cookie("name", "value"); // 创建一个Cookie
cookie.setMaxAge(0); // 设置最大生命周期; 0 表示删除同名的cookie数据
response.addCookie(cookie) // 将cookie发送到浏览器
实例
package app02a.cookie; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet(name = "PreferenceServlet", urlPatterns = { "/preference" })
public class PreferenceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final String MENU = "<div style='background:#e8e8e8; padding:15px'>"
+ "<a href='cookieClass'>Cookie Class</a> " // 这里定义了3个超链接,每个超链接对应一个url,每个url有一个Servlet负责处理
+ "<a href='cookieInfo'>Cookie Info</a> " // 表示空格
+ "<a href='preference'>Preference</a></div>"; public PreferenceServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>Preference</title>");
writer.println("<style>table {font-size:small;background:NavajoWhite }</style>"); // 文档内嵌样式表 设置html中所有<table>元素的样式
writer.println("</head>");
writer.println("<body>");
writer.println(MENU);
writer.println("Please select the values below:");
writer.println("<form method='post'>"); // 请求方法是post,提交的地址默认是当前页面;该表单提交之后由doPost()方法处理
writer.println("<table>");
writer.println("<tr>");
writer.println("<td>Title Font Size:</td>");
writer.println("<td><select name='titleFontSize'>");
writer.println("<option>large</option>");
writer.println("<option>x-large</option>");
writer.println("<option>xx-large</option>");
writer.println("</select></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Title Style & Weight</td>");
writer.println("<td><select name='titleStyleAndWeight' multiple>"); // 属性multiple表名可选择多个选项
writer.println("<option>italic</option>");
writer.println("<option>bold</option>");
writer.println("</select></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Max. Records in Table: </td>");
writer.println("<td><select name='maxRecords'>");
writer.println("<option>5</option>");
writer.println("<option>10</option>");
writer.println("</select></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td rowspan='2'><input type='submit' value='Set' /></td>");
writer.println("</tr>");
writer.println("</table>");
writer.println("</form>");
writer.println("</body>");
writer.println("</html>");
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 处理post的请求
String maxRecords = request.getParameter("maxRecords"); // 获取表单数据
String [] titleStyleAndWeight = request.getParameterValues("titleStyleAndWeight"); // 获取表单数据
String titleFontSize = request.getParameter("titleFontSize"); // 获取表单数据
response.addCookie(new Cookie("maxRecords", maxRecords)); // 添加cookie
response.addCookie(new Cookie("titleFontSize", titleFontSize)); // 添加cookie Cookie cookie= new Cookie("titleFontWeight", ""); // 新建cookie
cookie.setMaxAge(0);
response.addCookie(cookie); cookie = new Cookie("titlFontSize", ""); // 新建cookie
cookie.setMaxAge(0);
response.addCookie(cookie); // 覆盖之前的重名cookie,只能通过这种方式来删除cookie if (titleStyleAndWeight != null) {
for (String style : titleStyleAndWeight) {
if (style.equals("bold")) {
response.addCookie(new Cookie("titleFontWeight", "bold")); // 添加cookie
} else if (style.equals("italic")) {
response.addCookie(new Cookie("titleFontStyle", "italic")); // 添加cookie
}
}
} response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>Preference</title>");
writer.println("</head>");
writer.println("<body>");
writer.println(MENU);
writer.println("Your preference has beed set.<br /><br />");
writer.println("Max. Records in Table: " + maxRecords + "<br />");
writer.println("Title Font Size: " + titleFontSize + "<br />");
writer.println("Title Font Style & Weight: ");
if (titleStyleAndWeight != null) {
writer.println("<ul>");
for (String style : titleStyleAndWeight) {
writer.println("<li>" + style + "</li>");
}
writer.println("</ul>");
}
writer.println("</body>");
writer.println("</html>");
}
}
package app02a.cookie; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet(name = "CookieClassServlet", urlPatterns = { "/cookieClass" })
public class CookieClassServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String[] methods = {"clone", "getcomment", "getDomain", "getmaxAge", "getName", "getPath",
"getSecure", "getValue", "getVersion", "isHttpOnly", "setComment", "setDomain",
"setHttpOnly", "setMaxAge", "setPath", "setSecure", "setValue", "setVersion"};
public CookieClassServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie [] cookies = request.getCookies(); // 从浏览器获取cookies
Cookie maxRecordsCookie = null;
if (cookies != null) {
for (Cookie cookie : cookies) { // 遍历 cookies数组,找到特定名称的cookie
if (cookie.getName().equals("maxRecords")) {
maxRecordsCookie = cookie;
break;
}
}
}
int maxRecords = 5; // default
if (maxRecordsCookie != null) {
try {
maxRecords = Integer.parseInt(maxRecordsCookie.getValue()); // 获取指定cookie的值
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>Cookie Class</title>");
writer.println("</head>");
writer.println("<body>");
writer.println(PreferenceServlet.MENU);
writer.println("<div>");
writer.println("Here are some of the methods in javax.servlet.http.Cookie");
writer.println("<ul>");
for (int i=0; i < maxRecords; i++) {
writer.println("<li>" + methods[i] + "</li>");
}
writer.println("</ul>");
writer.println("</body>");
writer.println("</html>");
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }
package app02a.cookie; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet(name = "CookieInfoServlet", urlPatterns = { "/cookieInfo" })
public class CookieInfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public CookieInfoServlet() {
super();
} @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie [] cookies = request.getCookies(); // 获取随HTTP请求传递过来的cookie, 只能获得所有的cookie的数组,然后遍历数组得到指定的cookie
StringBuilder styles = new StringBuilder();
styles.append(".title {");
if (cookies != null) {
for (Cookie cookie : cookies) { // 遍历cookie数组
String name = cookie.getName();
String value = cookie.getValue();
if (name.equals("titleFontSize")) {
styles.append("font-size:" + value + ";");
} else if (name.equals("titleFontWeight")) {
styles.append("font-weight:" + value + ";");
} else if (name.equals("titleFontStyle")) {
styles.append("font-style:" + value + ";");
}
}
}
styles.append("}");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>Cookie Info</title>");
writer.println("<style>");
writer.println(styles.toString());
writer.println("</style>");
writer.println("</head>");
writer.println("<body>");
writer.println(PreferenceServlet.MENU);
writer.println("<div class='title'>");
writer.println("Session Management WithNode Cookies:");
writer.println("</div>");
writer.println("<div>");
if (cookies == null) {
writer.println("No cookie in this HTTP response.");
} else {
writer.println("<br />");
writer.println("Cookies in this HTTP reponse:");
for (Cookie cookie : cookies) {
writer.println("<br />");
writer.println(cookie.getName() + ":" + cookie.getValue());
}
}
writer.println("</div>");
writer.println("</body>");
writer.println("</html>");
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Servlet会话管理二(Cookie)的更多相关文章
- java的会话管理:Cookie和Session
java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...
- PHP会话管理:cookie和session
PHP会话管理1.cookie数据存储在浏览器端方便与JavaScript交换数据方便获取用户信息风险-浏览器可能会禁用cookie替代方案-URL参数 2.session数据存储在服务器高效.安全. ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- 会话管理(Cookie/Session技术)
什么是会话:用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话: 会话过程需要解决的问题:每个用户在使用浏览器与服务器进行会话的过程中,都可能会产生一些 ...
- servlet 会话管理
一.URL 重写 URL 重写是一种会话跟踪技术,它将一个或多个token添加到URL的查询字符串中,每个token通常为 key=value形式,如下: url?key-1=value-1& ...
- JavaWeb基础—会话管理之Cookie
一.什么是会话 打开浏览器,浏览各种资源,点击各种超链接,直至关闭浏览器,整个过程称为会话 二.会话管理的两种技术 1.Cookie 基于客户端.在客户端记录信息来确认用户身份.以cookie的形式写 ...
- Servlet会话管理三(HttpSession)
Session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的HttpSession对象.由于Session为浏览器用户所独享,所以用户在访问服务器的web资源时,可以把各自的数 ...
- java基础79 会话管理(Cookie技术、Session技术)
1.概念 会话管理:管理浏览器和服务器之间会话过程中产生的会话数据. Cookie技术:会话数据保存到浏览器客户端.[存 编号/标记(id)] Session技术:会话技术会保存到 ...
- 会话管理之Cookie技术
会话管理是web开发中比较重要的环节,这一节主要总结下会话管理中的cookie技术. 1. 何为会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个 ...
随机推荐
- spring-boot-devtools Idea 热部署
1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.sprin ...
- asp.net MVC 导出excle(转)
转载网址: http://www.cnblogs.com/imr3/articles/2856109.html 还是放到自己这边比较保险. ExportExcel Code public FileRe ...
- linux 后台运行命令
command & 关闭终端,程序会终止 nohup command & 关闭终端,程序不会终止
- Java Runtime
Runtime 类代表着Java程序的运行时环境,构造方法 private Runtime(){},采用单例模式,一个jvm只有一个Runtime实例对象,该类会被自动创建,我们可以通过Runtime ...
- Kerberos 互信免登陆
第一步:机器加互信 将机器A的Kerberos name加到机器B的~/.k5login中,同时将机器B的Kerberos name加到机器A的~/.k5login中 例如:host/bjm6-193 ...
- MySql安装和基本管理&mysql语句
MySql安装和基本管理 本章内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下 ...
- PHP从规定字符中生成固定位数随即串
}
- C#创建cookie读写cookie
一.创建cookie HttpCookie cookie = new HttpCookie("UserInfo");//创建多值cookie cookie ...
- jmeter简单压测设置
参数化 随机参数 时间参数 顺序自增函数 文件读取 直接引用 响应断言 用来查看sessionid 关联 关联引用 jmeter操作数据库 安装连接程序包 ip 端口号 哪个数据库 可以执行多条s ...
- AndroidManifest中注册application
<application android:icon="@drawable/icon1" android:label="@string/app_name" ...