JavaEE——HttpServletRequest对象

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

HttpServletRequest对象

我们都知道浏览器通过http协议与Tomcat(web服务器)通信时,会生成两个对象,一个是HttpServletRequest对象,一个是HttpServletResponse对象。它们是一对数据封装对象,前者封装客户端的请求头,后者封装服务器的响应头。而在这里要介绍的是HttpServletRequest对象,HttpServletRequest实际上是个接口,是Java所定制的接口,这个接口是由开发web服务器的人员去做实现的。
可以看一下HttpServletRequest的源码:

我们可以看看Tomcat中实现这个接口的两个类:
Request类:

RequestFacade类:

可以看到以上这两个类都各自实现了HttpServletRequest接口,但实际上这个两个类是有关联的,具体的代码实现其实是由Request类完成的,而RequestFacade类只是作为一个转发的存在。而且从类的名称上也可以看得出来,Facade是外观、正面的意思,所以这是一个外观类,而在这个RequestFacade类后面的真正实现类是Request。可以想象成RequestFacade是Request的前端、门面,Request则是RequestFacade的后台、后端。
看一下RequestFacade的构造器和部分代码就知道了:

再来看看RequestFacade的部分代码:

而且这个类的代码行数也不到一千行:

下面再来看看Request类的代码:

可以看到getContextPath这个方法是在Request类上实现的,并且因为实现代码在这个类里,所以代码行数比RequestFacade类多:

示意图:

从上图可以看到HttpServletRequest接口和Request、RequestFacade实现类之间构成了一个模式,这个设计模式就是外观模式。外观模式为子系统中的一组接口提供了一个一致的界面,这个界面就是RequestFacade,并且定义了一个高层接口这个接口就是HttpServletRequest,这个接口使得这一子系统更加容易使用。
外观模式好处在于隐藏了系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口(HttpServletRequest)。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性,这个模式实现了子系统与客户端之间的松耦合关系。所以我们都是通过HttpServletRequest接口对象去调用方法的,而实现类和界面类都隐藏在背后,而且这两个类也不是Java实现的,而是开发web服务器的人员实现的(Java的尿性一贯如此)。

关于对象池:
HttpServletRequest和HttpServletResponse对象是存放在一个对象池中的,这是一个活动的能够自动增长的对象池,就和自动增长的线程池一样,每当对象不够用的时候就会新增加对象。这个对象池可以优化服务器资源,因为这两个对象可以反复的利用,不会造成资源的浪费。如果没有这个对象池的话,每次用户访问就会新建一次对象的话,这么做十分耗费资源,而且速度还慢。所以从这一点可以知道,这个对象池就是起到了一个优化资源的作用(好像池子都是这么回事)。
我们可以打印这个两个对象的hash值查看一下就知道了(需要不断的刷新访问页面):

运行结果:

从图中可以看到有几个hash值重复了好几次,所以从这一点就可以得知它使用了对象池机制。

好了,以上简单介绍完HttpServletRequest中接口与实现类的一些关系和使用到了什么设计模式与对象池机制,接下来介绍一下HttpServletRequest中较为常用的一些方法:
获得服务器相关信息方法:

代码示例:

运行结果:

获得请求头信息方法(请求头中的信息是键/值对形式的):

代码示例:

运行结果:

获得客户端的IP和端口方法:

代码示例:

运行结果:

获得和设置表单数据方法(如果是上传文件的话则无法获取文件中的数据):

Html代码示例:

Java代码示例:

浏览器表单:

控制台结果:

获得和设置表单属性相关方法:

注意:以上这几个方法只是在web容器内部流转,仅在具有转发关系的Web组件之间共享,也就说只在这个范围内有效,所以不能直接把值获得到代码中打印,以下使用实际示例演示一下就知道无法直接获得值了:

代码示例:

浏览器:

控制台结果:

时间: 2024-08-27 19:37:57

JavaEE——HttpServletRequest对象的相关文章

JavaWeb-09(HttpServletRequest对象&会话管理之Cookie)

JAVAWEB-09:HttpServletRequest对象&会话管理之Cookie HttpServletRequest 一.HttpServletRequest对象: 代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. 二.request常用方法 1.获得客户机信息 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求行中的资源名部分.

javaweb学习总结(十)——HttpServletRequest对象(一)

一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息. 二.Request常用方法 2.1.获得客户机信息 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求行中的资源名部分. getQueryString 方法返回请求行中的参数部分. getPathInf

HttpServletRequest对象的使用

浏览器将所有请求信息全部封装到HttpServletRequest对象中. 浏览器直接访问资源,默认提交的方式是Get方式. 实体内容:只有Post提交的参数会放到实体内容中. 1 @WebServlet("/RequestDemo1") 2 public class RequestDemo1 extends HttpServlet { 3 /** 4 * 这些动作服务器已经做了: 5 * 1)tomcat服务器接收到浏览器发送的请求数据,然后封装到HttpServletRequest

HttpServletRequest对象请求转发和HttpServletResponse对象请求重定向之间的区别

HttpServletRequest对象request代表浏览器请求对象,HttpServletResponse对象代表服务器响应对象,当用浏览器访问web服务器,发出请求时,Servlet调用service方法并传入该两个对象,然后通过请求转发或者重定向到下一个jsp页面或者Servlet,下面是request对象请求转发和response对象请求重定向的区别: 区别一.RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件:而HttpServletRe

JavaWeb---总结(十)HttpServletRequest对象(一)

一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息. 二.Request常用方法 2.1.获得客户机信息 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求行中的资源名部分. getQueryString 方法返回请求行中的参数部分. getPathInf

HttpServletRequest对象(一)

首先声明:本文转载自:@孤傲苍狼 https://home.cnblogs.com/u/xdp-gacl/ 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息. 二.Request常用方法 2.1.获得客户机信息 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法

HttpServletRequest对象

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息. request.getRequestURL().toString();//得到请求的URL地址 request.getRequestURI();//得到请求的资源 request.getQueryString();//得到请求的URL地址中附带的参数 request.getLocalAddr();//

Servlet——HttpServletRequest对象详解

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户的这些信息. ====================================================================================== HttpServletRequest常用方法 getRequestURL方法返回客户端发出请求时的完整URL getRequest

(四)HttpServletRequest对象(转)

转自"孤傲苍狼"博客. Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一.HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应.这个对象中封装了向客户端发送数据.