Servlet简介-声明周期(一)

156 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情 >>

Servlet简介

概念

运行在服务器端的小程序

  • Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。

    • 将来我们自定义一个类,实现Servlet接口或Servlet的子类,覆写方法。

运行原理

 <!-- web.xml配置Servlet -->
<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>cn.web.servlet.ServletDemo</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>demo</servlet-name>
    <url-pattern>/demo</url-pattern>
</servlet-mapping>
  1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径;
  2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容;
  3. 如果有,则在找到对应的<servlet-class>全类名;
  4. tomcat会将字节码文件加载进内存,并且创建其对象;
  5. 调用其方法;

生命周期

1.初始化阶段

当客户端向Servlet容器发出HTTP请求要求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象,如果有,则直接使用该Servlet对象,如果没有,则创建Servlet实例对象,然后通过调用init()方法实现Servlet的初始化工作。需要注意的是,在Servlet的整个生命周期内,它的init()方法只能被调用一次。

  • 第一次请求时,创建Servlet实例对象;
  • 调用init()方法初始化。(不是第一次时直接使用Servlet对象)

2.运行阶段

这是Servlet声明周期中最重要的阶段,在这个阶段中,Servlet容器会为这个请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法。

service()方法从ServletRequest对象中获得客户请求信息并处理该请求,通过ServletResponse对象生成响应结果。

在Servlet的整个生命周期内,对于Servlet的每一次访问请求,Servlet容器都会调用一次Servlet的service() 方法,并且创建新的ServletRequest 和 ServletResponse 对象,也就是说,service() 方法在Servlet 的整个生命周期中会被调用多次。

  • 一次请求就调用一次service()方法,并创建新的请求和响应对象作为参数传入;

3.销毁阶段

当服务器关闭或Web应用被移除出容器时,Servlet随着Web应用的关闭而销毁。在销毁Servlet之前,Servlet容器会调用 Servlet 的 destory() 方法,以便让 Servlet 对象释放它所占用的资源。在Servlet的整个生命周期中,destory() 方法也只会被调用一次。

需要注意的是,Servlet 对象一旦创建就会驻留在内存中等待客户端的访问,直到服务器关闭或 Web 应用被移除出容器时,Servlet 对象才会销毁。

  • 服务器关闭或应用销毁时,调用 destory() 方法销毁;