系列文章目录
Servlet 的运行原理_crazy_xieyi的博客-CSDN博客
如何创建一个Servlet项目(Maven)?_crazy_xieyi的博客-CSDN博客
Tomcat下载、安装及使用介绍_crazy_xieyi的博客-CSDN博客
文章目录
- 一、HttpServlet
- 二、HttpServletRequest
- 三、HttpServletResponse
一、HttpServlet
我们写 Servlet 代码的时候, 首先第一步就是先创建类, 继承自 HttpServlet, 并重写其中的某些方法。
方法名称 | 调用时机 |
init
|
在
HttpServlet
实例化之后被调用一次
|
destory
|
在
HttpServlet
实例不再使用的时候调用一次
|
service
|
收到
HTTP
请求的时候调用
|
doGet
|
收到
GET
请求的时候调用
(
由
service
方法调用
)
|
doPost
|
收到
POST
请求的时候调用
(
由
service
方法调用
)
|
doPut/doDelete/doOptions/...
|
收到其他请求的时候调用
(
由
service
方法调用
)
|
我们实际开发的时候主要重写 doXXX 方法, 很少会重写 init / destory / service 。注意: HttpServlet 的实例只是在程序启动时创建一次. 而不是每次收到 HTTP 请求都重新创建实例。
那么Servlet的生命周期是多少呢?
Servlet在实例化之后调用一次 init 方法;Servlet在每次收到请求的时候调用一次service;Servlet在销毁之前调用一次destory。
二、HttpServletRequest
当
Tomcat
通过
Socket API
读取
HTTP
请求
(
字符串
),
并且按照
HTTP
协议的格式把字符串解析成
HttpServletRequest
对象。
方法 | 描述 |
String getProtocol()
|
返回请求协议的名称和版本
|
String getMethod()
|
返回请求的
HTTP
方法的名称,例如,
GET
、
POST
或
PUT
|
String getRequestURI()
|
从协议名称直到
HTTP
请求的第一行的查询字符串中,返回该请求的 URL
的一部分
|
String getContextPath()
|
返回指示请求上下文的请求
URI
部分
|
String getQueryString()
|
返回包含在路径后的请求
URL
中的查询字符串
|
Enumeration
getParameterNames()
|
返回一个
String
对象的枚举,包含在该请求中包含的参数的名称
|
String getParameter(String
name)
|
以字符串形式返回请求参数的值,或者如果参数不存在则返回 null
|
String[]
getParameterValues(String
name)
|
返回一个字符串对象的数组,包含所有给定的请求参数的值, 如果参数不存在则返回 null
|
Enumeration
getHeaderNames()
|
返回一个枚举,包含在该请求中包含的所有的头名
|
String getHeader(String
name)
|
以字符串形式返回指定的请求头的值
|
String
getCharacterEncoding()
|
返回请求主体中使用的字符编码的名称
|
String getContentType()
|
返回请求主体的
MIME
类型,如果不知道类型则返回
null
|
int getContentLength()
|
以字节为单位返回请求主体的长度,并提供输入流,或者如果 长度未知则返回 -1
。
|
InputStream
getInputStream()
|
用于读取请求的
body
内容
.
返回一个
InputStream
对象
|
通过这些方法可以获取到一个请求中的各个方面的信息,
请求对象是服务器收到的内容
,
不应该修改
.
因此上面的方法也都只是
"
读
"
方法
,
而不是
"
写
"
方法。
三、HttpServletResponse
Servlet
中的
doXXX
方法的目的就是根据请求计算得到相应
,
然后把响应的数据设置到
HttpServletResponse
对象中。然后 Tomcat
就会把这个
HttpServletResponse
对象按照
HTTP
协议的格式
,
转成一个字符串
,
并通过 Socket 写回给浏览器。
方法 | 描述 |
void setStatus(int sc)
|
为该响应设置状态码
|
void setHeader(String name,
String value)
|
设置一个带有给定的名称和值的
header.
如果
name
已经存在
, 则覆盖旧的值
|
void addHeader(String
name, String value)
|
添加一个带有给定的名称和值的
header.
如果
name
已经存在
, 不覆盖旧的值,
并列添加新的键值对
|
void setContentType(String
type)
|
设置被发送到客户端的响应的内容类型
|
void
setCharacterEncoding(String
charset)
|
设置被发送到客户端的响应的字符编码(
MIME
字符集)例如,UTF-8
|
void sendRedirect(String
location)
|
使用指定的重定向位置
URL
发送临时重定向响应到客户端
|
PrintWriter getWriter()
|
用于往
body
中写入文本格式数据
|
OutputStream
getOutputStream()
|
用于往
body
中写入二进制格式数据
|
注意
:
响应对象是服务器要返回给浏览器的内容
,
这里的重要信息都是程序猿设置的
.
因此上面的方
法都是
"
写
"
方法。
对于状态码
/
响应头的设置要放到
getWriter / getOutputStream
之前
.
否则可能设置失效。