Java Web 09 — Servlet(概念、原理、生命周期、Servlet3.0注解配置、体系结构、HTTP_请求消息数据格式)
作者:互联网
文章目录
一、概念
- 概念:运行在服务器端的小程序
Servlet
就是一个接口,定义了java类被浏览器访问到(tomcat识别)的规则。- 将来我们自定义一个类,实现
Servlet
接口,复写方法
二、快速入门
-
创建JavaEE项目
-
定义一个类,实现Servlet接口
-
实现接口中的抽象方法
-
配置
Servlet
。在web.xml
根标签中定义<servlet> <servlet-name>demo01</servlet-name> <servlet-class>day9_1.Servlet.ServletDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo01</servlet-name> <url-pattern>/demo01</url-pattern> </servlet-mapping>
三、Servlet访问原理
- 执行原理
- 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
- 查找
web.xml
文件,是否有对应的<url-pattern>
标签体内容。 - 如果有,则在找到对应的
<servlet-class>
全类名 - tomcat会将字节码文件加载进内存,并且创建其对象
- 调用其方法。
四、Servlet生命周期
4.1 被创建
- 执行
init
方法,只执行1次。Servlet
什么时候被创建?- 默认情况下,第一次被访问时,
Servlet
被创建 - 可以配置执行
Servlet
的创建时机(web.xml
中配置)- 第一次被访问时,创建
<load-on-startup>
的值为负数
- 在服务器启动时,创建
<load-on-startup>
的值为0或正整数
- 第一次被访问时,创建
- 默认情况下,第一次被访问时,
Service
的init
方法,只执行一次,说明在一个Servlet
在内存中只存在一个对象,Servlet
是单例的- 多个线程同时访问时,可能存在线程安全问题。
- 解决:尽量不要在
Servlet
中定义成员变量。即使定义了成员变量,也不要修改值。
4.2 提供服务
- 执行
service
方法,执行多次- 每次访问
Servlet
是,Service
方法都会被调用一次。
- 每次访问
4.3 被销毁
- 执行
destroy
方法,只执行一次Servlet
被销毁时执行。服务器关闭时,Servlet
被销毁。- 只有服务器正常关闭时,才会执行
destroy
方法 destroy
在Servlet
被销毁之前执行,一般用于释放资源。
五、Servlet3.0 注解配置
-
Servlet3.0
-
好处
- 支持注解配置。可以不需要web.xml了。
-
步骤:
-
创建JavaEE项目,选择
Servlet
的版本3.0以上,可以不创建web.xml -
定义一个类,实现
Servlet
接口 -
复写方法
-
在类上使用
@WebServlet
注解,进行配置。@WebServlet("/demo2")
//两种方法都可以,不用创建web.xml文件了 @WebServlet(urlPatterns = "/demo") @WebServlet("/demo2") //源码 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet { String name() default ""; String[] value() default {}; String[] urlPatterns() default {}; int loadOnStartup() default -1; WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }
-
-
六、IDEA与tomcat的相关配置
- IDEA会为每一个tomcat部署的项目单独建立一份配置文件
- 查看控制台的log:Using CATALINA_BASE:
C:\Users\【user】.IntelliJIdea2019.1\system\tomcat\_IDEAworkspace
- 查看控制台的log:Using CATALINA_BASE:
- 工作空间项目 和 tomcat部署的web项目
- tomcat真正访问的是"tomcat部署的web项目","tomcat部署的web项目"对应着"工作空间项目"的web目录下的所有资源
WEB-INF
目录下的资源,不能被浏览器直接访问。- 断点调试:使用“小虫子”启动,debug启动
七、Servlet 体系结构和相关配置
7.1 Servlet体系结构
Servlet
– 接口
|
GenericServlet
– 抽象类
|
HttpServlet
– 抽象类
7.1.1 GenericServlet
- 将
Servlet
接口中其他的方法做了默认空实现,只将Service
作为抽象- 将来定义
Servlet
类时,可以继承GenericServlet
,实现Service()
方法即可。
- 将来定义
7.1.2 HttpServlet
- 对http协议的一种封装,简化操作
- 定义类继承
HttpServlet
- 复写
doGet
/doPost
方法
- 定义类继承
7.2 Servlet相关配置
url-pattern
:Servlet
访问路径:- 一个
Servlet
可以定义多个访问路径:@WebServlet({"/d4","/dd4","/ddd4"})
- 路径定义规则:
/xxx
/xxx/xxx
:多层路径,目录结构*.do
(不能加/,不然会报错)
- 一个
八、HTTP
- 概念:Hyper Text Transfer Protocol 超文本传输协议
- 传输协议:定义了客户端和服务器通信时,发送数据的格式
- 特点:
- 基于TCP/IP的高级协议
- 默认端口号是80
http://www.baidu.com:80
- 基于请求/响应模型,一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能相互交互数据
- 历史版本:
- 1.0:每一次请求响应都会建立一个连接
- 1.1:复用连接
8.1 请求消息数据格式
8.1.1 请求行
- 请求方式 请求url 请求协议/版本
- GET/login.html/1.1
- 请求方式
- HTTP协议中有7种请求方式,常用的有两种
GET
- 请求参数在请求行中,url后
- 请求的url长度有限制
- 不太安全
POST
- 请求参数在请求体中
- 请求的url长度没有限制
- 相对安全
- HTTP协议中有7种请求方式,常用的有两种
8.1.2 请求头
-
客户端浏览器告诉服务器一些信息
-
请求头名称:请求头值
- 常见的请求头:
- User-agent:浏览器告诉服务器,用户访问服务器使用的浏览器版本信息
- 可以在服务器端获取该头的信息,解决浏览器兼容性问题。
- Referer:
http://localhost:8080/day13_servlet_war_exploded/login.html
- 告诉服务器,我(当前请求)从哪里来
- 作用
- 防盗链
- 统计工作
- 作用
- 告诉服务器,我(当前请求)从哪里来
- User-agent:浏览器告诉服务器,用户访问服务器使用的浏览器版本信息
- 常见的请求头:
-
字符串形式:
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: JSESSIONID=E3173D974F16FD2E577A837C378A02A3
Upgrade-Insecure-Requests: 1
8.1.3 请求空行
- 就是用于分割
post
请求头和请求体
8.1.4 请求体(正文)
post
方式,得到的参数数据- 封装
post
请求消息的请求参数
8.2 响应消息数据格式
- 响应行
- 响应头
- 响应空行
- 响应体
标签:8.1,web,Servlet3.0,请求,tomcat,Web,default,数据格式,Servlet 来源: https://blog.csdn.net/weixin_43508544/article/details/99066202