Servlet学习笔记(一)--Servlet生命周期

    用实例来观察servlet方法的调用顺序,创建一个类实现servlet接口:

package com.servlet.HelloServlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class servlet_lifecycle implements Servlet{
	
	@Override
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("init方法被调用");
		
	}
	
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		System.out.println("service方法被调用");
		
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy方法被调用");
		
	}

	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

}

  

  • 修改web.xml配置文件
      写好servlet的class代码之后,还要修改WebContent文件夹下的WEB-INF文件夹里面的web.xml配置文件。打开文件夹之后突然发现没有web.xml文件.....解决方法如下:
      鼠标移动到项目名称上右键,点击Java EE Tools,点击Generate Deployment Descriptor Stub,至此web.xml文件就自动生成了。

  • 在xml文件中添加以下内容

    • <servlet>标签的作用是告诉tomcat该应用里有这个servlet,servlet名字以及类的全路径
    • <servlet-mapping>标签的作用是注册映射,根据<servlet-name>找到具体的servlet,<url-pattern>是写在地址栏上的path
    • <servlet>和<servlet-mapping>标签中的<servlet-name>要相同
    • <servlet-class>标签中填写的是自己写的servlet类的全路径
  • 修改好xml文件之后就可以在服务器运行项目了

    第一次在浏览器输入地址

    打开第二个浏览器窗口访问

    打开第三个浏览器窗口访问

    正常关闭服务器

  由此可见,默认情况下,init()方法只会在创建类实例的时候调用一次,servlet只会初始化一次,接下来无论再打开多少次该页面,都不会再调用init()方法。而service()可以被调用多次,一个客户端请求,就会调用一次service()。当servlet被销毁时,执行destroy()方法。要注意的是,关闭浏览器并不会成功调用destroy方法,因为浏览器是客户端,只有关闭服务器端才会调用该方法。将项目从tomcat上移除,或者正常shutdown tomcat都会使destroy方法被调用。
  如果需要在init()方法中执行一些运算量大、耗时长的工作,可以把init()方法的执行时间提前。

<servlet>
  	<servlet-name>servlet_lifecycle</servlet-name>
  	<servlet-class>com.servlet.HelloServlet.servlet_lifecycle</servlet-class>
  	<load-on-startup>3</load-on-startup>
</servlet>

  在web.xml的servlet标签内,加上load-on-startup标签,里面的数字要是正数或0,数字越小越早被初始化。

    init()方法提前调用结果如下,在服务器开启时就执行初始化:

猜你喜欢

转载自www.cnblogs.com/cy708/p/10177003.html