Servlet

Servlet容器

Servlet自身没有main( )方法,它需要一个专门的Web服务程序模块来解释执行,称为Servlet容器,也称为Servlet引擎。

Tomcat就是一个常用的Servlet容器。当Web服务器应用得到一个指向Servlet的请求时,服务器不是把这个请求直接交给Servlet本身,而是

转交给部署该Servlet的容器。只有容器与浏览器直接交换信息,Servlet程序不与浏览器进行信息交换。所以,要理解Servlet的执行过程与

生命周期,必须先理解Servlet容器。


Servlet容器是Web服务器或Java EE应用服务器的一部分。Servlet不能独立运行,必须被部署到Servlet容器中,由容器来实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内管理Servlet。一般情况下,Servlet容器具有如下功能。


① 容器提供了各种方法,使得Servlet可以实现与Web服务器对话。用户只需考虑如何在Servlet中实现业务逻辑。
② 容器控制Servlet的生命周期。容器负责加载、实例化和初始化Servlet、调用Servlet方法、销毁Servlet实例。
③ 容器支持多线程管理。容器接收Servlet请求时,容器自动为其创建新线程,运行完成时,容器结束线程。
④ 容器为Servlet的可移植性提供了可能。利用容器,可以使用XML部署描述文件来配置和修改安全性,不需将其编码写到Servlet类代码中。
⑤ 容器负责将一个JSP文件转译成一个Servlet。

Servlet的运行过程与生命周期实际上由Servlet容器来控制。一个来自于浏览器的Servlet请求一般按如下顺序被响应。
① Servlet容器检测是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行④,否则执行②。
② 装载并创建该Servlet的实例对象。
③ 调用Servlet实例对象的init( )方法。
④ 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表响应消息的HttpServletResponse对象,然后调用Servlet的service( )方法,并将上述请求和响应对象作为参数传递进去。
⑤ Web应用程序被停止或重新启动之前,Servlet容器将卸载Servlet,并在卸载之前调用Servlet的destroy( )方法。
上述对Servlet请求的响应过程

 

Servlet的生命周期。


阶段一 加载和实例化
客户端第一次访问Servlet,或者容器加载应用时(配置<load-on-startup>),容器调用Servlet类的构造方法,实例化一个Servlet对象,

Servlet容器可以从本地文件系统、远程文件系统或者其他网络服务中,通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。
该对象存在于服务器端内存中,容器将启动多线程并发访问该对象。

阶段二:初始化

实例化结束后,将对Servlet实例进行初始化,先调用init(ServletConfig)方法,再调用init()方法。

初始化的目的是让Servlet对象在处理客户端请求前完成一些必需的工作,如建立数据库连接、获取配置信息等。在初始化期间,Servlet实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息中获取相关参数信息。
如果发生错误,Servlet实例可以抛出ServletException异常或者UnavilableException异常来通知容器。ServletException异常用于指明一般的初始化失败,如没有找到初始化参数;UnavailableException异常则用于通知容器该Servlet实例不可用,如数据库服务器没有启动、数据库连接无法建立等。

阶段三 :提供服务
Servlet初始化成功后,容器调用Servlet接口中定义的service(ServletRequest req, ServletResponse res)方法。service方法将请求和响应对象转换成HttpServletRequest和HttpServletResponse对象,调用HttpServlet类中定义的service(HttpServletRequest req,HttpServletResponse resp)方法。HttpServlet中的service方法,将请求根据请求方式转发给对应的doXXX方法,如doGet、doPost。
阶段四: 销毁
当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet的新实例时,容器就会调用实例的destroy( )方法,让该实例释放它所占用的资源,随后该实例会被Java的垃圾收集器回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。


在Servlet的整个生命周期中,创建Servlet实例、调用实例的init( )和destroy( )方法都只执行一次。针对客户端的多次Servlet请求,服务器只会创建一个Servlet实例对象。Servlet实例对象一旦创建,Servlet容器将该实例保存在内存中,通过调用它的service( )方法,为接收到的请求服务,直至Servlet服务终止,Servlet实例对象才会销毁

请求响应常用方法

HttpServletRequest


(1)获得请求头信息的方法。
    getHeader方法可以根据请求头名字获得请求头值;
    getIntHeader方法用来返回整型请求头的值;
    getDateHeader方法用来返回日期类型请求头的值;
    getHeaderNames返回所有头的名字;
    getHeaders返回所有头的值。
(2)获得请求参数的方法。
    getParameter方法可以根据请求参数名字返回请求参数的值;
    getParameterValues方法可以将同一个名字的所有请求参数值作为数组返回;
    getParameterNames方法可以返回所有请求参数的名字。
(3)获得客户端和服务器端相关信息的方法。
    getMethod 返回HTTP请求方法。
    getRemoteUser返回远程用户名,如果用户没有通过鉴定,则返回null。
    getRequestSessionId( ):返回客户端会话的ID
    getRemoteAddr用来获得远程地址,
    getRemotePort用来获得远程端口,
    getLocalName用来获得本地主机名,
    getLocalPort用来获得本地端口。
(4)获取和路径有关的方法
    getContextPath( ):返回指定Servlet上下文(Web应用)的URL前缀。
    getPathInfo( ):返回在URL中指定的任意附加路径信息。
    getQueryString( ):返回查询字符串。
    getServletPath( ):返回此请求调用Servlet的URL部分。
    getRequestURI( ):返回URL中的一部分,从“/”开始,包括上下文,但不包括任意查询字符串。
(5)和会话有关
     getCookies( ):返回与请求相关Cookie的一个数组。
     getRequestSessionId( ):返回客户端会话的ID。
     getSession( ):返回getSession(true)的值。


HttpServletResponse


(1)处理响应头信息的方法。
HttpServletResponse中定义了很多处理响应头信息的方法,包括addHeader、addIntHeader、addDateHeader、setHeader、setIntHeader等。其中,
    addHeader方法用来在响应中添加一个头,如果该头的名字已经存在,那么允许一个头包含多个值;
    setHeader方法在响应中添加一个头信息,如果头存在,则覆盖已有的值;
    addIntHeader方法用来在响应中添加一个整型头信息;
    setIntHeader用来在响应中添加一个整型的头信息,如果头存在,则覆盖已有的值。
    addDateHeader方法用来在响应中添加一个Date类型头信息;
(2)获得响应输出流及设置内容类型的方法。
响应可以用来往客户端输出响应体。要向客户端做输出操作,首先需要通过HttpServletResponse接口的getWriter方法获得输出流,同时可以通过响应的setContentType方法设置响应的内容类型,如text/html;charset=gb2312,表示输出的内容类型是文本或HTML,字符编码是gb2312。
(3)响应重定向。
Servlet中往往需要根据不同的处理结果,将响应重定向到其他资源。HttpServletRespose中的sendRedirect方法可以实现响应重定向功能。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值