JAVAEE_Servlet_16_HttpServletRequest中常用方法(三)
HttpServletRequest中常用方法(三)
* 回顾ServletContext对象,ServletContext对象是Servlet上下文对象
- 创建ServletContext对象
ServletContext application = config.getServletContext();
- ServletContext是Servlet上下文对象,该接口也有这样几个方法,管理ServletContext范围内的数据
- Object getAttribute(String name) 向ServletContext范围中添加数据
- void setAttribute(String name Object o) 从ServletContext范围中读取数据
- void removeAttribute(String name) 移除ServletContext范围中的数据
- ServletContext是怎样的一个范围?
一个Webapp只有一个ServletContext , 所有用户共享的一个上下文范围对象,可以实现数据共享,一般将ServletContext变量命名为Application,可见这个对象代表一个应用。
* HttpServletRequest中常用方法第三类: 操作HttpServletRequest范围内的对象
- 方法:
Object setAttribute(String name Object o) 向ServletRequest范围中添加数据
void getAttribute(String name) 从ServletRequest范围中读取数据
void removeAttribute(String name) 移除ServletRequest范围中的数据
- HttpServletRequest是怎么样的一个范围?
1.HttpServletRequest的变量通常命名为 request,代表当前用户的本次请求, 一次请求代表一个request对象。
2.request只能完成在同一次请求中传递数据。 比如有ServletA和ServletB , A将数据存进去,B是取不出来的,因为B取得时候A请求已经结束了,不是一个请求。
3.如果想要实现 A将数据存进去,B能将数据取出来,需要将两个请求进行连接,执行完成A后自动跳转到B开始执行, 将ServletA和ServletB,放在同一个请求里,必须使用转发技术(forward)。
- 向ServletRequest范围中添加数据 和 读取数据 Object setAttribute(String name Object o)
// 创建一个User对象
User user=new User();
user.setUserCode("11111");
user.setUserName("Morty");
// 向HttpServletRequest范围内添加数据
request.setAttribute("userObj",user);
// 从HttpServletRequest范围内取出数据
Object obj=request.getAttribute("userObj");
// 输出该对象
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.print(obj);
System.out.println(obj);
以上代码,因为实在同一个request中进行的存取操作,所以存进去的数据,可以取出来, 如果在一个Servlet对象中向request对象中添加数据,然后在另一个Servlet对象中取出来,那么就取不出来了,因为第一个请求已经结束了。
## RequestDispatcher 转发
- 如何才能实现在AServlet对象的请求中存入数据,而在Bservlet对象的请求中取出来呢?
* 使用转发技术(forward),将两次Request请求合并在一起,就可以实现了,AServlet对象执行结束后接着执行Bservlet。
* 代码 forward 转发技术
```
// 1.获取请求转发器对象,以下转发器对象指向了ServletRequestTestB
String dispatcherPath="/ServletRequestTest2"; // 需要跳转的对象的路径 <url-pattern>
RequestDispatcher requestDispatcher=request.getRequestDispatcher(dispatcherPath);
// 2.调用请求转发器对象的forward方法,将两个请求合并,即可完成转发
requestDispatcher.forward(request,response);
// 以上代码合并成一行代码,获取请求转发器对象,调用转发器对象的forward方法
request.getRequestDispatcher("/ServletRequestTest2").forward(request,response);
## 关于范围对象 ServletContext 和 HttpServletRequest 的选择 ?
- ServletContext 应用范围广, 可以夸用户传递数据。
- HttpServletRequest 请求范围很小,只能在同一个请求中传递数据,使用请求转发器后可以夸Servlet传递数据,但不可以跨用户传递,因为一个用户一个请求,不同的用户是不同的请求。
- 但优先选择HttpServletRequest传递数据,因为该范围对象占用资源小,请求结束就销毁了。
JAVAEE_Servlet_16_HttpServletRequest中常用方法(三)的更多相关文章
- Java三大框架之——Hibernate中的三种数据持久状态和缓存机制
Hibernate中的三种状态 瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...
- 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...
- Java集合-5. (List)已知有一个Worker 类如下: 完成下面的要求 1) 创建一个List,在List 中增加三个工人,基本信息如下: 姓名 年龄 工资 zhang3 18 3000 li4 25 3500 wang5 22 3200 2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300 3) 删除wang5 的信息 4) 利用for 循
第六题 5. (List)已知有一个Worker 类如下: public class Worker { private int age; private String name; private do ...
- C语言中的三字母词
C语言中的三字母词(trigraph) 在ANSI C标准中,定义了9个三字母词(trigraph),三字母词就是几个字符的序列,合起来表示另一个字符.三字母词使C语言环境可以在缺少一些必需字符的字符 ...
- Asp.Net中的三种分页方式
Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...
- TCP/IP源码(59)——TCP中的三个接收队列
http://blog.chinaunix.net/uid-23629988-id-3482647.html TCP/IP源码(59)——TCP中的三个接收队列 作者:gfree.wind@gmai ...
- IT第九天 - 包、访问修饰符、变量的内存分配、String类中常用方法
IT第九天 上午 包 1.包的命名规则:域名.项目名称.模块名 2.如:Wfei.com.windows.login 访问限制符 1.四种访问限制符分别对应为: (1)default:默认的,默认为p ...
- httpClient中的三种超时设置小结
httpClient中的三种超时设置小结 本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结,希望此教程能给各位朋友带来帮助. ConnectTimeoutExceptio ...
- TCP协议中的三次握手和四次挥手(图解)【转】
建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删 ...
随机推荐
- java对象克隆复制
原文链接:https://blog.csdn.net/ztchun/article/details/79110096 自己先简单描述总结一下:当想要将一个对象中已有的值直接给另外一个对象的时候,其实并 ...
- 微信小程序:日期组件picker的使用
1.页面代码 <view class="right"> <picker mode="date" value="{{material. ...
- Redis6.0.9主从搭建
所谓主从,大家都知道主是写数据,而从是进行数据的拷贝. 1:配置 主节点 127.0.0.1 6379 从节点 127.0.0.1 6378 先将单机版的配置文件赋值两份出来,原先的配置中主要改动有: ...
- CSS 书写禅机
这是未来的趋势所向,如是我行. 注意:原文发表于 2017-9-6,随着框架不断演进,部分内容可能已不适用. CSS 日渐惹人憎恶. 究其原因颇多,归根结底,皆因 CSS 给人的感觉总是飘渺迷蒙.变幻 ...
- 浮动引发的高度塌陷问题及其解决方法(BFC相关概念及性质)
浮动引发的高度塌陷问题 高度塌陷问题的产生 BFC(Block Formatting Context)的引入 元素开启BFC后的特点 开启BFC的元素不会被其他浮动元素所覆盖 开启BFC的元素不会发生 ...
- matplotlib工具栏源码探析三(添加、删除自定义工具项)
转: matplotlib工具栏源码探析三(添加.删除自定义工具项) matplotlib工具栏源码探析二(添加.删除内置工具项)探讨了工具栏内置工具项的管理,除了内置工具项,很多场景中需要自定义工具 ...
- XXL-JOB v2.3.0 发布 | 易用性增强
转: XXL-JOB v2.3.0 发布 | 易用性增强 v2.3.0 Release Notes 1.[新增]调度过期策略:调度中心错过调度时间的补偿处理策略,包括:忽略.立即补偿触发一次等: 2. ...
- 抽一根烟的时间学会.NET Core 操作RabbitMQ
什么是RabbitMQ? RabbitMQ是由erlang语言开发的一个基于AMQP(Advanced Message Queuing Protocol)协议的企业级消息队列中间件.可实现队列,订阅/ ...
- mysql从一个表提取数据更新另外一个表(修复表数据的不一致)
目前碰到一个数据不一致的情况,有两张表,一张项目表,一张项目成员表,项目表有个字段是项目工作时间,是项目成员的工作时间汇总.是由于该了逻辑,所以要把数据改成一致. 项目表的大致结构如下. 表名:pro ...
- JAVA多线程与锁机制
JAVA多线程与锁机制 1 关于Synchronized和lock synchronized是Java的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码 ...