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. Swift global function(count indexOfObject contains...)

    当你在使用Swift时会发现一些常用的函数不!见!了! 比如 String:    s.count()  s.contains() Array: a.indexOfObeject(t:<T> ...

  2. SharePoint 2010 RBS 安装和配置的一些记录

    1.SharePoint 2010 RBS FILESTREAM Provider 的“垃圾收集”: 在SharePoint 中删除上传的文档RBS并不会在文件系统删除文档,理解只是在内容数据库删除了 ...

  3. Entity Framework学习笔记(四)----Linq查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...

  4. UIWebView swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  5. 水王ID

    题目: 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. 如果你 ...

  6. 搭建SpringMVC+MyBatis开发框架六

    建立Springmvc包结构 1.看看我们在springmvc.xml中曾经配置过扫描net.quickcodes这个包下面的所有java文件:  现在我们就在"src/main/java ...

  7. iframe 传值问题

    当一个页面中插入了iframe或者由不同的框架组成(fieldset)时,这种情况下,需要处理的业务逻辑比较常见的就是数据进行交互了 1.页面中插入了iframe情况 由于页面中插入了iframe,那 ...

  8. 【Exception】 java.lang.NoSuchMethodError: android.app.AlertDialog$Builder.setOnDismissListener

    f(Build.VERSION.SDK_INT >10) builder =newAlertDialog.Builder(getActivity(), R.style.Theme.Sherloc ...

  9. Analyzer的报表复制、移动

    制作Analyzer报表后,希望可以直接拷贝到其他机子上(无法通过网络连接到) 方法很简单: 1.进入Analyzer的数据库服务器设定页面,查找到连接的系统数据库是哪个 2.将该系统数据库备份出来 ...

  10. 【POJ】【2601】Simple calculations

    推公式/二分法 好题! 题解:http://blog.csdn.net/zck921031/article/details/7690288 这题明显是一个方程组……可以推公式推出来…… 然而这太繁琐了 ...