Servlet生命周期
一、生命周期:
1.对servlet来说,它的生命周期指的就是从创建直到毁灭的整个过程。
其流程可简化为:
Servlet 初始化后调用 init () 方法。(该方法只在最开始只调用一次);
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 销毁前调用 destroy() 方法。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
2.详细流程:
1):初始化阶段
Servlet容器(Tomcat)加载Servlet,加载完后,Servlet容器将创建一个实例,调用init()方法,init()方法只调用一次。
Servlet容器装载Servlet的情况:
A.Servlet容器启动时自动装载某些servlet,实现这个需要在web.xml文件中添加;
B.在Servlet容器启动后,客户首次向Servlet发送请求;
C.Servlet类文件被更新后,重新装载。
2):处理客户端请求阶段:
服务器每收到一个客服端请求,就会产生一个线程去处理请求。Servlet容器会对用户的Servlet请求创建一个特定于请求的ServletRequest和ServletResponse。
3):终止阶段:
当web应用被终止时,或Servlet容器停止运行后,或Servlet重新装载Servlet新的实例时,Servlet容器会调用Servlet的destory()方法。、
二、init()方法:
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。
Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。
当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
方法定义如下:
public void init() throws ServletException {
}
三、service()方法:
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
方法定义如下:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException
{
}
四、doPost() 方法和doGet() 方法:
1.doGet():
GET调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过HTML、JSP直接访问Servlet的URL时,一般用GET调用。GET调用在URL里显示正传送给SERVLET的数据,这在系统的安全方面可能带来一些问题,比如用户登录,表单里的用户名和密码需要发送到服务器端,若使用Get调用,就会在浏览器的URL中显示用户名和密码。
方法定义如下:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
JSP定义如下:
<form action="/doGet_servlet" method="get">
………
<input type="text" >
………
</form>
2.doPost():
它用于客户端把数据传送到服务器端,也会有副作用。但好处是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。
方法定义如下:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
JSP定义如下:
<form action="/doPostt_servlet" method="post">
………
<textarea cols="50" rows="10"></textarea>
………
</form>
3.二者的区别:
1):生成方式
get方式有四种:1.直接在URL地址栏中输入URL;
2.网页中的超链接;
3.form中method为get;
4.form中method为空时,默认是get提交。
post只知道有一种:form中method属性为post。
2):数据传输方式
GET:表单数据存放在URL地址后面。所有get方式提交时HTTP中没有消息体。
POST:表单数据存放在HTTP协议的消息体中以实体的方式传送到服务器。
3):服务器获取数据方式
GET方式:服务器采用request.QueryString来获取变量的值。
POST方式:服务器采用request.Form来获取数据。
4):传送的数据量
GET方式:数据量长度有限制,一般不超过2kb。因为是参数传递,且在地址栏中,故数据量有限制。
POST方式:适合大规模的数据传送。因为是以实体的方式传送的。
5):安全性
GET方式:安全性差。因为是直接将数据显示在地址栏中,浏览器有缓冲,可记录用户信息。所以安全性低。
POST方式:安全性高。因为post方式提交数据时是采用的HTTP post机制,是将表单中的字段与值放置在HTTP HEADER内一起传送到ACTION所指的URL中,用户是看不见的。
6):在用户刷新时
GET方式:不会有任何提示。
POST方式:会弹出提示框,问用户是否重新提交。
7):form运行方式
当form框里面的method为get时,执行doGet方法。
当form框里面的method为post时,执行doPost方法。
五、destroy() 方法:
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。
方法定义如下:
public void destroy() {
}
本文来自博客园,作者:程序员久笙,转载请注明原文链接:https://www.cnblogs.com/jiushengzcc/p/16372320.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了