一个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值得数据会被覆盖。一定要先存数据再转发。

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

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

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

    删除数据: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)方法。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        HttpSession session = request.getSession();
session.setAttribute("name", "tom");
session.setAttribute("name2", "jery");
session.setAttribute("nam3", new Person()); // 销毁session对象
//session.invalidate();
//session.setMaxInactiveInterval(5);
response.sendRedirect(request.getContextPath() + "/session2");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        HttpSession session = request.getSession(false);
System.out.println(session.getAttribute("name"));
}

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中设置

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

  2.3作用范围:

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

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

3.application

  3.1获取方式

    

request.getServletContext();
this.getServletContext();
request.getSession().getServletContext();
this.getServletConfig().getServletContext();
// 注意:无论哪一种方式,拿到的都是同一个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】构造方法

    成员变量声明时初始化和构造方法中初始化的区别 声明时为成员变量赋值,那每次创建这个类的对象都是同一个值. 构造方法初始化,每次创建对象时可以为每一个对象赋不同的值(此时要通过有参构造). 无返回值类型 ...

  2. Hive配置Tez引擎踩坑

    框架版本 Hadoop 2.7.7 Hive 2.3.7 Tez 0.9.2 保证hadoop集群启动,hive元数据服务启动 上传tez到HDFS tar -zxvf apache-tez-0.9. ...

  3. SQL(replace)替换字段中指定的字符

    语法:update 表名 set 字段名=REPLACE(字段名,'修改前的字符','修改后的字符') 例 Product商品表中Name 名字字段中描述中将'AAA' 修改成 'BBB' SQL语句 ...

  4. 【洛谷 p3383】模板-线性筛素数(数论)

    题目:给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内).(N<=10000000,M<=100000) 解法:1.欧拉筛O(n),数组近乎100KB:2.( ...

  5. 【uva 12627】Erratic Expansion(算法效率--递推)

    题意:初始1个红气球,每小时后,1个红气球会变成3个红气球和1个蓝气球,而1个蓝气球会变成4个蓝气球.问经过N小时后,第L~R行一共有多少个红气球. 解法:问行数就定义f[i][j]表示 i 小时后前 ...

  6. python+fiddler下载vip视频 && ts视频可合并

    如果你只想在线看视频可以去看这篇博客:python实现通过指定浏览器免费观看vip视频  先看一下我们程序运行的结果 我们要解析的接口就是(就是这个"接口+视频地址"可以解析出vi ...

  7. Operating System:信号量

    pv原语操作(1)操作系统PV意思:PV操作与信号量的处理相关,P表示通过的意度思,V表示释放的意思.(2)p操作和v操作是不可中断问的程序段,称为原语.如果将信号量看作共享变量,则pv操作为其临界区 ...

  8. python sort() sorted()的区别

    sorted不保存 sort保存:

  9. Windows下TeamViewer远程控制的安装与使用

    Windows下远程控制的安装与使用 由于疫情,在家里写论文,资料数据都在学校,只能远程控制了,选的是TeamViewer. 分为控制机和被控制机,安装使用略有不同. 从该网址安装:https://w ...

  10. hdu5693D++游戏 区间DP-暴力递归

    主要的收获是..如何优化你递推式里面不必要的决策 之前的代码 这个代码在HDU超时了,这就对了..这个复杂度爆炸.. 但是这个思路非常地耿直..那就是只需要暴力枚举删两个和删三个的情况,于是就非常耿直 ...