【Head First Servlets and JSP】笔记13:session & cookie
再总结——cookie、session、JSESSIONID的前世今生
1、session的接口,配合一些代码来理解。
2、杀死会话——杀死的含义是使session无效化(在JVM中清除??)。
- 立刻杀死,已知方式有两种,
- 在DD中设定“默认期限”
- 在代码中对具体session设定“期限”(不过,如果你设置为-1的话,session将永远不会过期,因为这个时间永远到不了,,)
3、cookie的特性
4、cookie的接口
从客户请求得到cookie——稍微现代点的方法是这样的:
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
if(cookie.getName().equals("JSESSIONID")){
System.out.println("JSESSIONID="+cookie.getValue());
}
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
5、 再总结——cookie、session的前世今生
cookie之前世今生。
cookie的产生:客户端向服务器发送request,服务器返回response并set-cookie
就这样客户端中就存在一个对应cookie了,
cookie的后续:之后客户端每次向服务器发送request,都会携带这个cookie
本质上,cookie就是客户端和服务端交换一小段信息。
session的前世今生
session的产生:通常是伴随着一个getSession语句 //这里可能误,不论有没手动getSession,服务器是一定会set-cookie的,也就是说JSESSIONID一定会有,而有没有对应的session就不知道了。
session的后续:
- 我们用session来管理会话、存储信息
- 我们必须通过JSESSIONID来查找访问对应的session
- 我们必须在适当的时候杀死session
本质上,session就是存在于服务端JVM中的一个对象。
JSESSIONID的前世今生
可以把每一次submit都想象成完成了一次反射。
第一次submit
第二次到第n次...
6、 简单的定制cookie示例——输入姓名,输出 Hello+姓名
通常,我的习惯是先写一个hello程序跑通一下环境。
<!DOCTYPE html>
<html>
<head>
<meta charset="US-ASCII">
<title>Home Page</title>
</head>
<body> <form action="CookieTest.do" method="post"> Username: <input type="text" name="username"> <input type="submit" value="submit">
</form>
</body>
</html>
<?xml version="1.0" encoding="ISO-8859-1" ?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"> <servlet>
<servlet-name>CookieTest</servlet-name>
<servlet-class>com.example.web.CookieTest</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>CookieTest</servlet-name>
<url-pattern>/CookieTest.do</url-pattern>
</servlet-mapping> </web-app>
package com.example.web; import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException; public class CookieTest extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.getWriter().println("hello");
}
}
成功跑出来之后开始写代码~
package com.example.web; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException; public class CookieTest extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html"); String name = req.getParameter("username");
Cookie cookie = new Cookie("username", name);
cookie.setMaxAge(30*60); // 如果不设置的话,cookies的生存期限默认为“关闭浏览器为止”
resp.addCookie(cookie); RequestDispatcher view = req.getRequestDispatcher("result.jsp");
view.forward(req, resp);
}
}
result.jsp
<html>
<body>
<a href="checkcookie.do">click here</a>
</body>
</html>
checkcookie.do
<?xml version="1.0" encoding="ISO-8859-1" ?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"> <servlet>
<servlet-name>CookieTest</servlet-name>
<servlet-class>com.example.web.CookieTest</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>CookieTest</servlet-name>
<url-pattern>/CookieTest.do</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>checkcookie</servlet-name>
<servlet-class>com.example.web.CheckCookie</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>checkcookie</servlet-name>
<url-pattern>/checkcookie.do</url-pattern>
</servlet-mapping> </web-app>
package com.example.web; import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter; public class CheckCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter pw = resp.getWriter(); Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("username")) {
pw.println("Hello " + cookie.getValue());
break;
}
}
}
}
}
<form action="CookieTest.do" method="post">
<a href="checkcookie.do">click here</a>
【Head First Servlets and JSP】笔记13:session & cookie的更多相关文章
- 超全面的JavaWeb笔记day11<JSP&Session&Cookie&HttpSession>
1.JSP 2.回话跟踪技术 3.Cookie 4.HttpSession JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态 ...
- 【Head First Servlets and JSP】笔记23:Expression Language(EL) 完全攻略
基本上是<Head First Servlets and JSP>内容的整理.扩充.顺便推荐一个供参考的JSP教程:JSP Tutorial内容很全面,还有一些有趣的实例. 完整代码参考 ...
- 报错:严重: Servlet.service() for servlet [jsp] in context with path [/20161116-Struts2-6] threw exception [/index.jsp (line: 13, column: 20) No tag "textfiled" defined in tag library imported with prefix
严重: Servlet.service() for servlet [jsp] in context with path [/20161116-Struts2-6] threw exception [ ...
- webpy使用笔记(二) session/sessionid的使用
webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...
- 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...
- Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法
Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...
- JSP 状态管理 -- Session 和 Cookie
Http 协议的无状态性 无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求.但是同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个浏览器 session sessio ...
- SQL反模式学习笔记13 使用索引
目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引. 索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...
- JAVA自学笔记13
JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...
- golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换
golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...
随机推荐
- HTML CSS表格如何控制上下间距
css:td{margin-top:10px; 上间距margin-right:10px; 右间距margin-bottom:10px; 下间距margin-left:10px; 左间距}
- openCV中 libopencv-nonfree-dev的安装: undefined reference to `cv::initModule_nonfree()'
今天照着一起做RGB-D SLAM (3) , 程序会出现以下的错误: cv::initModule_nonfree(); /home/yhzhao/slam/src/detectFeature ...
- Unity3D学习笔记——NGUI之UITable
UITable:这个控件可以方便的排列其他小组件,并能控制小组件之间的距离. 效果如下: 这个控件的效果和UIGrid很相似,区别是UIGrid能控制每个小组件的大小,而这个 控件控制的是小组件之前的 ...
- python_selenium之第一个自动化脚本
python_selenium之第一个自动化脚本 上一节介绍了xpath的使用,接下来完成第一个自动化脚本 一.步骤: 1. 这里使用火狐浏览器,首先打开火狐浏览器 2. 使浏览器窗口最大化 3.输入 ...
- windown安装bloomFilter
个人博客:https://blog.sharedata.info/ 最近在研究python爬虫,需要在windown中安装bloomFilter来处理网页的去重问题,在window中安装python然 ...
- 利用.Net中Process类调用netstat命令来判断计算端口的使用情况
利用.Net中Process类调用netstat命令来判断计算端口的使用情况: Process p = new Process();p.StartInfo = new ProcessStartInfo ...
- 46、PopWindow工具类
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...
- HTML学习笔记——标准网页设计+使用CSS、Javascript
一.标准网页设计 1.标准网页概述: 标准网页设计要遵循,内容与表现相分离. 内容 + 表现 = 页面 --- 即 :XHTML + CSS = PAGE 内容与变现相分离,也就是内容使用HT ...
- svn 更新文件冲突,提示中文乱码解决
问题描述: update 操作提示错误信息,中文乱码 和 “Please execute the 'Cleanup' command.” Cleanup 操作报错: 解决办法: 1. 工具下载(sql ...
- 【BZOJ3620】似乎在梦中见过的样子 KMP
[BZOJ3620]似乎在梦中见过的样子 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个 ...