重学Java - Servlet 简明教程
引言
本篇博文为 Servlet 技术的常见概念及相关细节梳理,意在重学 Java 查漏补缺。
博文随时会进行更新,补充新的内容并修正错漏,该系列博文旨在帮助自己巩固扎实 Java 技能。
毕竟万丈高楼,基础为重,借此督促自己时常温习回顾。
一、概念
Servlet 是 JavaEE 规范之一(接口)
Servlet 是 JavaWeb 三大组件之一
- Servlet 程序
- Filter 过滤器
- Listener 监听器
Servlet 是运行在服务器上的一个 Java 程序,它可以接收客户端发来的请求并响应数据给客户端
二、实现 Servlet 程序
2.1、实现 Servlet 接口
编写一个实现 Servlet 接口的类
实现 service 方法,处理请求并响应数据
web.xml 配置 Servlet 程序的访问地址
2.2、继承 HttpServlet
编写类,继承 HttpServlet
重写 doGet 或 doPost 方法
web.xml 配置 Servlet 程序的访问地址
三、生命周期
第一次访问,创建 Servlet 程序时创建
-
执行 Servlet 构造器方法
-
执行 init 初始化方法
每次访问时调用
- 执行 service 方法
web 工程停止时调用
- 执行 destroy 销毁方法
四、继承体系
五、常用类/接口
5.1、ServletConfig
Servlet 程序的配置信息类
Servlet 程序和 ServletConfig 对象均由 Tomcat 负责创建
Servlet 程序默认为第一次访问时创建,每个 Servlet 程序创建时便创建一个对应的 ServletConfig 对象传递给 init 方法
常用方法:
- String getServletName();
- 获取 Servlet 程序别名 <servlet-name> 的值
- String getInitParameter(String val1);
- 获取初始化参数 init-param
- ServletContext getServletContext();
- 获取 ServletContext 对象
5.2、ServletContext
ServletContext 为一个接口,表示 Servlet 上下文对象
一个 web 工程只有一个 ServletContext 对象实例
ServletContext 对象是一个域对象
ServletContext 在 web 工程部署启动时创建,在 web 工程停止时销毁
5.3、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 请求中文乱码问题 - 在获取请求参数之前调用才有效
- httpServletRequest.setCharacterEncoding("UTF-8");
- getMethod()
- 获取请求方法
- setAttribute(key, value)
- 设置域数据
- getAttribute(key)
- 获取域数据
- getRequestDispatcher()
- 获取请求转发对象
5.3.1、请求转发
5.4、HttpServletResponse
只有有请求进入 Tomcat 服务器,Tomcat 便会创建一个 Response 对象传递给 Servlet 程序
可以通过 HttpServletResponse 对象设置需要返回给客户端的信息
通过流将数据传递给客户端
六、HTTP 协议
客户端与服务端之间通信,数据传输需要遵守的规则
- 数据 -> 报文
- 客户端给服务端发送数据 -> 请求
- 服务端给客户端发送数据 -> 响应
6.1、GET 请求
6.2、POST 请求
6.3、响应
6.3.1、常见响应码
响应码 | 英文含义 | 中文含义 |
---|---|---|
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 | 网关超时 |
6.3.2、常见 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 简明教程