HttpServletRequest对象与RequestDispatcher对象

一、HttpServletRequest对象

1.介绍

在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求消息头和请求消息体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求消息体的相关方法。

2.获取请求行信息的相关信息

当访问Servlet时,会在请求消息的请求行中,包含请求方法、请求资源名、请求路径等信息,为了获取这些信息,在HttpServletRequest接口中,定义了一系列用于获取请求行的方法,如表所示。

3.获取请求消息行信息案例代码

4.获取请求消息头的相关方法

当请求Servlet时,需要通过请求头向服务器传递附加信息,例如,客户端可以接收的数据类型,压缩方式,语言等等。为此,在HttpServletRequest接口中定义了一系列用于获取HTTP请求头字段的方法,如表所示。

5.读取HTTP请求消息头字段案例代码

6.利用Referer请求头防止"盗链"

二、HttpServletRequest应用

1.获取请求参数及解决中文乱码

2.通过Request对象传递数据

public interface HttpServletRequest extends ServletRequest

在ServletRequest中

a.setAttribute(String name, Object o)

该方法用于将一个对象与一个名称关联后存储进ServletRequest对象中

需要注意的是,如果ServletRequest对象中已经存在指定名称的属性,setAttribute()方法将会先删除原来的属性,然后再添加新的属性。如果传递给setAttribute()方法的属性值对象为null,则删除指定名称的属性,这时的效果等同于removeAttribute()方法。

b.getAttribute(String name)

该方法用于从ServletRequest对象中返回指定名称的属性对象

c.removeAttribute(String name)

该方法用于从ServletRequest对象中删除指定名称的属性

d.Enumeration<String> getAttributeNames()

该方法用于返回一个包含ServletRequest对象中的所有属性名的Enumeration对象

需要注意的是,只有属于同一个请求中的数据才可以通过ServletRequest对象传递数据。

数据传递原理看下面的请求转发

三、RequestDispatcher对象的应用

1.RequestDispatcher接口

当一个Web资源收到客户端的请求后,如果希望服务器通知另外一个资源去处理请求,这时,除了使用sendRedirect()方法实现请求重定向外,还可以通过RequestDispatcher接口的实例对象来实现。在ServletRequest接口中定义了一个获取RequestDispatcher对象的方法,如表所示。

获取到RequestDispatcher对象后,最重要的工作就是通知其它Web资源处理当前的Servlet请求,为此,在RequestDispatcher接口中,定义了两个相关方法,如表所示

表中列举的两个方法中,forward()方法可以实现请求转发,include()方法可以实现请求包含。

2.请求转发

3.请求包含

相关推荐
亚历克斯神41 分钟前
智能搜索系统的升级复盘——从 Elasticsearch 到混合检索的检索质量提升
java·spring·微服务
里欧跑得慢1 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
金銀銅鐵2 小时前
[Java] 一个方法最多可以有多少个入参?
java·jvm
哭哭啼2 小时前
JAVA服务问题诊断
java·开发语言·jvm
Sayuanni%32 小时前
SpringBoot 从注解到源码:核心知识点总结
java·spring boot·后端
坚定信念,勇往无前3 小时前
Maven 私有仓库-nexus
java
Minner-Scrapy3 小时前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
晚风醉蝶3 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
夏天拐跑了西瓜3 小时前
Spring Cloud 微服务实战(三):一个服务挂了,凭什么拖垮整个系统?Sentinel 限流熔断实战
java·spring cloud·微服务
2601_967264284 小时前
Jetpack Compose 实践指南:从入门到进阶
java·学习