Servlet
主要内容:
1)状态跟踪

一、状态跟踪
HTTP协议是无状态协议,即请求与请求之间没有任何关系,也就是不会记住任何数据。
但若想在请求间传递数据,怎么办?web里的三个基本容器对象可以解决。

(1)request
在同一请求中有效,常用于服务器内部跳转中
1)存放数据
HttpServletRequest.setAttribute(String key,Object value);
2)获取数据
HttpServletRequest.getAttribute(String key);
(2)session与cookie
1)Cookie:在多个连接或请求中有效,数据保存在客户端,在服务器端创建cookie
i)向客户端保存cookie
Cookie cookie=new Cookie(String key,String value);
HttpServletResponse.addCookie(cookie);
ii)获取cookie数据
浏览器在每次请求时,会将所有cookie数据发送到服务器端
Cookie[] cookies=HttpServletRequest.getCookies();
Cookie.getValue(String key);
iii)生命周期
Cookie.setMaxAge(int num); 单位是秒
num<0:会话cookie,存活于浏览器会话结束前,默认为-1。
num>0:持久Cookie,存活于num秒之前。
cookie小结:
① cookie 是在服务端创建
② cookie 是保存在浏览器这端
③ cookie 的生命周期可以通过 
cookie.setMaxAge(2000);
☞ 如果不设置setMaxAge则该cookie的生命周期当浏览器关闭时,就消亡.
④ cookie 可以被多个浏览器共享
⑸如果重名就会替换存在的cookie值.
⑥ 一个web应用可以保存多个cookie,但保存在同一个cookie文本在客户端浏览器下
⑦ cookie存放的时候是以明文方式存放,因此安全较低.,我们可以通过加密后保存.
cookie细节:
⑴ 一个浏览器最多放入 300cookie,一个web站点,最多 20cookie,而且一个cookie大小限制子4k
⑵cookie生命周期的再说明:
1. cookie默认生命周期是会话级别
2. 通过setMaxAge() 可以设置生命周期
setMaxAge(正数) , 即多少秒后该cookie失效
setMaxAge(负数), 相当于该cookie生命周期是会话级别

cookie.setMaxAge(0);
response.addCookie(cookie);//一定带上这句话,否则不能删除
⑶ cookie存放中文,怎么处理
存放:
String val=java.net.URLEncoder.encode("顺平","utf-8");
Cookie cookie=new Cookie("name",val);
取出:
String val=java.net.URLDecoder.decode(cookie.getValue(), "utf-8");
out.println("name ="+val);

2)session:在多个连接或请求中有效,数据保存在服务器端
其与名为JSESSIONID的cookie密切相关
i)获取Session对象
HttpSession session=HttpServletRequest.getSession();

HttpSession session=HttpServletRequest.getSession(boolean create);
这里的boolean值默认为true,当容器检测到一个已存在的session,就用原来的那个session ,否则create新的session
当这里的boolean值为false时候,当容器检测到一个已存在的session,就用原来的那个session ,没有也不会去create新的session
ii)存放数据
session.setAttribute(String key,Object value)
iii)获取数据
session.getAttribute(String key);
iiii)生命周期
1)关闭浏览器
2)当服务器手动调用
session.invalidate()
3)session的不活动时间超过了session的最大存活期。
注意:最大存活期默认30分钟
配置web.xml:
<session-config>
<session-timeout>10</session-timeout>
</session-config>

Session 小结:
 
① session是存在服务器的内存中
② 一个用户浏览器,独享一个session域对象
③ session中的属性的默认生命周期是30min ,你可以通过 web.xml来修改
④ 
u 3种session生命周期的设置
(1)一个地方是 tomcat/conf/web.xml
  <session-config>
        <session-timeout>30</session-timeout>//表示30分钟的意思
</session-config>
对所有的web应用生效
(2)另外一个地方,就是在单个web应用的下去修改 web.xml
<session-config>
  <session-timeout>30</session-timeout>session精确到分钟,cookie精确到秒
  </session-config>
如果发生冲突,则以自己的web应用优先级高
(3)session.setMaxInactiveinterval(60) //发呆六十秒后session失效

session的更深入理解: 
为什么服务器能够为不同的浏览器提供不同session?
因为每个浏览器去访问web站点的时候,如果发出的http请求头没有带JSESSIONID头就会自动给你创建一个并返回

(3)ServletContext
ServletContext是在服务器,是被所有客户端共享服务器启动时创建,服务器关闭/web应用关闭/web应用reload()时销毁
如何获取servletContext:
 this.getServletContext();  
this.getServletConfig().getServletContext();
1)存放数据
ServletContext.setAttribute(String key,Object value);
2)获取数据
ServletContext.getAttribute(String key);
3)删除属性:
   SetvletContext.removeAttribute(“属性名”);

servlet学习笔记三的更多相关文章

  1. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  2. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  3. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  4. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  5. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  6. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  7. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  8. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  9. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

随机推荐

  1. Linux 编辑器

    vim编辑器 vi作为Unix上的一个编辑器,一直广受欢迎.之后GUN将其移植到开源世界中,经过开发人员对其进行了改善,被称为vi improved,就是现在的vim.为了方便使用,几乎所有的Linu ...

  2. [小技巧]初次接触 SSIS Package 的一点总结

    1 动态改变数据源 package从创建到调试到测试到生产环境,往往需要运行在不同的服务器上.我们可以定义Environment和Server两个变量,一个用于改变 Server,一个用于接收实际Se ...

  3. java数据结构和算法------希尔排序

    package iYou.neugle.sort; public class Shell_sort { public static void ShellSort(double[] array) { i ...

  4. week 9 scenario testing

    1:How do you expect different personas to use your software?  What’s their need and their goals,  ho ...

  5. 四则运算程序扩展:将程序改为java语言,并允许用户输入,对输入结果进行验证

    题目 每个同学选一个方向,把程序扩展一下:1.让程序能接受用户输入答案,并判定对错.最后给出总共对/错 的数量.2.把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目.3.把程序变成一个Wi ...

  6. 自定义异常时如何定义checked异常和unchecked异常

    When defining your own exception type, study the existing exception classes in the Java API and try ...

  7. Yandex.Algorithm 2011 Round 1 D. Sum of Medians 线段树

    题目链接: Sum of Medians Time Limit:3000MSMemory Limit:262144KB 问题描述 In one well-known algorithm of find ...

  8. ORA-12505, TNS:listener does not currently know of SID given in connect descriptor (二)

    异常及解决 在连接sqldeveloper出现的异常信息 在ORA-12505, TNS:listener does not currently know of SID given in connec ...

  9. 【BZOJ】【1901】【Zju2112】 Dynamic Rankings

    再填个坑. 动态维护区间第K大(带单点修改) 首先裸的区间第K大我们是用的[前缀和]思想,实现O(n)预处理,O(1)找树查询,那么如果是动态的呢?我们可以利用树状数组(BIT)的思想,进行O(log ...

  10. 升级到win8.1后除IE11外,其它浏览器无法打开网页解决办法

    原文 : http://productforums.google.com/forum/#!topic/chrome/TUDjVQzf4Os 用管理员方式打开cmd 输入 netsh winsock r ...