Servlet的生命周期和执行原理
目录:
这次分享的知识点不多,但非常非常的重要
Serlvet的概念
- 概念:运行在服务器端的小程序
- Servlet就是一个接口:定义了java类被浏览器访问到(能被tomcat识别)的规则
- 将来我们要定义一个类,实现Servlet接口,复写方法
- 快速入门:
1 创建JavaEE的项目(这里省略了哈~~老铁们)
2 定义一个类,实现Servlet接口
如图:Serlvet是接口,里面定义了抽象方法,所以需要复写所有的抽象方法
3 实现接口中的抽象方法
4 配置Servlet
<servlet> <!--约束文件中定义的根标签-->
<servlet - name >demo1</servlet- name> <!--Servlet资源的名字-->
<servlet - class>cn. itcast。web. servlet . ServletDemo1</servlet - class> <!--Servlet资源对应的类的全类名-->
</servlet>
<servlet - mapping>
<servlet-name>demo1</servlet- name>
<url-pattern>/demo1</url-pattern> <!--定义后面url查找java类资源所需要虚拟路径-->
</servlet- mapping>
上述为固定格式 后文细讲
设计到JavaEE中最重要知识点之一:反射(架构的灵魂嗷)
<servlet - class>cn. itcast。web. servlet . ServletDemo1</servlet - class>
1.tomcat将全类名对应的字节码文件加载进内存。Class. forNane()
2.创建对象. cls. newInstanceO
3.调用方法- - -service
Servlet执行原理
- 动态资源请求:
浏览器请求动态资源的时候,通过逻辑判断,请求的是服务器端的JAVA类,该Java类没有主方法,依赖服务器执行的,并且遵循规则(Servlet接口) - Servlet执行原理:
1 当服务器接收到客户端浏览器的请求后,解析url路径,获取访问servlet资源路径
2 url获取后先请求web.xml文件,<url-pattern>==》<servlet-name>==》<servlet - class>
3 若2存在,则找到对应的全类名(反射)
4 tomcat会将字节码文件加载进入内存,并创建其对象cls.newInstance()方法
5 调用其方法
如图:
Serlvet的生命周期
历程
1 被创建:执行init方法,只执行一次
- 说明一个Servlet在内存中只存在一个对象,说明Servlet是单例的
* 多用户(多线程)访问时可能会产生线程安全的问题
* 解决:尽量不要在Servlet中定义成员变量(定义了也不要对其修改值) - Servlet创建时间:
* 默认的情况下,第一次被访问的时候,Servlet被创建
* 可以在web.xml中最后配置指定创建Servlet创建时机
* 第一次被访问的时候,创建
*的值为-1(默认)
* 服务器启动时,创建
*的值为0或正数
2 被执行:执行service方法,执行多次
* 每次访问的时候都会被执行一次
3 被销毁:执行destroy方法
* 当Servlet被销毁的时候被执行
* 只有服务器正常关闭的时候才会执行
类似于遗言(destroy)和去世的人(服务器)//不太恰当嗷
Servlet方法:
1 init方法:
- 初始化方法
- Servlet建立时被执行 只执行一次
举例:在init方法里打印一个变量,启动服务器,多次访问得出结果:
事实证明:访问多少次,变量a的值都只是一开始增加了后面没有增加
说明:启动服务器时找到并调用了该方法。
2 service方法:
举例:在service方法里打印另一个变量,启动服务器,多次访问得出结果:
3 destroy方法:
* 服务器正常关闭的时候会执行一次
* 非正常关闭:直接点叉叉关掉
4 ServletConfig:获取ServletConfig对象的配置信息(先不做详解)
5 getServletInfo:获取Servlet的信息(先不做详解)
**
Servlet 3.0
- 从JDK6以后才支持Servlet3.0版本
- 好处:
* 支持注解配置,可以不要web.xml了。 - 步骤:
1 创建JavaEE项目,选择Servlet的3.0以上的版本,可以不创建web.xml
2 定义一个类,实现Servlet接口
3 复写方法
4 在类上使用@WebServlet注解,进行配置
* @WebServlet(“资源路径”)或者@WebServlet(urlpatten=“资源路径”) - 虚拟路径:项目的路径
- 资源路径:就是资源的路径
最后送上一张图:
错了!重来
学习不易,贵在坚持,希望各位码友能越走越远!