Servlet的生命周期

11 篇文章 0 订阅

Servlet的生命周期

与CGI不同的是,Servlet处理请求的方式就显得巧妙很多了,服务器在已经自启动或者是有人第一次请求时,初始化一个Servlet对象,然后就可以用这个对象去处理客户端的请求,在关闭服务器时再去销毁这个对象,这样可以减少开辟和销毁Servlet所需的开销。不管有多少请求,只会有一个Servlet实例,如果遇到了并发请求的情况,服务器会启用多个线程分别执行Servlet的service()方法。

对于一个Servlet对象,init和destory方法均只会被服务器调用1次,而service方法在每次客户端请求时都会被调用。

加载Servlet:由Servlet容器完成

一般服务器加载和实例化Servlet有三种情况:1)自启动时会自动装入Servlet 2)如果没有自动装入Servlet,那么在首次向Servlet发送请求时,也会装入Servlet 3)重新加载Servlet时,也会装入Servlet.

首次发送请求时加载

首次发送请求时加载Servlet是指,访问特定的URL时,与此URL映射的Servlet被调用,且被加载到内存当中。下面以代码为例:

一般当第一次加载Servlet时,系统响应会比较慢,因为服务器系统要进行内存的配置。当Servlet被加入进内存中后,系统的响应效率就会大大提高。

自动加载Servlet

一般是在服务器启动时,Servlet自动加入内存,一但Servlet被加入运行环境,Servlet就不会轻易被删除,直至服务器重新启动。下面以代码为例:

节点表明了Servlet是否被自动加载,当节点中参数大于0时,会自动加载,当参数越小,加载越优先。一般自动加载的Servlet运行起来比调用加载更快。使用自动加载一般是对全局范围内的Servlet提供的加载模式。

init()方法

Servlet被实例化了之后,Servlet容器调用Servlet的init(ServletConfig sc)方法来为每个实例进行实例化,该方法的参数是ServletConfig类。下面我们来演示一下在Servlet的init()方法中获得参数以后,放入全局变量中,然后在Servlet的doGet方法中调用init()方法获得的参数。代码如下:

在该文件中添加了Servlet并设置了初始值,而且在节点中设置了初始值,这些初始值在Servlet被实例化时,被初始化。下面来编写Servlet来获得初始值。这个文件里面的Servlet是还没有被创建的Servlet,下面来进行创建:

处理请求的方法:service()方法

当用户的请求到达Service服务器时,服务器为接收到的请求创建一个“请求”对象request和一个响应对象response,然后服务器调用Servlet的service()方法来把请求和响应传递给相应方法进行处理。当需要修改服务器端数据时,需要使用doPost()方法,当一个客户通过HTML表单发出一个HTTP GET请求时或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL后面,并与这个请求一起发送。当不会修改服务器端数据时,应该使用doGet()方法。Servlet中默认的处理方法是doGet()方法。
下面通过例子来加深对doGet和doPost方法的理解:

这是一个Serclet的登陆界面的Servlet。该Servlet中省略了doPost()方法和init()方法,将form表单提交的方法设置为post方法,提交到哪个文件由action设置,设置提交到名为Method_Servlet的Servlet中,现在编写Method_Service.

在这个Servlet中,doGet()方法和daPost()方法都通过getParameter()方法来获得登录用户名和登陆密码,然后把获得的用户名和密码显示在页面中。Servlet信息要添加到web.xml中才能被访问到,在工程study_servlet中web.xml文件中编写下列代码:

web.xml文件用来设置Servlet的名称和访问Servlet的路径。

销毁Servlet:destroy()

当Servlet容器不在需要某个Servlet实例时,他会调用Servlet的destroy()方法。在Servlet中,Servlet释放掉所有在init()方法中申请的资源,如在init()方法中初始化的参数,一但一个Servlet实例被终结,就不能在被调用,只能等待被卸载.Servlet容器关闭以后,一个Servlet也会被关闭.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值