1. servlet介绍
servlet从宏观上来讲,servlet是连接web服务器和web引用程序的协议。是一种通信规范,只是这个规范是通过接口的形式来体现。
通常来说,servlet是宏观上servlet规范中的一个具体的接口,servlet规范中包含一套接口,而servlet接口仅仅是其中之一。
微观上讲,servlet是servlet接口实现类的一个实例对象,是运行在服务器上的一段java小程序,即server applet,也就是servlet这个单词的由来。
servlet的主要功能是根据用户端的请求,调用服务器端的相关java代码,完成对客户端请求的处理和运算。
1.1 servlet的生命周期
所谓servlet生命周期是指,servlet对象的创建、servlet对象的初始化、servlet对象服务的执行,以及最终servlet对象被销毁的整个过程。
servlet的整个生命周期过程的执行,均由web服务器负责管理。即servlet从创建到服务销毁的整个过程中方法的调用,都是由web服务器负责调用执行,程序员无法控制其执行流程。
但是程序员可以获取到servlet的这些生命周期时间点,并可以指定让servlet做一些具体业务相关的事情。
1.1.1 servlet的执行流程
1.1.2 servlet特征
1. servlet是单例多线程的
2. 一个servlet实例只会执行一次无参构造方法和init()方法,并且是在第一次被访问的时候。
3. 每提交一次对servlet的请求,就会执行一次service()方法。
4. 一个servlet实例只会执行一次destroy()方法,在应用停止执行时.
5. 由于servlet是单例多线程的,所以为保其线程安全性,一般是不会为servlet类定义可修改的成员变量的。因为若有多个线程均可修改这个成员变量,就会出现线程安全问题。
6. 默认情况下,servlet在web容器启动时是不会被实例化的,一般在第一次被访问的时候进行实例化.
1.1.3 web容器启动时创建servlet实例
在servlet注册时,添加<load-on-startup>0</load-on-startup>标签,标签值为正整数类型,数值越大代表的优先级越高。
<servlet>
<!--注册servlet-->
<servlet-name>some-servlet</servlet-name>
<servlet-class>com.servlets.SomeServletDemo</servlet-class>
<load-on-startup>1</load-on-startup> // 启动web容器时,实例化SomeServletDemo类,优先级为1。 </servlet>