引言

本篇博文为 Servlet 技术的常见概念及相关细节梳理,意在重学 Java 查漏补缺。
博文随时会进行更新,补充新的内容并修正错漏,该系列博文旨在帮助自己巩固扎实 Java 技能。
毕竟万丈高楼,基础为重,借此督促自己时常温习回顾。

概念

Servlet 是 JavaEE 规范之一(接口)

Servlet 是 JavaWeb 三大组件之一

  • Servlet 程序
  • Filter 过滤器
  • Listener 监听器

Servlet 是运行在服务器上的一个 Java 程序,它可以接收客户端发来的请求并响应数据给客户端

实现 Servlet 程序

实现 Servlet 接口

编写一个实现 Servlet 接口的类

实现 service 方法,处理请求并响应数据

web.xml 配置 Servlet 程序的访问地址

image-20210110171118880

继承 HttpServlet

编写类,继承 HttpServlet

重写 doGet 或 doPost 方法

web.xml 配置 Servlet 程序的访问地址

生命周期

第一次访问,创建 Servlet 程序时创建

  • 执行 Servlet 构造器方法

  • 执行 init 初始化方法

每次访问时调用

  • 执行 service 方法

web 工程停止时调用

  • 执行 destroy 销毁方法

继承体系

image-20210110171532228

常用类/接口

ServletConfig

Servlet 程序的配置信息类

Servlet 程序和 ServletConfig 对象均由 Tomcat 负责创建

Servlet 程序默认为第一次访问时创建,每个 Servlet 程序创建时便创建一个对应的 ServletConfig 对象传递给 init 方法

常用方法:

  • String getServletName();
    • 获取 Servlet 程序别名 <servlet-name> 的值
  • String getInitParameter(String val1);
    • 获取初始化参数 init-param
  • ServletContext getServletContext();
    • 获取 ServletContext 对象

ServletContext

ServletContext 为一个接口,表示 Servlet 上下文对象

一个 web 工程只有一个 ServletContext 对象实例

ServletContext 对象是一个域对象

ServletContext 在 web 工程部署启动时创建,在 web 工程停止时销毁

image-20210110172539728

HttpServletRequest

只要有请求进入 Tomcat 服务器,Tomcat 便会将请求携带的 HTTP 协议信息进行解析并封装到 Request 对象中,传递给 service 方法(doGet 或 doPost)

可以通过 HttpServletRequest 对象获取到所有请求的信息

常用方法:

  • getRequestURI()
    • 获取请求的资源路径
  • getRequestURL()
    • 获取请求的统一资源定位符(绝对路径)
  • getRemoteHost()
    • 获取客户端的 IP
  • getHeader(String val1)
    • 获取请求头
  • getParameter()
    • 获取请求参数
    • getParameterValues()
      • 获取请求参数(多个值时使用 checkbox)
    • 在处理 POST 请求时
      • httpServletRequest.setCharacterEncoding(“UTF-8”);
        设置请求体的字符集为 UTF-8 从而解决 POST 请求中文乱码问题
      • 在获取请求参数之前调用才有效
  • getMethod()
    • 获取请求方法
  • setAttribute(key, value)
    • 设置域数据
  • getAttribute(key)
    • 获取域数据
  • getRequestDispatcher()
    • 获取请求转发对象

请求转发

image-20210110173334154

HttpServletResponse

只有有请求进入 Tomcat 服务器,Tomcat 便会创建一个 Response 对象传递给 Servlet 程序

可以通过 HttpServletResponse 对象设置需要返回给客户端的信息

通过流将数据传递给客户端

image-20210110173508326

HTTP 协议

客户端与服务端之间通信,数据传输需要遵守的规则

  • 数据 -> 报文
  • 客户端给服务端发送数据 -> 请求
  • 服务端给客户端发送数据 -> 响应

GET 请求

image-20210110173730665

POST 请求

image-20210110173848303

响应

image-20210110173926900

常见响应码

响应码 英文含义 中文含义
200 OK 请求成功
301 Moved Permanently 所请求的页面已转移到一个新的 URL
302 Found 所请求的页面已临时转移到一个新的 URL
401 Unauthorized 所请求的页面需要认证登录
403 Forbidden 禁止访问所请求的页面
404 Not Found 服务器无法找到所请求的页面
405 Method Not Allowed 在请求中指定的方法时不允许的
500 Internal Server Error 未完成的请求,服务器遇到了一个意外的情况
502 Bad Gateway 未完成的请求,服务器从上游服务器收到无效响应
503 Service Unavailable 未完成的请求,服务器暂时超载或死机
504 Gateway Timeout 网关超时

常见 MIME 类型

MIME 即 HTTP 协议中的数据类型

  • 全称:Multipurpose Internet Mail Extensions『多功能 Internet 邮件扩充服务』
  • 格式为:『大类型/小类型』并与某一种文件的扩展名相对应
文件类型 扩展名 MIME 类型
超文本标记语言文本 .html text/html
普通文本 .txt text/plain
RTF 文本 .rtf application/rtf
GIF 图形 .gif image/gif
JPEG 图形 .jpeg, .jpg image/jpeg
au 声音文件 .au audio/basic
MIDI 音乐文件 .mid, .midi audio/midi, audio/x-midi
RealAudio 音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG 文件 .mpg, .mpeg video/mpeg
AVI 文件 .avi video/x-msvideo
GZIP 文件 .gz application/x-gzip
TAR 文件 .tar application/x-tar

完整思维导图地址:Servlet 简明教程