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地址 | 
HttpServletResponse 接口
javax.servlet.http.HttpServletResponse 接口的定义为
public interface HttpServletResponse extends ServletResponse
在Servlet API 中,ServletResponse 接口被定义为用于创建响应消息,ServletResponse 对象由Servlet容器在用户每次请求Servlet时创建并传入 Servlet 的 service() 方法中。HttpServletResponse 接口继承自ServletResponse接口,是专用于HTTP协议的子接口,用于封装HTTP响应消息。在HttpServlet类的service()方法中,传入的ServletResponse对象被强制转换为 HttpServletResponse 对象来进行HTTP响应信息的处理。
HttpServletResponse接口提供了具有如下功能类型的方法:
- 设置响应状态的方法
- 构建响应头的方法
- 创建响应正文的方法
设置响应状态
一个完整的HTTP响应报文由响应行、响应头和响应正文组成。
HTTP协议响应报文的响应行由报文协议和版本以及状态码和状态描述构成。状态码由3个十进制数字组成,第1个十进制数字定义了状态码的类型,后两个数字没有分类作用。HTTP状态码共分为5种类型
| 分类 | 分类描述 | 
|---|---|
| 1** | 表示信息,服务器收到请求,需要请求者继续执行操作 | 
| 2** | 表示请求已经成功被服务器接收、理解并接受 | 
| 3** | 表示需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址在本次响应的Location域中指明 | 
| 4** | 表述客户端错误,请求包含语法错误或者无法完成请求 | 
| 5** | 表示服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到当前的软硬件资源无法完成对请求的处理 | 
HttpServletResponse 接口设定状态码的方法及描述
| 方法 | 描述 | 
|---|---|
| setStatus(int sc) | 以指定的状态码响应返回给客户端 | 
| setError(int sc) | 使用指定的状态码向客户端返回一个错误响应 | 
| sendError(int sc,String msg) | 使用指定的状态码和状态描述向客户端返回一个错误响应 | 
| sendRedirect(String location) | 请求的重定向,会设定响应Location报头以及改变状态码 | 
构建响应消息头
在Servlet中,可以通过HttpServletResponse的setHeader()方法来设置HTTP响应消息头,它接收两个参数用于指定响应消息头的名称和对应的值。
常用HTTP响应消息头
| 响应报头名称 | 说明 | 
|---|---|
| Server | 一种标明Web服务器软件及其版本号的头标 | 
| Content-Type | 返回文档时所采用的MIME类型 | 
| Transfer-Encoding | 表示为了达到安全传输或者数据压缩等目的而对实体进行的编码。如chunked编码,该编码将实体分块传送并逐块标明长度,直到长度为0块表示传输结束,这在实体长度未知时特别有用。 | 
| Date | 发送HTTP消息的日期 | 
| Content-Encoding | 用于说明页面在传输过程中已经采用的编码方式 | 
| Content-Length | 响应内容的长度,以字节为单位 | 
| Expires | 特定的一段时间,这段时间后应该将文档认作是过期的,不应该再继续缓存 | 
| Refresh | 多少秒后浏览器应该重新载入页面 | 
| Cache-Control | 用来指定响应遵循的缓存机制,若取值no-cache表示阻止浏览器缓存页面 | 
| Last-Modified | 文档最后被改动的时间。不要直接设置这个报头,而应该提供getLastModified方法 | 
| Location | 浏览器应该重新连接到的URL。一般无须直接设置这个报头,而是使用sendRedirect方法进行设定 | 
| Content-Disposition | 通过这个报头,可以请求浏览器询问用户将响应存储到磁盘上给定名称的文件中 | 
| Set-Cookie | 浏览器应该记录下来的cookie,不要直接设置这个报头,而应该使用 addCookie方法 | 
| WWW-Authenticate | 授权的类型和范围。需要在Authorization 报头中给出 | 
此外对于一些常用的消息头,Servlet API 中也提供了一些特定的方法来进行设置。
| 响应方法 | 说明 | 
|---|---|
| setContentType(String mime) | 设定Content-type消息头 | 
| setContentLength(int length) | 设定Content-Length 消息头 | 
| addHeader(String name,String value) | 新增String类型的值到名为name的http头部 | 
| addIntHeader(Stirng name,int value) | 新增int类型的值到名为name的http头部 | 
| addDateHeader(String name, long date) | 新增long类型的值到名为name的http头部 | 
| addCookie(Coolie c) | 为 Set-Cookie消息头增加一个值 | 
创建响应正文
在Servlet中,向客户端输出的响应数据是通过输出流对象来完成的,HttpServletResponse接口提供了两个获取不同类型输出流对象的方法。
| 方法 | 描述 | 
|---|---|
| getOutputStream() | 返回字节输出流对象 ServletOutputStream | 
| getWrite() | 返回字符输出流对象 PrintWriter | 
Servlet 核心接口的更多相关文章
- Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置
		Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的 ... 
- Hibernate(三)__核心接口和类
		该图显示了核心接口类以及配置文件的关系层次,越往下越偏向底层数据库. 1. hibernate.cfg.xml文件 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下, ... 
- hibernate核心接口,和扩展接口。回顾笔记,以前没记,现在补上,纯手工敲的。
		hibernate核心接口: 所有的hibernate应用都会访问hibernate的5个核心接口 1,Configuration接口 Configuration用于配置并且根启动Hibernate. ... 
- Servlet相关接口和Servlet的生命周期
		http://www.cnblogs.com/luotaoyeah/p/3860292.html Servlet相关接口和Servlet的生命周期 创建一个Servlet类最直接的方式是实现javax ... 
- Hibernate详解(5)——Hibernate核心接口和工作原理
		Hibernate核心接口 Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hi ... 
- spring中基础核心接口总结
		spring中基础核心接口总结理解这几个接口,及其实现类就可以快速了解spring,具体的用法参考其他spring资料 1.BeanFactory最基础最核心的接口重要的实现类有:XmlBeanFac ... 
- JavaEE Servlet 核心方法及生命周期
		做JavaWeb开发,免不了要和Servlet打交道.Servlet是Sun(Oracle)官方定义的一个Web开发规范,所有Servlet开发都必须遵守.自己以前也没有从头做过Web开发,所以这方面 ... 
- Hibernate的核心接口
		Hibernate5个核心接口 所有Hibernate应用中都会访问Hibernate的5个核心接口 Configuration接口:配置Hibernate,根启动Hibernate,创建Sessio ... 
- Spring Boot REST(一)核心接口
		Spring Boot REST(一)核心接口 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) SpringBoot RE ... 
随机推荐
- async/await 与 generator、co 的对比
			之前写过一个分批预加载资源的插件,其实质便是串行执行异步,使用的方法是generator + promise -- 前几天写了一个爬虫,抓取页面的n个页面的音频资源,其也是串行执行异步,但是在使用的a ... 
- C# 枚举器和迭代器
			一.枚举器(enumerator)和可枚举类型(enumeration) 我们都知道foreach语句可以用来遍历数组中的元素,但你有没有想过为什么它可以被foreach处理呢? 这是因为数组可以按需 ... 
- [Luogu 2656] 采蘑菇
			Description 小胖和ZYR要去ESQMS森林采蘑菇. ESQMS森林间有N个小树丛,M条小径,每条小径都是单向的,连接两个小树丛,上面都有一定数量的蘑菇.小胖和ZYR经过某条小径一次,可以采 ... 
- UIKit 框架之UIControl
			前面的UIWebView.UIImageView这些都是视图,显示为主,与用户交互较少,最多也就是通过UIResponder与用户交互.但这样会很麻烦,还要判断点击次数等等问题,那问题就来了:OC中怎 ... 
- 使用IcoMoon生成图标字体
			就我个人而言,往往要想找点什么ICON素材啊,往往都是酱婶滴,先去FontAwesome(在线图标字体库,但资源有限)里面巴拉巴拉,或者其他资源看看有没有合适的.如果没有就去求助我们大UI,笑笑给我来 ... 
- c#中Socket网络通信的入门
			请访问 http://balabiu.com/?p=16 后续本文更新将在这里: 将设计服务器端异步接受客户端连接和客户端消息. 
- 几种流行的AJAX框架对比:Jquery,Mootools,Dojo,ExtJs,Dwr
			1:Jquery 主页:http://jquery.com/ 设计思想:简洁的方案思想,几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性). ... 
- 第16课-数据库开发及ado.net-数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍
			第16课-数据库开发及ado.net 数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍 SQL语句入门(脚本.命令) SQL全名是结构化查询语言(Structur ... 
- Java - Iterator源码解析
			java提高篇(三十)-----Iterator 迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式.Iterator模式是用于遍历集合类的标准 ... 
- BCB 读写Word文档
			void __fastcall TForm1::btn1Click(TObject *Sender) { Variant WordApp,WordDocs,WordDoc; Variant word_ ... 
