我是靠谱客的博主 高挑哈密瓜,最近开发中收集的这篇文章主要介绍Servlet生命周期,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 .首先,什么是Servlet?
       Servlet是一个Java编写的程序,此程序是在服务器端运行的,是按照Servlet规范编写的一个Java类。
   2.Servlet是做什么的?
       Servlet是处理客户端的请求并将其发送到客户端。
   3.Servlet API
   1>Servlet框架的组成
        Servlet框架是由2个Java包组成:(1)javax.servlet和(2)javax.servlet.http
       (1)javax.servlet包中定义了所有Servlet类都必须实现的接口和类。
          javax.servlet包的接口为:
                            ServletConfig接口  ---- 在初始化过程中由Servlet容器使用
                            ServletContext接口  ---- 定义Servlet用于获取容器信息的方法
                            ServletRequest接口 ---- 向服务器请求信息
                            ServletResponse接口 ----  响应客户端请求
                             Servlet接口  ---- 定义所有Servlet必须实现的方法
          javax.servlet包中的类为:
                              ServletInputStream类  ---- 用于从客户端读取二进制数据
                              ServletOutputStream类  ---- 用于将二进制数据发送到客户端
                               GenericServlet类  ---- 抽象类,定义一个通用的,独立于地层协议的Servlet。

       (2)javax.servlet.http包中定义了采用HTTP通信的HttpServlet类。
          javax.servlet.http包的接口为:
                         HttpServletRequest接口  ---- 提供http请求
                         HttpServletResponse接口  ---- 提供http响应
                         HttpSession接口  ---- 用于标识客户端并存储有关客户信息
                         HttpSessionAttributeListener接口  ----实现这个侦听接口用户获取会话的属性列表的改变的通知
          javax.servlet.http包中的类:
                         HttpServlet类 ---- 扩展了 GenericServlet的抽象类,用于扩展创建Http Servlet
                          Cookie类  ---- 创建一个Cookie,用于存储Servlet发送给客户端的信息
                                                     
   2>Servlet框架的核心
        Servlet框架的核心是:javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。
   4.Http Servlet
       HttpServlet是一个抽象类,用来创建用户自己的 HTTP Servlet。HttpServlet类的子类必须至少重写一下方法中的一个:doGet()和doPost()。

      HttpServlet类提供doGet()方法来处理GET请求
        public void doGet(HttpServletRequest req,HttpServletResponse res)
              提供doPost()方法处理POST请求 
        public void doPost(HttpServletRequest req,HttpServletResponse res)
        其中有2个参数:HttpServletRequset和HttpServlerResponse
         这2个类实现了ServlerRequset接口和ServletResponse接口
        ServletRequest接口中封装了客户请求信息<客户请求方式,参数名,参数值等>
        ServletResponse接口 为 Servlet提供了返回相应结果的方法。
     5.Servlet体系结构
          Servlet-->GenericServlet-->HttpServlet-->用户自定义的Servlet
     6.Servlet的生命周期
         Servlet的生命周期由Servlet容器控制,该容器创建Servlet的实例。
         Servlet生命周期就是指创建Servlet实例后响应客户请求直至销毁的全过程。
         1>Serlvet生命周期的三个方法:init()-->service()-->destroy()
         2>生命周期的各个阶段:
            实例化:Servlet容器创建Servlet类的实例对象
            初始化:Servlet容器调用Servlet的init()方法
            服务:如果请求Servlet,则容器调用service()方法
            销毁:销毁实例之前调用destroy()方法
            不可用:销毁实例并标记为垃圾处理

Servlet的生命周期

 

        Servlet的生命周期由Servlet容器控制,该容器创建Servlet的实例。Servlet的生命周期就是指Servlet实例在创建之后响应客户请趟直到至销毁的全过程。Servlet实例的创建取决于Servlet的首次调用。Servlet接口定义了Servlet生命周期的3个方法。

 

1        init():创建Servlet的实例后对其进行初始化。实现ServletConfig接口的对象作为参数进行传递。init方法在浏览器请求servlet或web server启动时加载运行。

  public void init()throws servletexception{

  }

  public void init(servletconfig conf)throws servletexception{

  super.init(conf);//init方法带servletconfig参数时必须有此句代码

  //此处写一些初始化操作。如连接数据库等。

  }

 

2        service():响应客户端发出的请求。Service()方法接受ServletRequest接口和ServletResponse接口的对象来处理请求和发送响应。经常的用法是:不用service()方法,用dopost,doget方法来处理请求。其他的方法还有dotrace(),dooptions().dohead()方法,因trace,options.head信息已经在dopost,doget方法中包括,不必使用,doput(),dodelete()方法在web app不经常使用

Service()方法的语法为:

public void service(ServletRequest request, ServletResponse response) throws ServletException,IOException

 

其中,request是作为参数传递以存储客户端请求的ServletRequest接口的对象;ServletResponse接口的对象,它包含Servlet作出的响应。

 

3        destroy():如果不需要处理的请求,则释放Servlet 实例。Destroy()方法的语法为:

public void destroy(){

  }

public void destroy(){

  super.dedtroy(conf);

  }

注意:Servlet关闭时才销毁。

 

 

 

Servlet层次结构

 

在写Servlet程序时,一开始必须导入(import) javax.servlet.*、javax.servlet.http.*。

 

其中:

 

javax.servlet.*:存放与Http协议无关的一般性servlet类;

 

javax.servlet.http.*:除了继承javax.servlet.*之外,并且还增加了与HTTP协议有关的功能。

 

 

 

所有Servlet都必需实现javax.servlet.Servlet接口(Interface),但是通常我们都会从javax.sevler.GenericServlet或javax.servlet.http.HttpServlet择一来实现。

 

javax.servlet.* 里的ServletRequest和ServletResponse接口提供存取一般的请求和响应;

javax.servlet.http.* 里的HttpServletRequest 和HttpServletResponse接口,则提供HTTP请求及响应的存取服务。

 

声明servlet类MyServlet

public class MyServletextends httpservlet{}

 

 

 

javax.servlet包主要的接口和类:

 

1 ServletInputStream类:用于从客户端读取二进制据数。

 

     ServletInputStream类是从java.io.InputStream类扩展而来的抽象类。它只实现

 

  一个readLine()方法。

 

   Public int readLine(byte b[],int offset,int length) throws IOException

   b是用于存储读取的数据的字节数组;

   offset指定开始读取字符串的位置;

   length指定要读取的最大字节数

   返回实际读到的字节数。到达流的结尾时返回-1.

 

 

 

2 ServletOutputStream类:向客户端发送二进制数据。

 

     ServletOutputStream类是从java.io.OutputStream类扩展而来的抽象类。主要方法:

  public void print(String s) throws IOException

  public ovid println(String s) throws IOException

    s是要发送到客户端的字符串。

 

 

 

3 GenericServlet类:抽象类,定义一个通用的、独立于底层协议的Servlet。

 

 

 

4 ServletRequest接口:定义一个对象,封装客户向Servlet的请求信息。

 

      使用ServletRequest接口创建的对象,用于使客户端请求信息对Servlet可用。创建的对象作为参数传递至Servlet的Service()方法。

 

5 ServletResponse接口:定义一个对象辅助Servlet将请求的响应信息发送给客户端。

 

6  ServletContext接口:Servlet上下文。定义Servlet使用的方法以获取其容器的信息。

 

7  ServletConfig接口:定义了在Servlet初始化的过程中由Servlet容器传递给Servlet的配置信息对象。保存Servlet的配置信息。

 

8  Servlet接口:定义所有Servlet必须实现的方法。

 

 

 

javax.servlet.http包主要的接口和类:

 

1 HttpServletRequest接口:扩展ServletRequest接口,为Http Servlet提供Http请求信息。

 

  getrealpath,getinputstream,getcontenttype,getcontentlengh...

得到服务器的根目录

  string path=request.getrealpath(".");

取得输入流

  datainputstream din=new datainputstream(request.getinputstream()); 

 

 

 

2 HttpServletResponse接口:扩展ServletResponse接口,提供Http特定的发送响应的功能。常用的方法:

  sendredirect,getwriter,setcontenttype,getoutputstream.

设置文件类型 

  private static final string content_type="text/html;charset=gb2312";

  response.setcontenttype(content_type);

输出html文件头部信息:

  printwriter out=response.getwriter();

  out.close();

 

 

 

3 HttpSession接口:用于创建客户端与服务器端之间的会话。

 

  Public HttpSession getSession()

返回与请求关联的当前会话。如果请求没有与其关联的话,则getSession()会创建一个新会话。

 

  Public HttpSession getSession(boolean value)

返回与请求关联的当前session的对象。

boolean value为true时等同于Public HttpSession getSession()

boolean value为false时,则返回null。

 

4 HttpSessionAttributeListener接口:实现这个侦听接口用于获取会话的属性列表的改变的通知。

 

5 HttpServlet类:扩展了GenericServlet的抽象类,用于扩展创建Http Servlet。

 

6 Cookie类:创建一个Cookie,用于存储Servlet发送给客户端的信息。

 

会话跟踪

 

  会话跟踪允许服务器确定访问站点的用户、用户访问站点的次数和用停留站点的时间

 

段。会话跟踪技术包括隐藏表单域、URL重写、Cookie、Session。

 

1 隐藏表单域:是实现会话跟踪最简单的方式。将字段添加到HTML表单中,但并不在

 

客户端浏览器中显示。

示例代码:

 

2 URL重写

 

  URL(Uniform Resource Locator,统一资源定位符)是Web上特定页面的地址。URL重

 

写技术在URL结尾添加一些附加数据以标识该会话。

 

3 Cookie

 

 Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取信息发送到服务器端。

 

  Servlet API为使用Cookie而提供javax.servlet.http.Cookie。

 

  Cookie类常用的方法如下:

 

(1)              setMaxAge():设置Cookie的最大保存时间(以秒表示)

public void setMaxAge(int age)

 

(2)              getMaxAge():返回Cookie的最大保存时间

public int getMaxAge()

 

 

 

4        Session

 

 

 

 

 

Servlet通信方法

 

Servlet运行一个称为ServletContext的环境,此环境描述了与Servlet关联的各种参数,一个Servlet只属于一个ServletContext。

1 Servlet与jsp页面通信

下面是UserServlet1中的doGet()方法中的部分代码:

           String uid=request.getParameter("txtuserid");

 

           ServletContext context=this.getServletContext();

 

           context.setAttribute("userid", uid);

 

          RequestDispatcher dispatcher=request.getRequestDispatcher("../x.jsp");

 

x.jsp部分代码:

 

  <%

 

      ServletContext context=this.getServletContext();

 

      String userid=context.getAttribute("userid").toString();

 

  %>

 

用户ID:${userid}

 

 

 

2 Servlet与Servlet通信

  属于同一个应用程序的Servlet可以使用javax.servlet.RequestDispatcher接口的forward和include方法来共享数据。

 

forward()方法将HTTP请求从一个Servlet发送到其它Servlet。该请求包含传递到目标Servlet的URL和请求参数。

 

include方法可以接收Servlet以包括Servlet响应中的其他Servlet响应数据。接收客户端可以接收的对象,并将数据写入到response对象。

 

 

 

(1)forward():用于将请求从一个Servlet转发到同一个服务器上的另一个Servlet。语法为:

public void forward(ServletRequest request,ServletResponse response) throws ServletException,IOException

   基中,request是客户端向Servlet发出的请求,response是Servlet对客户端作出的响应。

 

 

 

(2)include():用于包括另一个Servlet的内容。语法为:

 public void include(ServletRequest request,ServletResponse response) throws IOException

   其中,request是包含客户端请求的对象,response是包含Servlet响应的对象。

 

下面是UserServlet1中的doGet()方法中的部分代码:

           String uid=request.getParameter("txtuserid");

 

           ServletContext context=this.getServletContext();

 

           context.setAttribute("userid", uid);

 

          RequestDispatcher dispatcher=request.getRequestDispatcher("/servlet/UserServlet2");

 

Servlet上下文

 

 Servlet上下文提供对应用程序中所有Servlet所共有的各种资源和功能的访问。Servlet上下文API用于设置应用程序中所有Servlet共有的信息。

 

Javax.servlet.ServletContext接口中用于处理上下文属性的方法如下:

1 getAttribute():返回Servlet上下文中对应属性名称的对象。若没有则返回null。

 

   public Object getAttribute(String name)

   其中,name是Servlet的属性名称。

 

2 setAttribute():将对象绑定到Servlet上下文中提供的属性名称。

 

   public void setAttribute(String name,Object object);

   其中,name指定属性名称,object表示要绑定的对象。


Forward from http://blog.csdn.net/haobo920/article/details/5925656


最后

以上就是高挑哈密瓜为你收集整理的Servlet生命周期的全部内容,希望文章能够帮你解决Servlet生命周期所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部