代码如下:
package web;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HiServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public HiServlet() {
System.out.println("实例化HiServlet");
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("初始化HiServlet");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
System.out.println("调用HiServlet处理请求");
}
@Override
public void destroy() {
super.destroy();
System.out.println("销毁HiServlet");
}
}
情况下一:默认在第一次访问servlet时实例化
配置文件为:
<servlet>
<servlet-name>hi</servlet-name>
<servlet-class>web.HiServlet</servlet-class
</servlet>
<servlet-mapping>
<servlet-name>hi</servlet-name>
<url-pattern>/hi</url-pattern>
</servlet-mapping>
此时启动Tomcat时,由于没有new,所以没有任何的输出,当在浏览器的地址栏输入请求路径:http://localhost:8080/servlet2/hi
这时会有输出,因为实例化new和初始化init()了,new和init()是由服务器自动执行的,其中new调用了对象的默认构造器,输出结果如下:
实例化HiServlet
初始化HiServlet
调用HiServlet处理请求(此过程可以重复多次)
--------------------------------------------------------------
最后关闭服务器时会自动调用对象的destroy()方法
最后输出:销毁HiServlet
总结:1 2 4 步骤只执行一次,而service()方法根据业务需求可以执行多次
----------------------------------------------------------------------------------------------------------------------------------------------------------
情况下二:启动服务器(Tomcat)时自动servlet时实例化
配置文件为:
<servlet>
<servlet-name>hi</servlet-name>
<servlet-class>web.HiServlet</servlet-class>
<!-- 启动时加载此servlet,中间的数字是加载的顺序,可能有多个servlet要加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hi</servlet-name>
<url-pattern>/hi</url-pattern>
</servlet-mapping>
此时,当启动服务器,会输出如下:
实例化HiServlet
初始化HiServlet
---------------------------------------------
当在浏览器的地址栏输入请求路径:http://localhost:8080/servlet2/hi
再次输出:调用HiServlet处理请求(可以多次)
最后关闭服务器时会自动调用对象的destroy()方法
最后输出:销毁HiServlet
----------------------------------------------根据不同需求看是否需要启动时就实例化servlet