系列文章目录

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 之前. 否则可能设置失效。

Servlet API 详解(HttpServlet、HttpServletRequest、HttpServletResponse)相关推荐

  1. ServletFileUpload API详解

    ServletFileUpload1.ServletFileUpload upload=new ServletFileUpload(factory);创建一个上传工具,指定使用缓存区与临时文件存储位置 ...

  2. DiskFileItemFactory API详解

    核心API介绍1.DiskFileItemFactory作用:可以设置缓存大小以及临时文件保存位置. 默认缓存大小是 10240(10k).临时文件默认存储在系统的临时文件目录下.(可以在环境变量中查 ...

  3. Java Servlet关键点详解

    Java Servlet关键点详解 1.理解Servlet的生命周期 Servlet引擎控制着Servlet的生命周期 Servlet的生命周期由以下三个方法进行描述(五个生命周期阶段) 1)初始化 ...

  4. 百度PaddleOCR及云平台OCR API详解及示例

    百度PaddleOCR及云平台OCR API详解及示例 目录 百度PaddleOCR及云平台OCR API详解及示例 使用百度开源的PaddleOCR 多个开源代码库比较

  5. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  6. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization

    <<小白学PyTorch>> 扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积.激活.初始化.正则 扩展之Tensorflow2.0 | 20 TF ...

  7. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】

    目   录 推荐网址 抠图片上的某一角下来 8.2.2 Bitmap引起的OOM问题 8.3.1 三个绘图工具类详解 画线条 8.3.16 Canvas API详解(Part 1) 1.transla ...

  8. EXT核心API详解(二)-Array/Date/Function/Number/String

    EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o )  Number object是否在数组中,找不到返 ...

  9. java nio详解,Java NIO API详解

    Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...

最新文章

  1. delphi项目文件说明
  2. loadrunner 分用户日志
  3. 关于错误error C4430 error C2365 error C2078 error C2440 error C2143的处理。
  4. java整数的因式分解_如何在Java中找到整数的质数-因式分解
  5. SpringBoot集成Google开源图片处理框架,贼好用!
  6. js 指定滚动条位置
  7. 软件系统性能优化策略--SQL优化
  8. Python-JS (JS介绍~JS的基础数据类型)
  9. css入门自学笔记1
  10. WEB前端开发规范文档+CSS命名规范
  11. 树链剖分+线段树 CF 593D Happy Tree Party(快乐树聚会)
  12. M-TOUCH移动端社区论坛类型的网站源码
  13. win 10 好吗?对比与ubuntu,对比于Mac呢?
  14. 【AI视野·今日CV 计算机视觉论文速览 第220期】Wed, 16 Jun 2021
  15. mysql如何查看bufferpool_查看Buffer Pool使用情况--[转]
  16. leaflet 在移动端地图显示不清晰的解决方法
  17. 微信QQ的二维码登录原理js代码解析
  18. 环境变量配置步骤(误删除找回方法)
  19. av_register_all
  20. 来自雪域高原的馈赠——海拔2000米的大凉山高原生态糖心苹果

热门文章

  1. android网络请求撤销,Android OkHttp + Retrofit 取消请求的方法
  2. 77. 组合(JS实现)
  3. java截取中文_java按字节截取带有汉字的字符串的解法(推荐)
  4. java List截取
  5. CSS:实现background-image背景图片全屏铺满自适应
  6. img和image的区别
  7. Redis真的又小又快又持久吗
  8. 为WebService添加描述
  9. iOS itunes 权限分配
  10. USB Compound Device,USB复合设备 ; USB Composite Device,USB组合设备【转】