servlet生命周期方法
Servlet的生命周期:
init:被创建
只被执行一次,默认当该servlet被创建时,执行,一般用于加载资源(先创建servlet,才执行init)
创建servlet:
1.服务器一启动时就创建servlet
<load-on-starup></load-on-starup>标签中值为0或者是正数
2.第一次访问servlet时才创建servlet
当<load-on-starup></load-on-starup>标签的值为复数或者是不配置该标签时
web.xml配置:
<!-- 配置servlet路径--> <servlet> <servlet-name>demo2</servlet-name> <servlet-class>servlet.ServletDemo2</servlet-class> <!-- 配置执行的servlet的创建时机--> <!-- 当该标签的值为0或者是正数时,服务器一启动就会创建servlet--> <!-- 当该标签的值为负数或者是不配置该标签时,第一次访问servlet时创建该servlet--> <load-on-startup>-1</load-on-startup> </servlet>
线程安全问题:servlet的init方法,只执行一次,说明servlet在内存中只存在一个对象,是单例的
问题:多个用户同时访问,可能存在线程安全问题
解决:尽量不要在servlet中定义成员变量,即使定义了成员变量,也不要修改它的值,如果需要变量则尽量在servlet里的方法中定义局部变量
service:提供服务
可以执行多次,每当该servlet被访问时就会执行一次
destroy:被销毁
只被执行一次,当服务器关闭时执行,一般用于释放资源(先执行destroy方法,才销毁servlet)
只有正常关闭servlet才会执行destroy方法,没有正常关闭则不能调用destroy方法
getServletConfig:获取servlet的配置对象
调用时执行
getServletInfo:获取servlet的信息,比如版本号,作者等
调用时执行
servlet代码:
ServletDemo2.class:
package servlet; import javax.servlet.*; import java.io.IOException; public class ServletDemo2 implements Servlet { /** * 提供初始方法 * 在servlet被创建时执行 * @param servletConfig * @throws ServletException */ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("创建方法 init"); } /** * 获取servlet的配置对象 * @return */ @Override public ServletConfig getServletConfig() { return null; } /** * 提供服务方法 * 每一次servlet被访问时执行,可以执行多次 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("服务方法 service"); } /** * 获取servlet的一些信息,比如版本,作者等 * @return */ @Override public String getServletInfo() { return null; } /** * 销毁方法 * 在服务器被正常关闭时执行,只会执行一次 */ @Override public void destroy() { System.out.println("销毁方法 destroy"); } }
web.xml:
<!-- 配置servlet路径--> <servlet> <servlet-name>demo2</servlet-name> <servlet-class>servlet.ServletDemo2</servlet-class> <!-- 配置执行的servlet的创建时机--> <!-- 当该标签的值为0或者是正数时,服务器一启动就会创建servlet--> <!-- 当该标签的值为负数或者是不配置该标签时,第一次访问servlet时创建该servlet--> <load-on-startup>-1</load-on-startup> </servlet> <!-- 配置servlet映射路径--> <servlet-mapping> <servlet-name>demo2</servlet-name> <url-pattern>/demo2</url-pattern> </servlet-mapping>