Servlet 核心接口

在Servlet体系结构中,除了用于实现Servlet的Servlet接口、GenericServlet类和HttpServlet类外,还有一些辅助Servlet获取相关资源信息的重要接口,了解这些接口的作用并熟练掌握这些接口的常用方法是使用Servlet进行Web应用开发的基础。

  • ServletConfig 接口:用于获取Servlet初始化参数和ServletContext对象。
  • ServletContext 接口: 代表当前Servlet运行环境,Servlet可以通过ServletContext对象来访问Servlet容器中的各种资源。
  • HttpServletRequest接口:用于封装HTTP请求信息。
  • HttpServletResponse接口: 用于封装HTTP响应消息。

HttpServletRequest 接口

javax.servlet.http.HttpServletRequest 接口定义为

public interface HttpServletRequest extends ServletRequest

在Servlet API 中,ServletRequet接口被定义为用于封装请求的信息,ServletRequest对象由 Servlet 容器在用户每次请求 Servlet 时创建并传入Servlet 的 service() 方法中。HttpServletRequest 接口继承了 ServletRequest 接口,是专用于HTTP协议的子接口,用于封装HTTP请求信息。在HttpServlet类的 service方法中,传入的ServletRequest 对象被强制转换为 HttpServletRequest对象来进行HTTP请求信息的处理。

获取请求行信息

客户端浏览器和服务器端Servlet通过HTTP协议进行通讯,HTTP协议采用了请求/响应模型,协议的请求报文由请求行、请求头和可选的请求正文组成。

获取请求行信息的方法及描述

方法 描述
getMethod() 获取请求使用的HTTP方法,例如 GET、POST
getRequestURI() 获取请求行中的资源部分
getProtocol() 获取使用的协议及版本号
getQueryString() 获取请求URL后面的查询字符串,只对GET有效
getServletPath() 获取Servlet所映射的路径
getConextPatch() 获取请求资源所属的Web应用路径

获取请求头信息

常见HTTP请求头

请求头名称 说明
Host 初始URL中的主机和端口,可以通过这个信息获得提出请求的主机名和端口号
Connection 表述是否需要持久连接。如果值为 Keep-Alive或者请求使用的是 HTTP1.1,它就可以利用持久连接的优点,当页面包含多个元素时,可以显著的减少下载所需要的时间。
Content-Length 消息正文的长度
Cache-Control 指定请求和响应遵循的缓存机制。常见值 no-cache,只是请求和响应消息不能缓存。
Accept 浏览器可接受的MIME类型
Origin 说明最初请求是从哪来发起,只用于POST请求
User-Agent 浏览器相关信息,例如浏览器类型及版本,浏览器语言、客户所使用的操作系统及版本等。
Accept-Charset 浏览可接受的字符集
Content-Type 表示请求内容的MIME类型。由于经常要设置Context-Type,因此 HttpServletResponse 提供了一个专用的方法 setContentType
Referer 包含一个URL,表示从哪个地址出发访问到当前请求地址
Accept-Encoding 浏览器能够进行解码的数据编码方式。例如,gzip,服务器能够支持gzip的浏览器返回经gzip编码的html页面,许多情形下可以减少5-10倍的下载时间
Accept-Language 浏览器所希望的语言种类。
Cookie 表示客户端的Cookie信息

HttpServletRequest提供getHeader方法来根据指定的请求头名称读取对应的请求头信息,如果当前的请求中提供了对应的请求头,则返回对应的值,否则返回null。

public abstract String getHeader(StringheaderName)

尽管getHeader方法提供读取请求头信息的通用方式,但由于一些请求头的应用很普遍,HttpServletRequest还提供了专门对这些请求头的访问方法。

方法 描述
getIntHeader(String name ) 获取整数类型参数名为name的http头部
getDateHeader(String name) 获取long类型参数名为name的http头部
getContentLength() 获取请求内容的长度,以字节为单位
getContentType() 获取请求的文档类型和编码
getLocale() 获取用户浏览器设置的local信息
getCookies() 获取一个Cookie数组,该数组包含这个请求中当前的所有cookie

获取请求正文

请求正文内容为POST请求参数名称和值所组成的一个字符串;而对于GET请求,其请求参数附属在请求行中,没有请求正文。

HTTP协议的POST请求,主要通过FORM表单向Web服务器端程序提交数据请求的方式实现。

表单元素的 enctype 属性用于指定浏览器使用哪种编码方式将表单中的数据传送给 Web 服务器,该属性有两种取值
  • application/x-www.form-urlencoded (默认)
  • multipart/form-data

HttpServletRequest 接口获取请求参数的方法和描述

方法 描述
String getParameter(String name) 返回由name指定的用户请求参数的值
Enumeration getParameterNames() 返回所有用户请求的参数名
String[] getParameterValues(String name) 返回由name指定的用户请求参数对应的一组值
Map getParameterMap() 返回一个请求参数的Map对象,Map中的键为参数的名称,值为参数名对应的参数值
ServletInputStream getInputStream() 获取上传文件二进制输入流
BufferedReader getReader() 获取上传文件字符缓冲输入流

enctype属性只有在表单向服务器上传文件时才会设置为 multipart/form-data,并且此属性只适用于POST请求方式。

获取网络连接信息

HttpServletRequest接口还为客户端和服务器的网络通信提供了相应的网络连接信息。

方法 描述
getRemoteAddr() 获取请求用户的IP地址
getRemoteHost() 获取请求用户的主机名称
getRemotePort() 获取请求用户的主机所使用的网络端口号
getLocalAddr() 获取Web服务器的IP地址
getLocalName() 获取Web服务器的主机名
getLocalPort() 获取Web服务器所使用的网络端口号
getServerName() 获取网站的域名
getServerPort() 获取URL请求的端口号
getScheme() 获取请求使用的协议
getRequestURL() 获取请求的URL地址
上一篇:JavaWEB11 HttpServletRequest 和 HttpServletResponse


下一篇:HttpServletRequest