在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服务器端程序提交数据请求的方式实现。
- 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地址 |