一.对servlet来说,它的生命周期指的就是从创建直到毁灭的整个过程。
其流程可简化为:
Servlet 初始化后调用 init () 方法。(该方法只在最开始只调用一次);
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 销毁前调用 destroy() 方法。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
二.详细流程:
在通过一个URL路径发起对一个Servlet请求的过程中,其本质是调用执行Servlet实例的doXXX()方法。该Servlet实例创建和使用的过程,被称为Servlet的生命周期。整个生命周期包括:实例化,初始化,服务,销毁。
1.实例化:根据Servlet请求的路径(例如:home.do),查找该Servlet的实例。如果实例不存在,则通过调用构造方法,完成Servlet实例的创建。
连续请求了两次Servlet,但只有第一次才创建了Servlet实例。
2.初始化:通过该Servlet的实例,调用init()方法,执行初始化的逻辑。
在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。
3.服务:通过该Servlet的实例,调用service()方法,如果子类没有重写该方法,则调用HttpServlet父类的service()方法,在父类的该方法中进行请求方式的判断,如果是GET请求,则调用doGet方法;如果是POST请求,则调用doPost()方法;
如果子类重写doXXX()方法,则调用子类重写后的doXXX()方法;
如果子类没有重写doXXX()方法,则调用父类的doXXX()方法,在父类的方法实现中,返回一个405状态码的错误页面。(405状态码:代表请求的方式服务器不提供支持。)
4.doPost()方法和doGet()方法:
(1)doGet()方法:
GET调用用于获取服务器信息,并将其作为响应返回给客户端。当经由Web浏览器或通过HTML,JSP直接通过访问Servlet的URL时,一般用GET调用。GET调用在URL里显示正传送给Servlet的数据,这在系统的安全方面可能会带来一些问题。比如用户登录,表单里的用户名和密码需要发送到服务器端,若使用Get调用,就会在浏览器的URL中显示用户名和密码。
方法定义如下
运行
( 2)doPost():
它用于客户端把数据传送到服务器端。好处是可以隐藏传送给服务器的任何数据。
方法定义如下:
二者的区别:
get方式有四种:1.直接在URL地址栏中输入URL;
2.网页中的超链接;
3.form中method为get;
4.form中method方法为空时,默认是get;
2:数据传输方式:
GET:get方式提交时HTTP中没有消息体.
POST:表单数据存放在HTTP协议的消息体中以实体的方式传送到服务器。
3.传送的数据量
GET方式:数据长度有限制。
POST方式:适合大规模的数据传送。因为是以实体的方式创送。
4.安全性
GET方式:安全性差,直接将数据显示在地址栏中,浏览器有缓存,可记录用户信息。
POST方式:安全性高。字段和值用户看不见。
5.销毁:服务器关闭或重启时,会销毁所有的Servlet实例,会调用Servlet实例的destroy()方法。
在destroy方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。