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 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删 ...
随机推荐
- vue-eahars生产编译报错
{ test: /\.js$/, loader: 'babel-loader', include: [resolve('src'), resolve('test'), resolve('node_mo ...
- SpringBoot2.x整合Email并利用AOP做一个项目异常通知功能
因为不知aop能干嘛,因此用aop做个小功能,再结合最近学的springboot-Email做了个系统异常自动邮件通知的功能, 感觉满满的成就感. AOP不懂的可以看上一篇:https://www.c ...
- SpringBoot2.1中添加过滤器配置
1:构造一个实现 Filter 接口的过滤器,并在类上添加@component注释: notice1:若不添加,则需在spring中注入该bean,不然会报错. package com.dev.fil ...
- 痞子衡嵌入式:自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动. 接着上篇文章 <了解i.M ...
- 死磕hyperledger fabric源码|Order节点概述
死磕hyperledger fabric源码|Order节点概述 文章及代码:https://github.com/blockchainGuide/ 分支:v1.1.0 前言及源码目录 Orderer ...
- 简单&&大数取模
Big Number Problem Description As we know, Big Number is always troublesome. But it's really importa ...
- AWS Switching to an IAM role (AWS CLI)
一,引言 今天额外分享一篇 AWS 的技术内容,需要在 EC2 切换到跨账号 IAM 角色(AWS CLI).假设我们使用两个 AWS 账户,A账号,B账号.我们希望允许 A 账号用于 "i ...
- Java编程开发之数据图表分析模型
数据统计分析 多曲线图表分析实现 基本需求分析 假设在怪兽出没的年岁,加上年关在即,需要统计分析各个道路卡口车流量出入统计,主要从车流量和车牌地角度出发.如图所示的业务需求: 道路卡口-车流量分析: ...
- ZooKeeper未授权访问漏洞确认与修复
目录 探测2181 探测四字命令 用安装好zk环境的客户端连接测试 修复 修复步骤一 关闭四字命令 修复步骤二 关闭未授权访问 zookeeper未授权访问测试参考文章: https://www.cn ...
- 你好,布尔玛!(BulmaRazor)
Blazor 官方简介 Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的 ...