系列文章目录
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 之前 . 否则可能设置失效。
版权声明:本文为crazy_xieyi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。