【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 ...
随机推荐
- Hibernate通过many-to-one元素的一对一映射
在hibernate中我们可以通过两种方式来执行一对一映射: 通过many-to-one元素标签 通过one-to-one元素标签 在这里,我们将通过多对一的many-to-one元素进行一对一的映射 ...
- python 设计模式之单例模式
单例模式就是防止每个请求到来,都需要在内存里创建一个实例,再通过该实例执行指定的方法. 如果并发量大的话,内存里就会存在非常多功能上一模一样的对象.存在这些对象肯定会消耗内存,对于这些功能相同的对象可 ...
- Web里URL空格的转换方法
今天收到一个Bug修复的任务,Bug为在页面上输入一个文件夹名包含空格,点击该文件夹的URL后链接错误. 看URL是HttpUtility.UrlEncode将空格转换成了“+”号,原因找到就着手解决 ...
- c/c++输入处理,制定变量参数和值
void usage(char* s){ fprintf(stderr, "\n"); fprintf(stderr, "%s -s <source file> ...
- array_sum的用法
众所周知,PHP中函数是功能很强大的,那么今天就说下array_sum的功能吧. 函数功能:返回数组中所有值的和. 举例: <?php $a = array(1,2); $b = array_s ...
- vfptr(1)
前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有“多种形态”,这是一种泛 ...
- HDU4781(2013成都站A题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4781 题目大意:给你n个点m条边,要求你构造一个符合条件的有向联通图(若无法构造输出-1,否则输出任意 ...
- The Best Hacking Tools
The Best Hacking Tools Hacking Tools : List of security tools specifically aimed toward security pro ...
- 男神的约会(状压dp)
有一天男神约了学姐姐去看电影,电影院有一个活动,给你一个10*10的矩阵,每一个格子上都有一个0-9的整数,表示一共十种优惠券中的一种. 观众从左上角的格子开始走,走到右下角.每走到一个有着a号优惠券 ...
- php5.4新特性实践
本机安装的是wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b.exe集成包 自带了php5.4 1. 数组写法 定义一个数组 过去: $arr = ...