session的接口

杀死会话

cookie的性质

cookie的接口

再总结——cookie、session、JSESSIONID的前世今生

简单的定制cookie示例

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的后续:

  1. 我们用session来管理会话、存储信息
  2. 我们必须通过JSESSIONID来查找访问对应的session
  3. 我们必须在适当的时候杀死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的更多相关文章

  1. 超全面的JavaWeb笔记day11<JSP&Session&Cookie&HttpSession>

    1.JSP 2.回话跟踪技术 3.Cookie 4.HttpSession JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态 ...

  2. 【Head First Servlets and JSP】笔记23:Expression Language(EL) 完全攻略

    基本上是<Head First Servlets and JSP>内容的整理.扩充.顺便推荐一个供参考的JSP教程:JSP Tutorial内容很全面,还有一些有趣的实例. 完整代码参考 ...

  3. 报错:严重: 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 [ ...

  4. webpy使用笔记(二) session/sessionid的使用

    webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...

  5. 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...

  6. Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法

    Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...

  7. JSP 状态管理 -- Session 和 Cookie

    Http 协议的无状态性 无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求.但是同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个浏览器 session sessio ...

  8. SQL反模式学习笔记13 使用索引

    目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引.  索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...

  9. JAVA自学笔记13

    JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...

  10. golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

    golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...

随机推荐

  1. Android 混淆完全解析

    1.http://blog.csdn.net/jddkdd2/article/details/8858909

  2. AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 最大的 ...

  3. 抒发一下这些天用django做web项目的一些体会

    最近接触了一段时间的python,觉得python写脚本还是挺方便的,做一个简单的桌面应用也很nice,但是随着深入,对python做功能复杂的web项目我彻底死心了​,每个环节都是一堆的坑,部署阶段 ...

  4. MPEG 编解码相关资料收集

    以下是我搜集的关于MPEG1/2的编解码相关的资料: (注:mpge帧内编码是基于jpeg编码的,所以请务必先理解jpeg的编解码原理.) 1:Introduction to MPEG 2 Video ...

  5. TensorFlow实战:Chapter-4(CNN-2-经典卷积神经网络(AlexNet、VGGNet))

    转载自:http://blog.csdn.net/u011974639/article/details/76146822 项目:https://www.cs.toronto.edu/~frossard ...

  6. iPhone SDK中多线程的使用方法以及注意事项

    多线程iphonethreadapplication编程嵌入式 然现在大部分PC应用程序都支持多线程/多任务的开发方式,但是在iPhone上,Apple并不推荐使用多线程的编程方式.但是多线程编程毕竟 ...

  7. UVALive 5873 (几何+思维)

    唉 被秀了... 还是太弱,说好的数形结合呢,列个式子出来后就被吓到了,然后就懵逼了. 题意: 有一条狗,从原点出发,沿n个向量走,每个向量只走一次,沿着一个向量(x,y)走时,既可以往(x,y)方向 ...

  8. [转] android获取手机信息大全

    原文链接:http://blog.csdn.net/hytfly/article/details/8552483 IMEI号,IESI号,手机型号: private void getInfo() { ...

  9. java内部类详细介绍

    0.内部类与一般类有所不同,它是放在外部类的内部即可作为外部类的成员变量,也可放在方法内部作为局部变量,既然是变量,那么它可以用 private static 修饰符修饰,而外部类则不能,这也是内部类 ...

  10. Python Selenium 自动化测试

    本文转载 作者:灰蓝蓝蓝蓝蓝蓝链接:http://www.jianshu.com/p/5188cb3ab790來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.更多技术博客 ...