servlet内置对象(传递数据)
一个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内置对象(传递数据)的更多相关文章
- 数据绑定-绑定Servlet内置对象
数据绑定:获取用户提交的参数,绑定到入参的参数中,就叫数据绑定. 绑定Servlet内置对象: 测试:
- WebForm 内置对象、数据增删改、状态保持
一.内置对象 1.Response对象:响应请求 Response.Write("<script>alert('添加成功!')</script>"); → ...
- servlet内置对象
request 请求对象 类型javax.servlet.ServletRequest 作用域Request response ...
- JS内置对象有哪些?
JS内置对象分为数据封装类对象和其他对象 数据封装类对象:String,Boolean,Number,Array,和Object; 其他对象:Function,Arguments,Math,Date, ...
- servlet运行机制、Request内置对象和服务器端跳转
servlet运行机制: 当发送一个请求到服务器的时候,容器(Tomcat)会判断该路径属于哪一个 Servlet 进行处理,Servlet 有一个抽象父类“HttpServlet”,这个类是一个模板 ...
- jsp九个内置对象、四个域对象及Servlet的三大域对象
一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创 ...
- jsp中9个内置对象与servlet对应关系及四个作用域
参考: <jsp&servlet学习笔记.第2版.林信良><JSR-245 JavaServer Pages 2.2 Maintenance Release Specifi ...
- JSP内置对象与servlet对应关系
隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 r ...
- Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结
1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...
随机推荐
- 关于webservice实现web接口
package service; import java.util.List; import javax.jws.WebMethod;import javax.jws.WebService; /** ...
- linux命令--ssh创建隧道
工作应用场景 在工作中,总会连接到各种不能直接访问的环境,所以我们必须使用ssh隧道进行访问. 原理简介 ssh隧道:https://www.jianshu.com/p/20600c91e656
- php文件下载的实现(header)
php文件下载的实现(header) $file_xls=$path; // 文件的保存路径 $example_name=basename($file_xls); //获取文件名 he ...
- PHP-电脑搭建服务器
PHP-电脑搭建服务器 一 材料 花生壳 php mysql apache(我使用的是phpstudy) 二 实现 (一)phpstudy安装 (二)花生壳安装及认证 (二)相关设置 1 ...
- 2019 Multi-University Training Contest 5——permutation 2
传送门 题意: t组输入,之后每组例子有三个数n.x.y代表在一个以x为开头y为结尾的长为n的数组里面,开头和结尾数据已经固定,让你从1--n中找其他数据填入数组中 (每个数据不能重复使用),使它满足 ...
- qmh的测试1
题目:传送门 首先输入一个n,之后输入n个数a(1<=a<=1e7),对这n个数排序后,你需要找到所有的它们连续的长度.把这些连续的长度排序后输出 输入 输入: 8 1 5 2 7 4 5 ...
- C++11 Java基本数据类型以及转换
写在前面: 母语是Java,后来学了C++11,这两个语言的基本数据类型隐式转换不太一样,有点晕,整理一下 整理自网络和书籍,标明出处 C++ 基本数据类型 --http://www.cnblogs. ...
- [笔记]吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
开发的原因,需要对吞吐量(TPS).QPS.并发数.响应时间(RT)几个概念做下了解,查自百度百科,记录如下: 1. 响应时间(RT) 响应时间是指系统对请求作出响应的时间.直观上看,这个指标与人对软 ...
- 833A The Meaningless Game
A. The Meaningless Game time limit per test 1 second memory limit per test 256 megabytes input stand ...
- BellmanFord为什么只需松弛V-1次
首先s不用松弛,V-=1 然后对于其他的顶点..每次都至少能完全松弛一个顶点.. 为什么呢..因为初始d[s]=0,所以和s相邻接的边都将被松弛完全..无论松弛的顺序 那么对于这个图,无论松弛的顺序都 ...