美文网首页
JavaWeb开发之Servlet生命周期

JavaWeb开发之Servlet生命周期

作者: 小丸子的呆地 | 来源:发表于2021-07-12 03:58 被阅读0次

Servlet的生命周期的含义

Servlet容器如何去创建Servlet对象,如何给Servlet对象分配资源,如何调用Servlet对象的方法来处理请求,以及如何去销毁Servlet对象的整个过程。

Servlet生命周期的四个阶段

实例化、初始化、就绪、销毁。

实例化

1)指的是容器调用Servlet的构造器,创建Servlet对象。
2)何时实例化?
情况1:容器收到请求之后才创建Servlet对象。在默认情况下,容器只会为Servlet创建唯一的一个实例(多线程,有安全问题。每次请求创建一个线程,由线程去调用方法)。
情况2:容器事先(容器启动时)将某些Servlet(需要配置load-on-startup参数)对象创建好。load-on-startup参数值必须是>=0的整数,越小,优先级越高(即先被实例化)。参数加在web.xml配置文件里的某个<servlet>标签里,如<load-on-startup>1</load-on-startup>
注意事项:注意标签的先后顺序,是有要求的,要符合.xsd文档要求。

    <servlet>
        <servlet-name></servlet-name>
        <servlet-class></servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
初始化

1)指的是容器在创建好Servlet对象之后,会立即调用Servlet对象的init方法。
2)init方法:
①init方法只会执行一次。
②GenericServlet已经实现了init方法,该方法会将容器创建好的ServletConfig对象作为参数传递给init方法。
③ServletConfig对象提供了一个getInitParameter方法来访问Servlet的初始化参数。

  • step1:在web.xml文件里,使用<init-param>来配置初始化参数,加在某个<servlet>标签里。
        <servlet>
          <init-param>
            <param-name>name</param-name>
            <param-value>jack</param-value>
          </init-param>
        </servlet>

  • step2:使用String getInitParameter(String paraName)获取初始化参数。

④如果GenericServlet的init方法提供的初始化操作不满足需要,可以覆盖(override) init()方法,覆盖的是不带参数的,对有参数的无影响。有参数的init方法执行时,同时无参的也被执行(有参的init方法里调用了无参的init方法),叫钩子方法。

就绪

1)就绪指的是Servlet对象可以接受调用了,容器收到请求之后,会调用Servlet对象的service方法来处理,且可以被执行多次。
2)HttpServlet已经实现了service方法,该方法会依据请求类型(get/post)分别调用doGet或doPost方法。所以我们在写一个Servlet时,有两种选择:
选择一:覆盖 HttpServlet的doGet,doPost方法
选择二:覆盖 HttpServlet的service方法

销毁

销毁指的是Servlet容器在销毁Servlet对象之前,会调用destroy方法,且只会执行一次。

Servlet生命周期图

image.png

Servlet生命周期相关的几个接口与类

1)Servlet接口:

  • ①init(ServletConfig config)//有参的init方法
  • ②service(ServletRequest req,ServletResponse res)
  • ③destroy()

2)GenericServlet抽象类:实现了Servlet接口中的init,destroy方法
3)HttpServlet抽象类:继承了GenericServlet抽象类,实现了service方法
4)ServletConfig接口:String getInitParameter(String paraName)
5)ServletRequest接口是HttpServletRequest的父接口
6)ServletResponse接口是HttpServletResponse的父接口

相关文章

网友评论

      本文标题:JavaWeb开发之Servlet生命周期

      本文链接:https://www.haomeiwen.com/subject/aubkpltx.html