Servlet 简明教程
2021-01-11 11:32:32 6 举报
AI智能生成
自己学习 Servlet 过程中进行的总结 开放了免费克隆,希望可以获得点赞支持,多谢你的举手之劳
作者其他创作
大纲/内容
概念
Servlet 是 JavaEE 规范之一(接口)
Servlet 是 JavaWeb 三大组件之一
Servlet 程序
Filter 过滤器
Listener 监听器
Servlet 是运行在服务器上的一个 Java 程序,它可以接收客户端发来的请求并响应数据给客户端
实现 Servlet 程序
编写一个实现 Servlet 接口的类
实现 service 方法,处理请求并响应数据
web.xml 配置 Servlet 程序的访问地址
<servlet></servlet>
- 为 Tomcat 配置 Servlet 程序
<servlet-name></servlet-name>
- 为 Servlet 程序配置别名(一般为类名)
<servlet-class></servlet-class>
- 配置 Servlet 程序的全类名
<init-param></init-param>
- 配置初始化参数
(每个参数均需要一对 <init-param></init-param>)
<param-name></param-name>
- 参数名
<param-value></param-value>
- 参数值
<servlet-mapping></servlet-mapping>
- 为 Servlet 程序配置访问地址
<servlet-name></servlet-name>
- 将当前配置地址授予指定 Servlet 程序
<url-pattern></url-pattern>
- 配置访问地址
/ 服务器解析时表示为 http://ip:port/project
/source 服务器解析时表示为 http://ip:port/project/source
通过 ip 定位服务器
通过 port 定位 Tomcat
通过 project 定位工程
通过 source 定位具体 Servlet 程序
生命周期
执行 Servlet 构造器方法
执行 init 初始化方法
执行 service 方法
执行 destroy 销毁方法
请求分发处理
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
httpServletRequest.getMethod();
public void doGet() {}
public void doPost() {}
继承 HttpServlet 实现 Servlet 程序
(在实际项目开发中)
(在实际项目开发中)
编写类,继承 HttpServlet
重写 doGet 或 doPost 方法
web.xml 配置 Servlet 程序的访问地址
继承体系
<javax.servlet>
Interface Servlet
↑ 实现接口
<javax.servlet>
Class GenericServlet
↑ 继承
<javax.servlet.http>
Class HttpServlet
↑ 继承
Class UserDefind extend HttpServlet
Interface Servlet
↑ 实现接口
<javax.servlet>
Class GenericServlet
↑ 继承
<javax.servlet.http>
Class HttpServlet
↑ 继承
Class UserDefind extend HttpServlet
Servlet 接口,负责定义 Servlet 程序的访问规范
GenericServlet 类实现了 Servlet 接口(空实现)
持有一个 ServletConfig 类的引用,对 ServletConfig 的使用定义了相关方法
持有一个 ServletConfig 类的引用,对 ServletConfig 的使用定义了相关方法
HttpServlet 抽象类实现了 service 方法
并实现了请求的分发处理 String method = req.getMethod();
并实现了请求的分发处理 String method = req.getMethod();
GET - doGet()
POST - doPost
UserDefind 用户自定义的 Servlet 程序,只需要根据业务需求重写 doGet 或 doPost 方法
若重写 init 方法,须在首行添加 super.init(config);
常用类/接口
ServletConfig
- Servlet 程序的配置信息类
- Servlet 程序和 ServletConfig 对象均由 Tomcat 负责创建
- Servlet 程序默认为第一次访问时创建
每个 Servlet 程序创建时便创建一个对应的 ServletConfig 对象传递给 init 方法
String getServletName();
- 获取 Servlet 程序别名 <servlet-name> 的值
String getInitParameter(String var1);
- 获取初始化参数 init-param
ServletContext getServletContext();
- 获取 ServletContext 对象
ServletContext
- ServletContext 为一个接口,表示 Servlet 上下文对象
- 一个 web 工程只有一个 ServletContext 对象实例
- ServletContext 对象是一个域对象
- ServletContext 在 web 工程部署启动时创建
在 web 工程停止时销毁
获取 web.xml 中配置的上下文参数
- <context-param></context-param>
- 属于整个 web 工程
- (每个参数均需要一对 <context-param></context-param>)
<param-name></param-name>
- 参数名
<param-value></param-value>
- 参数值
ServletContext servletContext = getServletContext();
- servletContext.getInitParameter(String var1);
获取当前工程路径
- /project
ServletContext servletContext = getServletContext();
- servletContext.getContextPath();
获取工程部署后在服务器硬盘上的绝对路径
- 映射到 web 目录(WEB-INF)
像 Map 一样存取数据
ServletContext servletContext = getServletContext();
- servletContext.getAttribute(String var1);
- servletContext.setAttribute(String var1, Object var2);
- servletContext.removeAttribute(String var1);
HttpServletRequest
- 只要有请求进入 Tomcat 服务器
Tomcat 便会将请求携带的 HTTP 协议信息进行解析并封装到 Request 对象中
传递给 service 方法(doGet 或 doPost) - 可以通过 HttpServletRequest 对象获取到所有请求的信息
getRequestURI()
- 获取请求的资源路径
getRequestURL()
- 获取请求的统一资源定位符(绝对路径)
getRemoteHost()
- 获取客户端的 IP
getHeader(String val1)
- 获取请求头
getParameter()
- 获取请求参数
getParameterValues()
- 获取请求参数(多个值时使用)
getMethod()
- 获取请求方法
setAttribute(key, value)
- 设置域数据
getAttribute(key)
- 获取域数据
getRequestDispatcher()
- 获取请求转发对象
请求转发
指服务器收到请求后,从一个资源跳转到另一个资源的操作
指服务器收到请求后,从一个资源跳转到另一个资源的操作
- 浏览器地址栏地址未变化
- 视为一次请求
- 共享 Request 域中数据
- 可以转发到 WEB-INF 目录下
- 不可以访问 web 工程以外的资源
RequestDispatcher requestDispatcher = httpServletRequest.getRequestDispatcher(String val1);
- 请求转发必须以 / 开头,/ 表示 http://ip:port/project/,映射到 web 目录(WEB-INF)
<base> 标签 <base href="http://ip:port/project/source/">
- 设置当前页面中所有相对路径工作时参照的地址,以参照地址进行跳转
- 设置于 <head></head> 标签对中,通常设置在 <title> 标签之下
- href 属性即参照的地址值
▲ 末尾 / 不可省略,代表路径(省略即视为资源)
HttpServletResponse
- 只要有请求进入 Tomcat 服务器
Tomcat 便会创建一个 Response 对象传递给 Servlet 程序 - 可以通过 HttpServletResponse 对象设置需要返回给客户端的信息
- 通过流将数据传递给客户端
输出流
- 字节流 getOutputStream() 常用于下载(传递二进制数据)
- 字符流 getWrite() 常用于回传字符串(常用)
请求重定向
指客户端向服务端发起请求,服务端告知客户端访问新地址
指客户端向服务端发起请求,服务端告知客户端访问新地址
- 浏览器地址栏发生变化
- 两次请求
- 不共享 Request 域中数据
- 不能访问 WEB-INF 下的资源
- 可以访问 web 工程外的资源
HTTP 协议
客户端与服务端之间通信,数据传输需要遵守的规则
- 数据 -> 报文
- 客户端给服务端发送数据 -> 请求
▲ GET 请求
▲ POST 请求 - 服务端给客户端发送数据 -> 响应
GET 请求
- 请求行
▲ 请求方式
▲ 请求资源路径 [?请求参数]
▲ 请求协议版本
- 请求头
请求行
GET /project/source HTTP/1.1
--------------------------------------------
GET /project/source HTTP/1.1
--------------------------------------------
- 请求方式 GET
- 请求资源路径 /project/source
- 请求协议版本 HTTP/1.1
请求头(key: value)
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 3.0.30729; Media Center PC 6.0)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
-----------------------------------------------------------------------------------------------------------------------------------------------
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 3.0.30729; Media Center PC 6.0)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
-----------------------------------------------------------------------------------------------------------------------------------------------
- Accept:告知服务端,客户端可以接收的数据类型
- Accept-Language:告知服务端,客户端可以接收的语言类型
▲ zh-CN 中文中国
▲ en-US 英文美国 - User-Agent:浏览器信息
- Accept-Encoding:告知服务端,客户端可以接收的数据编码(压缩)格式
- Host:表示请求服务端的 ip:port
- Connection:告知服务端如何处理请求连接
▲ Keep-Alive 告知服务端回传数据不要马上关闭,保持一小段时间的连接
▲ Closed 马上关闭
POST 请求
- 请求行
▲ 请求方式
▲ 请求资源路径
▲ 请求协议版本 - 请求头
- 空行
- 请求体
请求行
POST /project/source HTTP/1.1
--------------------------------------------
POST /project/source HTTP/1.1
--------------------------------------------
- 请求方式 POST
- 请求资源路径 /project/source
- 请求协议版本 HTTP/1.1
请求头(key: value)
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/project/source/index.html
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 3.0.30729; Media Center PC 6.0)
Content-Type: application/x-www-form-urlencoded
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 26
Connection: Keep-Alive
Cache-Control: no-cache
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/project/source/index.html
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 3.0.30729; Media Center PC 6.0)
Content-Type: application/x-www-form-urlencoded
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 26
Connection: Keep-Alive
Cache-Control: no-cache
---------------------------------------------------------------------------------------------------------------------------------------------------------------
- Referer:表示请求发起时浏览器地址栏中的地址
- Content-Type:表示发送的数据类型
▲ application/x-www-form-urlencoded 表示提交的数据格式为 name=value&sex=male 并对其进行 url 编码(将非英文内容转换为 %xx%xx 格式)
▲ multipart/form-data 表示以多段的形式提交数据给服务端(以流的形式提交,用于上传)
- Content-Length:表示发送的数据的长度
- Cache-Control:表示如何控制缓存(no-cache 不缓存)
请求体
username=name&password=word 发送给服务端的数据
username=name&password=word 发送给服务端的数据
响应
- 响应行
▲ 响应协议版本
▲ 响应状态码
▲ 响应状态描述符 - 响应头
- 空行
- 响应体
响应行
HTTP/1.1 200 OK
HTTP/1.1 200 OK
响应体
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"375-1578903773217"
Last-Modified: Sat, 9 Jan 2021 08:22:53 GMT
Content-Type: text/html
Conten-Length: 375
Date: Sat, 9 Jan 2021 08:38:42 GMT
-------------------------------------------------
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"375-1578903773217"
Last-Modified: Sat, 9 Jan 2021 08:22:53 GMT
Content-Type: text/html
Conten-Length: 375
Date: Sat, 9 Jan 2021 08:38:42 GMT
-------------------------------------------------
- Server:表示服务器信息
- Content-Type:表示响应体的数据类型
- Content-Length:表示响应体的长度
- Date:请求响应的时间(格林威治时间)
空行
响应体
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/project/source" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Submit">
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/project/source" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Submit">
</form>
</body>
</html>
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
收藏
0 条评论
下一页