熬之滴水穿石:Servlet--Web万物之源(3)

                                          27--生命周期
在Servlet的技术模型中,接收和响应分别使用的 HttpServletRequst接口和HttpServletResponse接口来实现的。HttpServletRequest接口一般可以从请求中获取HTML的表单参数,获取HTTP请求首部信息,还可以获取到Cookie。HttpServletResponese接口可以设置响应类型并且为响应获取一个文本流,把请求重新定向另一个URL,也可以为响应增加Cookie.

又要提起生命周期了,这是我认为最能搞明白架构原理的关键。我们编写的Servlet类一般会继承HttpServlet类,HttpServlet其实是一个抽象类,但它实现了一个Service的方法来处理了关于Http中的接收和响应,在Service中Request和Respone是相应的参数。 HttpServlet的父类则是 GenericServlet类,这同样是一个抽象类,但是它实现Servlet的大部分方法,我们所知的Servlet方法都是来之于这个类。我们还得往上走,一直走到了一个叫Servlet的地方,它不是个类是个接口,它指出了5种方法,这五个方法在之前提到的类都有会,而这几个方法组成了Servlet的生命周期,它们分别是Servlet类加载、Servlet实例化、调用init方法,调用Service方法,调用destroy。这些,我曾在Servlet的第一个章节就提起过。 Servlet的生命周期其实很简单,一个主要的状态的就是要init,如果没有初始化这个动作就不会有Servlet的存在。

Web容器在启动时会加载Servlet类,然后实例化相当于构造函数在实现了。接着进行init的工作,这是在客户请求未达到之前必须要做的事情,在早期的WEB开发中,我们会利用init方法去做数据库连接的事情。在Servlet对的生命周期中只有一次调用的机会。然后初始化service的方法,等待客户端的请求。当客户请求到来了,容器会分配一个线程并且来调用Servlet上的Service方法。Service会根据Http的请求如果是Get就调用doGet,如果是Post则调用doPost。doGet方法和doPost方法其实都是分别在单独的线程中运行的。在早期开发中我们通常会对doGet,doPost方法进行覆盖处理一些请求和响应的细节问题。Destroy()方法代表着Servlet的生命Over。

我觉得理解好Servlet的初始化是一个非常有意义的事情。Servlet类是通过构造函数成为一个Servlet对象的,它就具备了Servlet的所有特权。每一个Servlet都存在一个ServletConfig,容器从部署文件中一般都是web.xml中读取这些参数,然后把这些参数交给ServletConfig,最后通过 Servletconfig传递给init方法。像之前所说的数据库连接配置还有一些需要初始化的信息就可以放到部署文件所在域完成: init-param。整个过程是这样的,容器先读取web.xml所在的init-param的内容,然后容器会创建一个ServletConfig的实例,容器会根据读取的init-param创建String对象,然后容器会将赋值后的String对象成为ServletConfig的一个引用。容器创建Servlet实例,当调用Servlet的init方法时,会传入Servletconfig的引用。

刚说了每一个Servlet对象都有一个 ServletConfig,对于一个WEB服务有一个叫ServletContext。我们叫作上下文初始化参数,在部署文件中位于 <context-param>的区域。该对象和ServletConfig有区别,该对象是Servlet和Jsp都可以访问而ServletConfig只能让Servlet访问。Servlet有一个叫getServletContext的方法访问该值。它的初始化过程是这样的:容器读取web.xml部署文件,为所在域的<context-param>创建相应的名/值对,容器会创建一个ServletContext的实例,容器也会为其提起相应的引用。如此在这个Web服务部署的Servlet和Jsp就能访问ServletContext了。
有了这些更加完善了Servlet的生命周期,接下来我们就要进入更为核心的接收和相应的部分了.....
                                                                                     (未完待续........)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值