声明:本栏目所使用的素材都是凯哥学堂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组件之间共享,也就说只在这个范围内有效,所以不能直接把值获得到代码中打印,以下使用实际示例演示一下就知道无法直接获得值了:
代码示例:
浏览器:
控制台结果:
相关推荐
JavaEE是Java企业版的简称,它是一种用于构建企业级应用程序的框架,涵盖了服务器端的开发技术,包括Servlet、JSP、EJB、JMS、JNDI等。本课件将重点讲解如何在Eclipse集成开发环境中配置和使用WebLogic服务器进行...
3. **JPA和Hibernate**:数据访问层通常采用ORM(对象关系映射)技术,如Java Persistence API(JPA)或Hibernate,将Java对象映射到数据库中的记录。这样可以简化数据库操作,提高开发效率。在打车系统中,JPA或...
【标题】"求精要诀——JavaEE编程开发案例精讲 源代码(8-12)"涉及的是JavaEE平台上的高级编程实践,主要涵盖第8至12章的关键知识点。JavaEE,全称Java Platform, Enterprise Edition,是Java语言在企业级应用开发...
详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate) 知识点一:SSH三大框架整合概述 SSH三大框架整合是指将Spring、Struts2和Hibernate三个框架进行整合,以便于在JAVAEE项目中实现复杂的业务逻辑。这种...
java毕业设计——javaEE土地档案管理系统(论文+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——javaEE土地档案管理系统(论文+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——javaEE土地档案管理...
java毕业设计——javaEE商品供应管理系统(论文+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——javaEE商品供应管理系统(论文+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——javaEE商品供应管理...
java毕业设计——javaEE土地档案管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——javaEE土地档案管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——javaEE土地档案管理...
【JavaEE客户管理系统】是一个基于Java企业级应用开发的项目,主要目的是实现对客户数据的有效管理和操作。在JavaEE平台上,此类系统通常采用MVC(Model-View-Controller)架构模式,结合各种开源框架,以提高开发...
设计并实现一个登录页面供用户提交用户名和密码信息以便登录,实现一个服务器端应用程序...禁止用户不通过登录页面直接进入登录成功页面;在登录成功页面显示此页面(登录成功页面)自部署以来被所有用户一共访问过多少次;...
java毕业设计——javaEE健康管理系统(论文+开题报告+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——javaEE健康管理系统(论文+开题报告+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——javaEE健康...
【标题】"求精要诀——JavaEE编程开发案例精讲 源代码"是一部针对JavaEE编程的深度学习资源,旨在通过实例教学帮助开发者掌握JavaEE的核心技术和实践技巧。这个压缩包包含了从第1章到第7章的实践部分源代码,提供了...
java毕业设计——javaEE健康管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——javaEE健康管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——javaEE健康管理系统的设计与...
博客系统是一种基于JAVAEE技术构建的应用程序,它主要用于创建、管理和分享个人或组织的博客内容。这个特定的博客系统利用了Hibernate框架来实现代理对象数据接口(DAO),以及dom4j库来实现DAO层与表现层之间的解耦...
JavaEE项目实战——图书管理系统 JavaEE项目实战——图书管理系统是一個完整的图书管理系统项目,旨在加深对数据库基础理论和基本知识的理解,掌握运用数据库应用系统开发软件的基本方法。本系统的设计目的在于提供...
综上所述,"JavaEE5实用教程——基于WebLogic和Eclipse程序源代码"涵盖了从基础组件到高级特性的广泛内容,旨在帮助开发者利用JavaEE5的简化特性,结合WebLogic Server的稳定性和Eclipse的高效开发工具,创建高质量...
《JavaEE开发技术与案例教程——刘彦君 课件》是刘彦君主编的一份详尽的教学资源,旨在深入浅出地介绍JavaEE技术及其实际应用。JavaEE(Java Platform, Enterprise Edition)是Java平台在企业级开发中的标准,主要...
`request`对象用于封装用户提交的信息,并且提供了获取请求参数的方法,它是`HttpServletRequest`接口的一个实例。`request`对象可以帮助开发者获取用户的输入数据,进行相应的业务处理。具体用法如下: - 获取单个...
JavaEE 项目实战——图书管理系统 JavaEE 项目实战——图书管理系统是一个完整的图书管理系统的设计和实现,涵盖了数据库设计、用户功能设计、图形界面设计等多个方面。该系统旨在加深对数据库基础理论和基本知识的...
北邮 邹华老师的分布式计算环境第三章——讲述javaEE