java web HttpServletRequest
一、HttpServletRequest介绍
HttpServletRequest 对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,通过这个对象提供的方法,可以获得客户端请求的所有信息。
HttpServletRequest 接口继承自 ServletRequest 接口,其主要作用是封装 HTTP 请求消息.
HTTP 请求消息有三部分: 1、请求行,2、请求消息头, 3、请求消息体
因此在 HttpServletRequest 接口中定义了获取请求行、请求头和请求消息体的相关方法。
获取“请求行”信息的相关方法
方法声明 | 功能描述 |
---|---|
String getMethod() | 【获取请求方式 】该方法用于获取 HTTP 请求消息中的请求方式(如 GET、POST 等) |
String getRequestURI() | 【获取请求URI】该方法用于获取请求行中的资源名称部分即位于 URL 的主机和端门之后、参数部分之前的部分 |
String getQueryString() | 【获取get方式请求参数】该方法用于获取请求行中的参数部分,也就是资源路径后问号(?)以后的所有内容 |
String getContextPath() | 【获取虚拟目录:】该方法用于获取请求 URL 中属于 Web 应用程序的路径,这个路径以 / 开头,表示相对于整个 Web 站点的根目录,路径结尾不含 /。如果请求 URL 属于 Web 站点的根目录,那么返回结果为空字符串("") |
String getServletPath() | 【获取Servlet路径】该方法用于获取 Servlet 的名称或 Servlet 所映射的路径 |
String getRemoteAddr() | 该方法用于获取请求客户端的 IP 地址,其格式类似于 192.168.0.3 |
String getRemoteHost() | 该方法用于获取请求客户端的完整主机名,其格式类似于 pcl.mengma.com。需要注意的是,如果无法解析出客户机的完整主机名,那么该方法将会返回客户端的 IP 地址 |
int getRemotePort() | 该方法用于获取请求客户端网络连接的端口号 |
String getLocaIAddr() | 该方法用于获取 Web 服务器上接收当前请求网络连接的 IP 地址 |
String getLocalName() | 该方法用于获取 Web 服务器上接收当前网络连接 IP 所对应的主机名 |
int getLocalPort() | 该方法用于获取 Web 服务器上接收当前网络连接的端口号 |
String getServerName() | 该方法用于获取当前请求所指向的主机名,即 HTTP 请求消息中 Host 头字段所对应的主机名部分 |
int gctServcrPort() | 该方法用于获取当前请求所连接的服务器端口号,即 HTTP 请求消息中 Host 头字段所对应的端口号部分 |
StringBuffcr getRequestURL() | 【获取请求URl】该方法用于获取客户端发出请求时的完整 URL,包括协议、服务器名、端口号、 资源路径等信息,但不包括后面的査询参数部分。注意,getRequcstURL() 方法返冋的结果是 StringBuffer 类型,而不是 String 类型,这样更便于对结果进行修改 |
例子:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestLineServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
// 获取请求行的相关信息
out.println("getMethod : " + request.getMethod());//获取 HTTP 请求消息中的请求方式(如 GET、POST 等)
out.println("getRequestURI:" + request.getRequestURL());
out.println("getQueryString:" + request.getQueryString());
out.println("getContextPath:" + request.getContextPath());
out.println("getServletPath:" + request.getServletPath());
out.println("getRemoteAddr : " + request.getRemoteAddr());
out.println("getRemoteHost : " + request.getRemoteHost());
out.println("getRemotePort : " + request.getRemotePort());
out.println("getLocalAddr : " + request.getLocalAddr());
out.println("getLocalName : " + request.getLocalName());
out.println("getLocalPort : " + request.getLocalPort());
out.println("getServerName : " + request.getServerName());
out.println("getServerPort : " + request.getServerPort());
out.println("getRequestURL : " + request.getRequestURL());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
获取“请求消息头”的相关方法
方法声明 | 功能描述 |
---|---|
String getHeader(String name) | 该方法用于获取一个指定头字段的值,如果请求消息中没有包含指定的头字段,则 getHeader() 方法返回 null;如果请求消息中包含多个指定名称的头字段,则 getHeader() 方法返回其中第一个头字段的值 |
Enumeration getHeaders(String name) | 该方法返回一个 Enumeration 集合对象,该集合对象由请求消息中出现的某个指定名称的所有头字段值组成。在多数情况下,一个头字段名在请求消息中只出现一次,但有时可能会出现多次 |
Enumeration getHeaderNames() | 该方法用于获取一个包含所有请求头字段的 Enumeration 对象 |
int getIntHeader(String name) | 该方法用于获取指定名称的头字段,并且将其值转为 int 类型。需要注意的是,如果指定名称的头字段不存在,则返回值为 -1;如果获取到的头字段的值不能转为 int 类型,则将发生 NumberFormatException 异常 |
long getDateHeader(String name) | 该方法用于获取指定头字段的值,并将其按 GMT 时间格式转换为一个代表日期/时间的长整数,该长整数是自 1970 年 1 月 1 日 0 时 0 分 0 秒算起的以毫秒为单位的时间值 |
String getContentType() | 该方法用于获取 Content-Type 头字段的值,结果为 String 类型 |
int getContentLength() | 该方法用于获取 Content-Length 头字段的值,结果为 int 类型 |
String getCharacterEncoding() | 该方法用于返回请求消息的实体部分的字符集编码,通常是从 Content-Type 头字段中进行提取,结果为 String 类型 |
获取消息体“请求参数”
方法声明 | 功能描述 |
---|---|
String getParameter(String name) | 【根据参数名称获取参数值】该方法用于获取某个指定名称的参数值。 如果请求消息中没有包含指定名称的参数,则 getParameter() 方法返回 null。 如果指定名称的参数存在但没有设置值,则返回一个空串。 如果请求消息中包含多个该指定名称的参数,则 getParameter() 方法返回第一个出现的参数值。 |
String [] getParameterValues (String name) | 【根据参数名称获取参数值的数组】HTTP 请求消息中可以有多个相同名称的参数(通常由一个包含多个同名的字段元素的 form 表单生成),如果要获得 HTTP 请求消息中的同一个参数名所对应的所有参数值,那么就应该使用 getParameterValues() 方法,该方法用于返回一个 String 类型的数组。 |
Enumeration getParameterNames() | 【获取所有请求的参数名称】方法用于返回一个包含请求消息中所有参数名的 Enumeration 对象,在此基础上,可以对请求消息中的所有参数进行遍历处理。 |
Map getParameterMap() | 【获取所有参数的map集合】getParameterMap() 方法用于将请求消息中的所有参数名和值装入一个 Map 对象中返回。 |
请求转发:一种在服务器内部的资源跳转方式
1. 步骤:
1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
2. 特点:
1. 浏览器地址栏路径不发生变化
2. 只能转发到当前服务器内部资源中。
3. 转发是一次请求
共享数据:
* 域对象:一个有作用范围的对象,可以在范围内共享数据
* request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
* 方法:
1. void setAttribute(String name,Object obj):存储数据
2. Object getAttitude(String name):通过键获取值
3. void removeAttribute(String name):通过键移除键值对
4. 获取ServletContext:
* ServletContext getServletContext()
最新文章
- php foreach引用赋值
- 字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串
- web.xml 中的listener、 filter、servlet 加载顺序
- 【VB6 学习文档管理系统源码】
- 使用map端连接结合分布式缓存机制实现Join算法
- 中国剩余定理模板poj1006
- link@import
- linux环境 :Linux 共享库LIBRARY_PATH, LD_LIBRARY_PATH 与ld.so.conf
- boost asio 异步实现tcp通讯
- 迅雷Vip账号共享器(持续更新)
- PAT (Advanced Level) 1071. Speech Patterns (25)
- vsftpd安装及虚拟用户配置
- nginx location匹配顺序及CI框架的nginx配置
- vue项目上传Github预览
- [LOJ3087][GXOI/GZOI2019]旅行者——堆优化dijkstra
- 软件151 王楚博 aodp
- webpack学习笔记 ——篇2
- roadhog如何支持除development和production外的其他环境变量配置
- 【Java并发编程】14、Thread,线程说明
- openstack 安全策略权限控制等api接口
热门文章
- idea 编译报错 Build completed with 1 error and 0 warnings in 2 s 113 ms
- JavaSE学习笔记(12)---线程
- MAC安装MacPorts 卡在“正在运行软件包脚本”的解决办法
- 如何在CentOS上安装Tensorflow的gpu版本?
- 斯坦福发布2019全球AI报告:中国论文数量超美国,自动驾驶汽车领域获投资最多
- Eclipse使用Alibaba Cloud Toolkit极速部署项目
- H5_0023:html页面禁止放大缩小页面
- Redis-03-集群搭建
- Android9.0 Camera2 横屏问题修改记录
- [译]C# 7系列,Part 10: Span<;T>; and universal memory management Span<;T>;和统一内存管理