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