1.Servlet
Servlet是运行在服务器上的小程序,主要用于处理客户端传来的HTTP请求,它可以访问服务器的资源,如文件、数据库等,再根据请求完成相应的业务逻辑处理后返回响应。Servlet的执行过程主要有以下几个步骤。
(1)客户端发送请求,服务器将客户端的请求封装成请求对象,同时生成针对客户端的响应对象。
(2)服务器根据客户端的请求URL,在底层web.xml文件中找到相应的Servlet类。
(3)Servlet从请求对象中取得各种请求信息,并完成业务逻辑的处理。
(4)Servlet将处理结果封装在响应对象中输出给服务器。
(5)服务器将Servlet生成的响应对象解析成响应报文输出给客户端的浏览器。
2.生命周期
Servlet的生命周期是指一个Servlet对象从创建到销毁的过程,它定义了一个Servlet被初始化、销毁,以及接收请求、响应请求、提供服务的具体规则。
按照功能的不同,Servlet的生命周期大致可以分成3个阶段,分别是Servlet对象的初始化、Servlet对象提供服务和Servlet对象的销毁。
(1)Servlet对象的初始化:init()方法
在默认情况下,服务器在第一次接收到客户端发送的请求时,会解析请求并创建对应的Servlet对象。创建Servlet对象之后,服务器会调用init()方法对其进行初始化。需要注意的是,一个Servlet对象无论被请求多少次,只会被创建一次。也就是说,在Servlet的整个生命周期中,init()方法只会被执行一次。
(2)Servlet对象提供服务:service()方法
完成 Servlet 对象的初始化之后,服务器会调用 service()方法处理请求,同时会创建一个请求(ServletRequest)对象和一个响应(ServletResponse)对象,并把它们作为参数传入service()方法。service()方法可以通过 ServletRequest 对象获取客户端的各种请求信息,从而根据请求类型调用doGet()或者doPost()等方法。完成业务逻辑的处理之后,service()方法继续通过ServletResponse对象来设置响应信息。Servlet每次收到用户请求都会调用service()方法,也就是说,在Servlet的整个生命周期中,service()方法可以被执行多次。
(3)Servlet对象的销毁:destroy()方法
Web应用在卸载或服务器停止执行时会销毁Servlet对象,销毁之前服务器会调用destroy()方法执行诸如释放缓存、关闭连接、保存数据等操作。在 Servlet 的整个生命周期中,destroy()方法也只会被执行一次。
Servlet的生命周期如图2-35所示。
图2-35 Servlet的生命周期
3.Servlet接口
Servlet接口是编写Servlet应用时必须实现的一个接口,它位于javax.servlet包中,Servlet接口中定义的方法如表2-1所示。
表2-1 Servlet接口定义的方法
init()、service()和destroy() 3个方法是与Servlet生命周期相关的,它们会在某个特定的时刻被调用,具体的调用顺序如下。
(1)当一个Servlet被构造时,调用init()方法完成初始化。
(2)当客户端发出请求时,调用service()方法提供服务。
(3)当Servlet服务完成时,调用destroy()方法进行销毁。