关于Servlet简介及其生命周期的简单了解
简介
Servlet生命周期,即阐述Servlet从产生到毁灭的整个过程。
在Servlet产生到消亡的过程中,有三个生命周期函数,初始化方法init(),处理客户请求的方法service(),终止方法destroy()
Servlet的生命周期指的是 Servlet从被Web服务器加载到它被销毁的整个生命过程
Servlet生命周期分为三个阶段:
1:初始化阶段,调用init()方法
2:响应客户请求阶段,调用service()方法
3:终止阶段,调用destory()方法
init方法
在一个Servlet的生命周期中,init方法只会被执行一次,之后无论用户执行多少次请求,都不会在调用该方法。
关于init方法的执行时机,有两种方式可选,一般的是在服务器启动后第一个用户请求改Servlet是调用,你也可以设置该Servlet在服务器启动后自动执行。
init方法负责简单的创建或者加载一些数据,这些数据将用于该Servlet的整个生命周期中。
service方法
当一个客户请求改Servlet时,实际的处理工作全部有service方法来完成,service方法用来处理客户端的请求,并生成格式化数据返回给客户端。
每一次请求服务器都会开启一个新的线程并执行一次service方法,service根据客户端的请求类型,调用doGet、doPost等方法。
service是由web容器来调用的,我们无需对service具体内容做任何处理,service会自动的根据客户端的请求类型去调用doGet、doPost等方法,所以我们只需要做好doGet、doPost方法的实现就可以了。
destroy方法
该方法在整个生命周期中,也是只会被调用一次,在Servlet对象被销毁是调用,在servlet中,我们可以做一些资源的释放等操作,执行destory方法之后的servlet对象,会等待jvm虚拟机的垃圾回收机制择时回收。
doGet、doPost方法
实际的业务处理流程,service根据客户端的请求类型来自动匹配需要执行那个方法
流程-步骤-工作原理:创建对象的时机
Web服务器加载Servlet:Web服务器启动后,它会根据每个工程的web.xml文件去查找该工程的Servlet,并且找到这些Servlet的Class文件所在的地址,将它们载入到Web容器中,不同的Servlet被Web容器加载的次序不同,通过web.xml文件可以配置每个Servlet载入的次序。一般来说,Servlet在服务器启动时就会被Web服务器加载,而JSP文件只有在用户访问到该页面时才会被动态载入。
创建一个Servlet实例:这时会调用该Servlet的构造函数去创建一个具体的对象。
经过以上的两个步骤后,这时如果有客户端请求,Web服务器就会调用Servlet对象的init()方法
接着Web服务器调用Servlet的service()方法去接收请求,处理请求,并把处理结果返回。
销毁:Servlet实例被销毁,这是通过调用Servlet的destory()方法来实现的。
在以上的几个阶段中,Servlet对外提供服务阶段最重要的。service()方法是编程人员真正要关心的方法,因为它才是Servlet真正开始响应客户端请求,并且处理业务逻辑的方法。Service()接收到客户端请求后,再调用Servlet的doGet()方法或者doPost()方法去处理请求。所以在编写自己的Servlet时,一般只需要重写doGet()和doPost()方法,在该方法中去处理客户端请求,并把处理结果返回。
步骤:
1:Web Client向Servlet容器(tomcat)发出Http请求
2:Servlet容器接收Web Client的请求
3:Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
4:Servlet容器创建一个HttpResponse对象
5:Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传递给HttpServlet对象。
6:HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息
7:HttpServlet调用HttpResponse对象的有关方法,生成响应数据
8:Servlet容器把HttpServlet的响应结果传入Web Client。
工作原理:
先解释Servlet接收和响应客户请求的过程,首先客户发送个请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service()方法。Service()方法从ServletRequest对象获得客户请求信息,处理该请求,然后通过ServletResponse对象向客户返回响应信息。
创建Servlet对象的时机
1:Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。
2:在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet 对象的service方法。
3:Servlet Servlet容器在启动时自动创建Servlet,这是由在web.xml文件中为Servlet设置的<load-on-startup>
属性决定的。从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在。
<servlet>
<servlet-name>Init</servlet-name>
<servlet-class>org.xl.servlet.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>