Servlet的管理机制

  • 浏览器每一次拜访服务器都会发送一个信息的申请,每一次发送申请如果是申请操作,那么调用的Servlet对象是惟一的。为了保障Servlet对象是惟一的,就须要让服务器去治理Servlet对象,保障它的唯一性。

治理形式次要有如下两种:(采纳Tomcat服务器)

- 立刻加载:当服务器启动时,底层就会依据web.xml配置文件找到所有Servlet类,并通过反射机制创建对象将对象保留在汇合中,当须要调用Servlet对象,就从该汇合中取出来- 提早加载:当服务器启动时,不会事后创立所有的Servlet对象,而是什么时候用到就什么时候创立
  • Tomcat服务器采纳的是提早加载的形式(这是默认的形式)当Tomcat启动的时候,Tomcat读取了web.xml配置文件,首先读取申请的操作名和对应的名字,也就是配置文件中的url-parttern和servlet-name,将这两个名字存入一个键值对的汇合中保存起来。并且还有另一个键值对汇合是用来存储和servlet-name对应的servlet-class,然而这个不是一开始就加载,而是当须要用Servlet对象的时候再创立,并将创立之后的对象保留到该汇合中。
  • 咱们能够扭转默认加载的形式,只有在web.xml配置文件中,在<servlet>下增加一个配置,<load-on-startup>整数0</load-on-startup>
<servlet>        <servlet-name>test</servlet-name>        <servlet-class>TestController</servlet-class>        <load-on-startup>0</load-on-startup>    </servlet>        <servlet-mapping>        <servlet-name>test</servlet-name>        <url-pattern>/test</url-pattern>    </servlet-mapping>

那么在Tomcat启动时,这个servlet类就会被创立

Servlet生命周期

Tomcat为了更好的治理servlet对象的产生和销毁,提供了三个办法标识Servlet对象的生命周期,别离是init(),service()和destroy();

  • servlet通过调用init()办法进行初始化
    因为servlet对象是单例的,所以init()在servlet第一次创立的时候就被调用,之后就不会再被调用
  • servlet调用service()来解决客户端发送过去的申请
    每一次服务器收到一个操作申请时,服务器就会产生一个线程并调用servlet,执行service()办法
  • servlet通过调用destroy()办法中值
    当servlet生命周期完结时会调用,会调用一次destroy()办法

Servlet的继承关系

  • HttpServlt类继承了一个抽象类GenericServlet
  • GenericServlet实现了三个接口,别离是Servlet、ServletConfig和Serializable
  • ServletConfig接口有四个办法

    • String getServletName();
    • ServletContext getServletContext();
    • String getInitParameter(String var1);
    • Enumeration<String> getInitParameterNames();
  • Servlet接口外面有五个办法

    • void init(ServletConofig var1) throws Exception
    • ServletConfig getServletConfig();
    • void service(ServletRequest var1, ServletResponse var2);
    • void destroy();
    • String getServletInfo();
  • GenericServlet抽象类(实现了ServletConfig和Servlet接口,体现出了缺省适配器模式)

    • 将两个接口中的9个办法都增加了过去,将其中的8个办法都进行了重写,除了Destroy()
    • 多增加了一个init()无参数的办法
    • 留下一个办法是没有具体实现的service办法
    • 增加了log()办法
  • HttpServlet抽象类

    • 存在的目标:
    • 增加了具体的申请形式对应的办法,比方doGet、doPost
    • HttpServlet保留了GenericServlet抽象类的Service,本人增加了一个带两个参数HttpServletRequest和HttpServletResponse的service办法,保留的这个service最终调用了自带的service形式。
    • 本人增加的service办法内容先获取申请的形式,最初调用绝对应的办法比方doGet/doPost执行

本篇文章到此就完结了,次要也是记录我的一个学习过程,请读者带着批评的角度去浏览,如有谬误还望纠正