一个servlet向另一个servlet发送数据,可以将数据放置在一个容器中(io、数据库、servlet的内置对象),servlet的内置对象成本最小。

一共有三个内置对象。

名字 类型
request HttpServletRequest
session HttpSession
application ServletContext

1.Request对象

  1.1获取方式:

    在doGet(HttpServletRequest req,HttpServletResponse resp)或者doPost(HttpServletRequest req,HttpServletResponse resp)方法参数中,可以直接使用该对象。

  1.2存取数据方式:

    存放数据:req.setAttribute("key",value); key都是String类型 value值为任意类型,相同key值得数据会被覆盖。一定要先存数据再转发。

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. //生命周期为一次请求
  3. request.setAttribute("name", "梁伟");
  4. request.setAttribute("name", "摩西");
  5. request.setAttribute("age", 15);
  6. request.getRequestDispatcher("/r2").forward(request, response);
  7. }

    取数据:req.getAttribute("key");

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. Object msg = request.getAttribute("name");
  3. Object age = request.getAttribute("age");
  4. System.out.println(msg);
  5. System.out.println(age);
  6. }

    删除数据:req.removeAttribute("key");

  1.2生命周期:

    客户端每次发请求,服务器端就会创建一个新的request对象,本次访问结束后,该request对象就会被销毁,因此生命周期为一次请求。

  1.3作用范围:使用request存取数据只能在一次请求内起作用。比如服务器内部跳转的时候(因为服务器内部跳转客户端只发一次请求)。 浏览器中的url不变代表一次请求。

    客户端重定向是不行的,因为客户端重定向会发出多个请求(多个request对象),一个请求结束,下一个请求是获取不到上一个请求的数据的。

2.session(是存在服务器 端的一个对象) 默认30分钟自动销毁,一般把登录的信息放在session中,保护了信息安全。

  2.1获取方式:

    HttpSession session = request.getSession();

    HttpSession session = request.getSession(false);

    HttpSession session = request.getSession(true);

    无参或者参数为true代表request有对应的session,那么就返回这个session,没有就创建一个。

    如果参数为false,代表request有对应的session则返回这个session,没有就返回null。

    存储数据的方式和request对象的方式一样,都是调用setAttribute(参数1,参数2)、getAttribute(参数1)方法。

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2.  
  3. HttpSession session = request.getSession();
  4. session.setAttribute("name", "tom");
  5. session.setAttribute("name2", "jery");
  6. session.setAttribute("nam3", new Person());
  7.  
  8. // 销毁session对象
  9. //session.invalidate();
  10. //session.setMaxInactiveInterval(5);
  11. response.sendRedirect(request.getContextPath() + "/session2");
  12. }
  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2.  
  3. HttpSession session = request.getSession(false);
  4. System.out.println(session.getAttribute("name"));
  5. }

chrome浏览器向服务器发送数据,发送时会携带JSESSIONID(请求头中),发送完成时,服务器会调用getSession方法根据ISEESIONID查找对应的session对象(有则直接使用,没有就创建),此时并没有session对象,所以会创建session对象,HttpSession session = req.getSession();创建完后往session里存了数据,接下来发生了重定向,tomcat会把请求返回给浏览器,并携带session对应的JSESSIONID,浏览器会存储该id,当下一次访问时会携带这个id,通过id查找对应的session对象,发现可以找到session对象(所以不需要再去创建)此时这个session对象就是session2,这两个session是同一个session对象,当使用火狐直接访问sessionn2时并不能拿到数据,是因为火狐浏览器也有自己唯一的JSESSIONID,当他访问session2时,这个id并不能找到对应的session对象,所有便会重新创建一个session对象,session3,此时session3中并没有任何数据,所以访问不到数据。

  2.2生命周期:

    session创建:第一次调用该方法 request.getSession()创建session对象。

    session销毁:

      session.invalidate();

      session如果自动超时的话,也会被销毁,默认时间是30分钟

      超时时间可以在代码或者web.xml中设置

  1. // session超时时间是指:客户端不与服务器进行交互的时间
  2. //在代码中设置:
  3. session.setMaxInactiveInterval(5); //单位是秒
  4. // 在web.xml中设置 1分钟超时,负数或者0为不限制时间
  5. <session-config><session-timeout>1</session-timeout></session-config>

  2.3作用范围:

    在一个会话中起作用,一个会话可以包括多个request请求,所以可以放在session中被多个request请求所共享。

    tomcat服务器正常关闭时,tomcat会把session对象序列化到本地文件中,如果非正常关闭,将不会序列化到本地。若要实现序列化,那么session里面的数据必须实现序列化接口。

3.application

  3.1获取方式

    

  1. request.getServletContext();
  2. this.getServletContext();
  3. request.getSession().getServletContext();
  4. this.getServletConfig().getServletContext();
  5. // 注意:无论哪一种方式,拿到的都是同一个application对象

  3.2存取数据方式:

    删除、存取数据和session一样。

  3.3生命周期:

    整个项目在运行期间,只有一个application对象,所以这个对象是所有用户共享的,大家都可以向这个对象里面存数据,也可以再拿出来.因为这个对象一个项目中只有一个。

servlet内置对象(传递数据)的更多相关文章

  1. 数据绑定-绑定Servlet内置对象

    数据绑定:获取用户提交的参数,绑定到入参的参数中,就叫数据绑定. 绑定Servlet内置对象: 测试:

  2. WebForm 内置对象、数据增删改、状态保持

    一.内置对象 1.Response对象:响应请求 Response.Write("<script>alert('添加成功!')</script>"); → ...

  3. servlet内置对象

    request                请求对象       类型javax.servlet.ServletRequest   作用域Request response              ...

  4. JS内置对象有哪些?

    JS内置对象分为数据封装类对象和其他对象 数据封装类对象:String,Boolean,Number,Array,和Object; 其他对象:Function,Arguments,Math,Date, ...

  5. servlet运行机制、Request内置对象和服务器端跳转

    servlet运行机制: 当发送一个请求到服务器的时候,容器(Tomcat)会判断该路径属于哪一个 Servlet 进行处理,Servlet 有一个抽象父类“HttpServlet”,这个类是一个模板 ...

  6. jsp九个内置对象、四个域对象及Servlet的三大域对象

    一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创 ...

  7. jsp中9个内置对象与servlet对应关系及四个作用域

    参考:  <jsp&servlet学习笔记.第2版.林信良><JSR-245 JavaServer Pages 2.2 Maintenance Release Specifi ...

  8. JSP内置对象与servlet对应关系

    隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 r ...

  9. Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结

    1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...

随机推荐

  1. java架构《并发线程高级篇三》

    本章主要介绍和讲解concurrent.util里面的常用的工具类. 一.CountDownLatch使用:(用于阻塞主线程) 应用场景 :通知线程休眠和运行的工具类,是wait和notify的升级版 ...

  2. Centos 搭建Hadoop

    Centos搭建Hadoop 一.搭建Hadoop需要JDK环境,首先配置JDK 二.下载haoop 三.在Centos服务器上解压下载好的安装包 四.修改配置文件 4.1 hadoop-env.sh ...

  3. 浅谈OSI参考模型(七层模型)

    很多人说"21世纪人类最伟大的发明就是计算机":正是如此,21世纪的今天,计算机正对我们的社会发展和生活起居产生着不可估量的影响:电脑,手机都能上网随时随地了解多彩的世界.但是有时 ...

  4. 给jekyll博客添加搜索功能

    使用SWIFTYPE为jekyll博客添加搜索引擎 步骤 1.首先去swiftype注册一个账号 2.接着添加自己想要配置的网站地址并为新设定的引擎添加一个名字(非会员只能设置一个引擎). 3.收到验 ...

  5. 从零开始教你安装Oracle数据库

    1.数据库安装 1.1下载 根据自己的操作系统位数,到oracle官网下载(以oracle 11g 为例) 之后把两个压缩包解压到同一个文件夹内(需要注意的是,这个文件夹路径名称中最好不要出现中文.空 ...

  6. [SCOI2009] [BZOJ1026] windy数

    windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数?\(1 \le A \le ...

  7. 1150 Travelling Salesman Problem

    The "travelling salesman problem" asks the following question: "Given a list of citie ...

  8. HDU 1754线段树

    第一个自己动手写的线段树,1Y还是有点小激动哈(虽然是模版题) 1 #include<cstdio> 2 #include<cstring> 3 #include<alg ...

  9. python实现通过指定浏览器免费观看vip视频

    程序是先通过一个解析视频的网站,然后我们提取其接口,然后实现观看vip视频的目的 所以说免费观看视频python程序很容易,但是下载视频就有些许麻烦了,下载视频请见我另一篇博客:python+fidd ...

  10. 一文弄懂使用Jmeter来进行性能测试

    该文章是基于上一次文章的 软件测试漫谈(web测试,自动化测试,Jmeter) 的续篇, 主要是详细讲解 Jmeter 的入门教程. 因为上次的文章只是简单地讲解了 Jmeter 的使用和一些概念,所 ...