Servlet API 详解(HttpServlet、HttpServletRequest、HttpServletResponse)

简介: Servlet API 详解(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 之前 . 否则可能设置失效。


相关文章
|
API
05JavaWeb基础 - Servlet的相关API
05JavaWeb基础 - Servlet的相关API
37 0
|
5月前
|
API
获得servlet相关API,获得请求头和cookie-spring23
获得servlet相关API,获得请求头和cookie-spring23
|
JSON 应用服务中间件 API
【计算机网络】Servlet API重点知识汇总
【计算机网络】Servlet API重点知识汇总
|
6月前
|
JSON Java 应用服务中间件
|
网络协议 应用服务中间件 API
Servlet的常用Api—HttpServletResponse
Servlet的常用Api—HttpServletResponse
128 0
Servlet的常用Api—HttpServletResponse
|
前端开发 网络协议 Java
JavaWeb 速通Servlet(Servlet和HttpServlet)
JavaWeb——Servlet,HttpServlet及其底层原理 内容分享。
82 0
|
JSON 编解码 前端开发
【JavaEE】Servlet的API详解
【JavaEE】Servlet的API详解
97 0
|
API
java202304java学习笔记第六十二天-ssm-获取servlet相关api
java202304java学习笔记第六十二天-ssm-获取servlet相关api
78 0
|
API
java202304java学习笔记第六十二天-ssm-获取servlet相关api
java202304java学习笔记第六十二天-ssm-获取servlet相关api
92 0
Servlet学习(三):通过继承HttpServlet类创建Servlet程序
Servlet学习(三):通过继承HttpServlet类创建Servlet程序
299 0
Servlet学习(三):通过继承HttpServlet类创建Servlet程序