可以知道ServletRequest这个接口和ServletContext里面有三个相同的方法

 void setAttribute(String var1, Object var2);
Object getAttribute(String var1);
void removeAttribute(String var1);

ServletContext这个应用域,什么时候往他里面绑定数据呢,要满足这三个条件
1:所有用户共享的数据。

2:这个共享的数据量很小。

3:这个共享的数据很少的修改操作。
在以上三个条件都满足的情况下,使用这个应用域对象,可以大大提高我们程序执行效率。

具体解释:
我们把这个数据放入ServletContext中对象,如果以后用户再去访问这个数据的话,我们在从这个应用域当中去取数据,就不需要连接数据库,而数据库相当于是在硬盘文件上,而内存和硬盘交互是需要io流的,而io流的效率是很低的。所以我们会采用缓存机制。对于高并发的系统时,许多用户访问数据,就可以直接去访问内存就不需要去连接数据库。缓存机制是提高效率的重要手段。
为什么数据量要很小呢?

因为ServletContext对象是服务器开启的时候创建,关闭的时候销毁,如果占用过多内存,这个对象会一直存活的。
为什么要不经常修改呢?

如果经常修改,那么一定会引起线程安全问题,而保证线程安全问题会跟锁机制有关,而锁机制不管是什么锁机制最终会导致系统性能降低
请求域:

范围很小,只在一次请求内有效,发两次请求对应说的是两个请求对象。
也有这三个方法。

void setAttribute(String name, Object obj); 向域当中绑定数据Object getAttribute(String name); 从域当中根据name获取数据void removeAttribute(String name); 将域当中绑定的数据移除

对于请求域和应用域的选用原则:
一般情况下我们会使用范围小的对象域,因为小的域对象占用的资源较少。
请求对象创建的时候请求域就开始了,servletcontext对象创建的时候应用域就开始了,
总结:

在JavaWeb中一共四个域对象,其中ServletContext就是域对象,它在整个应用中只创建一个ServletContext对象。request其中一个,request可以在一个请求中共享数据。
一个请求会创建一个request对象,如果在一个请求中经历了多个Servlet,那么多个Servlet就可以使用request来共享数据。现在我们还不知道如何在一个请求中经历之个Servlet,后面在学习请求转发和请求包含后就知道了。

请求转发:

在request请求域当中,我们测试两个类,可以知道一个请求域对应一个对象,所以如果想要在Aservlet调用Bservlet的request,我们需要使用servlet中的转发机制。
第一:获取请求转发器对象相当于把这个路径包装到请求转发器其中,实际上是把下一个跳转的资源路径告知给tomcat
  
第二:调用请求转发器   当中的forward方法完成转发,这里为什么要传request这个对象,因为这样才能保证,在下一个servlet调用doget方法的时候是同一个request对象,转发的时候这两个参数很重要,这两个都是要传给下一个资源的。dispatcher.forward(request,response);

转发是一次请求,可以把这两步方法写在一起。
request.getRequestDispatcher("/b").forward(request,response);

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//       获取系统当前时间Date nowTime=new Date();//将系统当前时间绑定到请求域当;req.setAttribute("sysTime",nowTime);
//        第一步:获取请求转发器RequestDispatcher dispatcher=req.getRequestDispatcher("/b");
//        第二步:调用请求转发器dispatcher.forward(req,resp);}
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//从请求域当中去除绑定的数据Object sysTime = req.getAttribute("sysTime");
//        输出到浏览器resp.setContentType("text/html");PrintWriter out=resp.getWriter();out.print("系统当前时间:"+sysTime);}

具体解释:首先tomcat服务器得到b这个路径,然后根据web.xml文件里面的配置信息得知道你要调用的是Bservlet类,然后就会去调用里面的doget方法,doget方法是tomcat调用的,然后doget方法的两个参数就是forword里面的两个参数,这样才可以保证这两个当中的request对象是同一个。
两个servlet如何共享数据呢?
将数据放到ServletContext应用域当中,当然是可以的,但是应用域范围太大,占用资源太多。不建议使用。

可以将数据放到request域当中,然后AServlet转发到BServlet,保证AServlet和BServlet在同一次请求当中,这样就可以做到两个Servlet,或者多个Servlet共享同一份数据。
转发的下一个资源必须是servlet吗?
不一定,只要是Tomcat服务器当中的合法资源,都是可以转发的。例如:html

 注意:转发的时候,路径的写法要注意,转发的路径以“/”开始,不加项目名。
关于Tomcat中两个容易混淆的方法。

request.getParameter("username");
 Object obj = request.getAttribute("name");
第一个方法获取的是用户在浏览器上提交的数据,而第二个获取的是请求域当中绑定的数据。这一个说明肯定之前执行过set往里面绑定过数据,然后才会调用这个方法。

Request请求域相关推荐

  1. java request获取域,Java Web - Servlet(13)HttpServletRequest详解(获取请求数据、请求分派、请求域)(二)...

    Java Web -- Servlet(13)HttpServletRequest详解(获取请求数据.请求分派.请求域)(2) HttpServletRequest ----------------- ...

  2. Java中的请求域(Request)《笔记》

    Request 关于一个web站点的欢迎页面 什么是一个web站点的欢迎页面? 对于一个webapp来说,我们可以设置它的欢迎页面 设置了之后,当访问这个webapp的时候,或者访问这个web站点的时 ...

  3. javaweb_笔记2(Servlet源码分析;request详解;请求域;转发和重定向;WebServlet注解;jsp基础语法,JavaBean。)

    1.HttpServlet源码分析 HttpServlet类是专门为HTTP协议准备的.比GenericServlet更加适合HTTP协议下的开发. HttpServlet在哪个包下? jakarta ...

  4. Java-Web Response响应和Request请求

    一.请求响应流程图 二.response概述 response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse.在客户 ...

  5. 微信小程序request请求封装;微信小程序封装request请求;uni-app小程序封装request请求;

    本片封装了微信小程序request请求:为别是post get put请求,重点在request.js文件 1.新增四个文件 2.根目录下的utils下的request.js封装uni.request ...

  6. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

  7. javaweb:request请求对象(5)

    1.请求和响应的概述: 什么请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程. 什么响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示,这个过程就称之为响应. ...

  8. HTTP Request 请求

    HTTP Request 在HTTP连接中消息报文分为Request请求和Response响应两种,每种报文在HTTP首部会有不同的字段来标识不同的用途. HTTP协议使用TCP协议进行传输,在应用层 ...

  9. Request请求转发和重定向

    Request请求转发和重定向 一,Request请求转发 (一),请求转发:在服务器内部的资源跳转的方式 我们在实际开发中,需要写不同的servlet,每个人servlet完成不同的功能,当我们访问 ...

最新文章

  1. pytorch常用代码
  2. Openstack-M版(双节点)热迁移记录
  3. 从零开始玩转logback
  4. 中国的程序员为什么这么辛苦?
  5. Android学习目录
  6. Linux程序员必读:中文化与GB18030标准
  7. linux命令之route
  8. [2019杭电多校第三场][hdu6608]Fansblog
  9. android 三星截长屏,三星如何截屏手机长图,三星四种截图方法介绍
  10. 小程序组件传值解决页面数据刷新
  11. matlab贝塔分布,怎么拟合贝塔分布函数
  12. Visual Studio 2022自定义(透明)主题和壁纸完整版
  13. Joyoshare Media Cutter for Mac(智能媒体剪辑软件)激活版
  14. bp神经网络python源代码_python构建bp神经网络_曲线拟合(一个隐藏层)__2.代码实现...
  15. 使用 Underminer Studios 的 MR 配置器工具制作现实混合虚拟现实视频
  16. Linux——服务器文件备份(一)
  17. Pygame 官方文档 - pygame.key
  18. STM32F103+SDIO wifi Marvell8801/Marvell88w8801 介绍(九) ---- Marvell 8801/Marvell 88w8801 实现AP功能/实现热点功能
  19. metaRTC(yangwebrtc)-中国人自己的webrtc
  20. 芝诺悖论——追不上的乌龟

热门文章

  1. 关于如何解决Python中安装requests后,pycharm报错ModuleNotFoundError: No module named 'requests'(转载+个人实践)
  2. Network Mess UVA - 1667
  3. java tcp 乱码_tcp通信 中文乱码问题
  4. dnf安徒恩服务器不稳定,DNF安徒恩开团后掉线那些事 网友:这时才体会到混子的重要性...
  5. html保留两位小数php,JS保留两位小数输入数校验代码
  6. cf网通服务器显示不出来,cf连接服务器失败怎么办
  7. 山水之道第三境——精灵的飞天之门
  8. A*算法实战——构建场景中的最优路径及实现NPC的自动寻路
  9. [水]2015百度之星初赛第一场 超级赛亚ACMer
  10. 数据结构-排序算法(c语言实现篇)