对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() {

  }

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值