Servlet介绍

JSP的本质就是Servlet,开发者把编写好的JSP页面部署在Web容器中之后,Web容器会将JSP编译成对应的Servlet。但直接使用Servlet的坏处是:Servlet的开发效率非常低,特别是当Servlet生成表现层页面时,页面中所有的HTML标签,都需要采用Servlet的输出流来输出,极其繁琐。而且Servlet是Java类,必须由程序员开发、修改、维护,这些问题都使Servlet作为表现层技术显得很困难。

自MVC规范出现后,Servlet的责任开始明确下来:仅仅作为控制器使用。


HttpServlet包含的三个重要的方法:

init(ServletConifg config):创建Servlet实例时,调用该方法初始化Servlet资源。该方法只能调用一次。

service(ServletRequest req, ServletResponse resp):Servlet实例的服务方法。该方法根据用户请求的GET、POST等调用相应的doGet、doPost等处理方法。该方法为客户端用户提供服务,可以在Servlet实例的整个生命周期中,在Servlet调用destory方法之前多次调用。

destroy():销毁Servlet实例时,自动调用该方法来回收资源。

通常无需重写init()和destroy()方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init方法。如果需要在销毁Servlet之前,先完成某些资源的回收,比如关闭数据库连接等,才需要重写destroy方法


Servlet和JSP的区别:

Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显示创建。

对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出。

JSP是Servlet的一种简化。使用JSP只需要完成程序员需要输出到客户端的内容,至于JSP脚本如何嵌入一个类中,由JSP容器完成。而Servlet则是个完整的Java类,这个类的service()方法用于生成对客户端的响应。

普通Servlet类中的service()方法的作用完全等同于JSP生成Servlet类的_jspService()方法,因此原JSP页面的JSP脚本、静态HTML内容,在普通Servlet里都应该转换成service()方法的代码或输出语句原JSP声明中的内容,对应为在Servlet中定义的成员变量或成员方法


当Servlet在容器中运行时,其实例的创建及销毁都不是由程序员决定的,而是由Web容器进行控制的。创建Servlet实例有两个时机:

1、客户端第一次请求某个Servlet时,系统创建该Servlet的实例:大部分Servlet都是这种Servlet

2、Web应用启动时立即创建Servlet实例,即load-on-startup Servleet。这种Servlet通常用于某些后台服务的Servlet,或者需要拦截很多请求的Servlet;这种Servlet通常作为应用的基础Servlet使用,提供重要的后台服务。<load-on-startup/>元素或loadOnStartup属性都是接受一个整型值,这个值越小,Servlet就越优先实例化。


Servlet的各个生命周期的作用

1、加载Servlet:Web容器负责加载Servlet,当Web容器启动时或者是在第一次使用这个Servlet时,容器会负责创建该Servlet的实例,但用户必须通过部署描述符(web.xml)指定Servlet的位置,成功加载后,Web容器会通过反射的方式对Servlet进行实例化

2、初始化:当一个Servlet被实例化后,容器将调用init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库连接、读取资源文件信息等。如果初始化失败,则此Servlet将被直接卸载。

3、处理服务:当有请求提交时,Servlet将调用service()方法进行处理。在service()方法中,Servlet可以通过ServletRequest接受客户的请求,也可以利用ServletResponse设置响应信息。

4、销毁:当Web容器关闭或者检测到一个Servlet要从容器被删除时,会自动调用destroy()方法,以便让该实例释放掉所占用的资源。

5、卸载:当一个Servlet调用完destroy()方法后,此实例等待被垃圾收集器回收。如果需要再次使用此Servlet时,会重新调用init()方法初始化。

在正常情况下,Servlet只会初始化一次,而处理服务会调用多次,销毁也只会调用一次。但如果一个Servlet长时间不适用的话,也会被容器自动销毁。如果需要再次使用时会重新进行初始化的操作,即在特殊情况下初始化可能会进行多次,销毁也可能进行多次。


JSP可以完成的功能Servlet都可以完成,但是Servlet具备的很多功能是JSP所不具备的,从使用上看Servlet可以分为简单Servlet、过滤Servlet(过滤器)和监听Servlet(监听器)三种。JSP可以完成的知识简单Servlet的功能

使用filter的完整流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。(责任链模式

Filter里的doFilter方法里的代码就是从多个Servlet的service()方法里抽取的通用代码,通过使用Filter可以实现更好的代码复用。Filter和Servlet具有完全相同的生命周期行为

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值