Servlet对象的生命周期

1.Servlet对象的生命周期是由谁管理的?程序员可以干涉吗?

  Servlet对象的生命周期包括Servlet对象的创建,方法的调用以及Servlet对象的销毁等过程。

  它的生命周期由Web容器来管理,程序员无权干涉。

2.描述Servlet对象的生命周期

  1)用户在浏览器中输入URL:http://localhost:8080/prj-servlet-03/testLifeCycle

  2)web容器截取请求路径:/prj-servlet-03/testLifeCycle

  3)web容器在容器上下文中找请求路径所对应的Servlet对象

  4)若没有找到Servlet对象

    4.1)通过web.xml文件中相关的配置信息,得到请求路径/testLifeCycle对应的完整类名

    4.2)通过反射机制,调用Servlet对象的无参构造方法完成实例化

    4.3)web容器调用Servlet对象的init方法完成初始化

    4.4)web容器调用Servlet对象的service方法提供服务

  5)若找到了Servlet对象

    5.1)web容器直接调用Servlet对象的service方法提供服务

  6)web容器关闭/webapp重新部署/Servlet对象长时间没有用户再次访问 的时候,web容器会销毁Servlet对象,在销毁之前调用Servlet对象的destroy方法

3.关于Servlet对象生命周期的几个总计和注意事项

  1)Servlet对象的构造方法、init方法、destroy方法只执行一次

  2)Servlet对象的service方法,用户请求一次便执行一次

  3)init方法执行的时候,Servlet对象已经创建好了

  4)destroy方法执行的时候,Servlet对象还没有被销毁

4.关于Servlet对象的线程安全问题

  Servlet对象是单实例的(构造方法,init方法只调用一次,所有用户公用一个Servlet对象),但是不符合单例模式(24设计模式之一,单例模式的构造方法是私有的)。

  而tomcat服务器支持多线程(多用户),所以Servlet对象是在单实例多线程环境下运行的。

  若Servlet对象中有实例变量,并且实例变量涉及修改操作,那么便存在线程安全问题,解决方法是不使用实例变量,使用局部变量。

5.默认情况下,Servlet对象在web服务器启动阶段不会被实例化。若希望再web服务器(tomcat等)启动阶段实例化Servlet对象,可以再web.xml中进行配置。

<servlet>
    <servlet-name></servlet-name>
    <servlet-class></servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name></servlet-name>
    <url-pattern></url-pattern>
</servlet-mapping>

在上面的<load-on-startup></load-on-startup>标签中设置自然数就可以决定Servlet对象启动时的优先级,自然数越小优先级越高。

6.访问Servlet时的URL配置

  如上面的xml文本,

  <servlet-name></servlet-name>是Servlet对象的注册名称,随意编写,保证上下两个<servlet-name></servlet-name>标签一致即可

  <servlet-class></servlet-class>是Servlet对象的完整类名,通过反射机制创建Servlet对象

  <url-pattern></url-pattern>是Servlet对象的访问路径配置:必须以"/"开头,且不包含项目名称,注意同一个Servlet可以被映射到多个URL上

    缺省Servlet:<url-pattern>/</url-pattern>

      缺省Servlet用于处理所有其他Servlet都不处理的访问请求

    在URL中使用通配符*:

      只能有两种固定的格式:一种格式是"*.扩展名",另一种格式是以正斜杠(/)开头并以"/*"结尾。例如 /abc/* 、 /* 、 *.do 

7.Servlet对象实例化后,Servlet对象被存储到哪里了

  大多数web容器将Servlet对象以及对应的url-pattern存储到Map集合中了:Map<string,Servlet>

  例如:key         value

     /login      LoginServlet对象引用

        /delete   DeleteServlet对象引用

8.web服务器启动时解析web.xml文件,在这个过程总做了什么

  将web.xml文件中的url-pattern和对应的Servlet完整类名存储到Map集合中:Map<string,string>

  例如:key          value

     /login    com.bjpowernode.javaweb.servlet.LoginServlet

     /delete    com.bjpowernode.javaweb.servlet.DeleteServlet

9.Servlet接口中的这些方法编写什么代码

  1)无参构造方法:不考虑写代码,不常用

  2)init方法:Servlet对象创建时需要初始话一些东西时,在这里编写代码

  3)service方法:必然重新,这里写业务逻辑

  4)destroy方法:Servlet对象销毁时执行的代码,不常用

posted @ 2021-03-08 16:03  单纯的桃子  阅读(231)  评论(0编辑  收藏  举报