谈servlet生命周期

        servlet的生命周期是由容器进行管理,而容器就是所谓的应用服务器或者web服务器,但是咱们这里是指Tomcat服务器。所以运行在Tomcat上的servlet的生命周期就是Tomcat在管理。这里生命周期主要经历三个阶段。

        第一个就是init()初始化这个方法:这个方法的其实是servlet接口中的一个抽象方法,在servlet的实现类GenericServlet中实现,在GenericServlet中对init方法的实现其实就是一个空的方法体,如果你自己有任何初始化只需要在自己的Servlet中对init方法进行重写,因为Servlet继承了HttpServlet,而HttpServlet又继承了GenericServlet,所以可以直接在自己的Servlet中直接重写init方法。当客户端浏览器第一次发送请求Servlet 时,Tomcat容器会实例化这个Servlet(这里只是会实例化一次,请求结束后,会把这个实例对象保存在缓存当中,下个请求会优先到缓存中找实例对象),然后实例会调用init这个方法进行初始化。(注意这里的init方法并不是进行实例对象,而是初始化对象)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
		 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
		 version="4.0">
		 
		 <servlet>
			<servlet-name>helloworld</servlet-name>
			<servlet-class>com.bjsxt.servlet.HelloWorld</servlet-class>
		 </servlet>
		 <servlet-mapping>
			<servlet-name>helloworld</servlet-name>
			<url-pattern>/hello</url-pattern>
		 </servlet-mapping>
</web-app>

        第二个就是service服务:其实Servlet是基于单进程多线程运行的,我们在前期工作中会在web.xml(项目的配置文件)文件中配置Servlet与URL的绑定,Tomcat会对请求的解析获取到请求行、请求头、请求体,然后放入HttpRequest中。首先Tomcat会根据解析到URL在缓存中寻找对应的实例对象,如果找到并会在一个新的线程中执行Service方法。如果在缓存中找不到对应的实例对象,那么Tomcat就会实例新的对象,会在web.xml文件中找到对应的项目名利用JAVA的反射机制进行实例化。这时候根据请求时基于什么方式进行发送,这里假设是根据get方法进行发送的,那么在自己的Service中重写了toget方法,所以就会产生响应。

public class HelloWorld extends HttpServlet
{
	public void doGet(HttpServletRequest request,HttpServletResponse response)
	throws ServletException,IOException
	{
		PrintWriter out=response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
		out.println("<HTML>");
		out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
		out.println("<BODY>");
		out.println("<font color=blue>HelloWorld</font>");
		out.println("</BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
		
	
	
	}
}

        第三个就是destroy()销毁:当Tomcat关闭时会销毁缓存中的Servlet实例对象,但是在销毁之前会调用一次destroy()方法,这里需要注意下destroy()方法并不是用来销毁Servlet对象的,只是用来释放资源的。跟init方法一样,这个destroy也是在GenericServlet中进行实现,也是一个空方法体,可以在自己的Servlet中进行重写。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值