zoukankan      html  css  js  c++  java
  • Servlet技术和Servlet生命周期:



    Java Servlet是和平台无关的服务器组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户通信采用“请求/响应”的模式。
    Servlet完成的功能:
    创建并返回基于客户请求的动态HTML页面。
    创建可嵌入到现有HTML页面中的部分HTML页面。
    与其他服务器资源进行通信。

    一个类要成为Servlet类必须实现javax.servlet.Servlet接口。

    GenericServlet是通用的,不特定任何协议的servlet,他实现了Servlet接口,而HttpServlet继承了GenericServlet,因此HttpServlet实现了Servlet接口,所以我们定义的Servlet只需要继承HttpServlet父类即可。

    Servlet接口中定义了一个service方法,HttpServlet对该方法进行了实现,实现方式就是将ServletRequest与ServletResponse转换为HttpServletRequest与HttpServletResponse。

    转换完毕后,会调用HttpServlet类中自己定义的service方法。

    在该service方法中,首先获得请求的方法名,然后根据方法名调用对应的doXX方法,比如说请求方法为Get,那么就去调用doGet方法,请求方法为POST,那么就去调用doPost方法。

    在HttpServlet类中所提供的doGet,doPost等方法,都是直接返回错误信息,所以我们需要在自己定义的Servlet类中override这些方法。

    Servlet的生命周期:
    init方法:负责初始化Servlet对象;
    service方法:负责响应客户的请求:
    destroy:当Servlet对象退出生命周期时,负责释放占用的资源。

    ServletRequest接口中封装了客户请求的信息,如客户的请求方式,参数名,参数值。

    Servlet的初始化阶段:
    Servlet容器启动时自动装载些Servlet;
     为了验证是否自动加载Servlet类:我们必须重新配置Servelt:
          <servlet>
        <servlet-name>InitServlet</servlet-name>
        <servlet-class>com.javaweb.servlet.InitServlet</servlet-class>
        <load-on-startup>9</load-on-startup>
      </servlet>
    在servlet容器启动后,客户首次向Servlet发出请求;
    Servlet的类文件更新后,重新装载Servlet。
    Servlet被装载后,Servlet容器会创建一个servlet实例并且调用Servlet的init()方法进行初始化,在Servlet的整个生命周期中,init方法只会被调用一次。
    init()方法实例:

    package com.javaweb.servlet;


    import java.io.IOException;

    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class InitServlet extends HttpServlet
    {
    @Override
    public void init(ServletConfig config) throws ServletException
    {
        System.out.println("init invoked!!");
    }
    @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException
        {
            System.out.println("doget invoked!!");
        }
    }     



    Servlet响应客户端的请求(service)

    对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理请求,并通过ServletResponse对象向客户返回响应结果。

    对于Tomcat来说,它会将客户传递过来的参数放在一个Hashtable中,该Hashtable的定义是:
    private Hashtable<String ,String[]>paramHashStringArray = new Hashtable<String,String[]>();这是一个String->String的键值映射。


    Servlet的终止阶段:当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新加载Servlet的新实例时,Servlet容器会先调用Servlet的dstroy方法。在destroy方法中,可以释放servlet 所占的资源。

    某些Servlet在web.xml文件中只有<servlet>元素而没有<servlet-mapping>元素,这样我们就无法通过url地址的方式访问这个Servlet了,这种Servlet通常会在<servelt>元素中配置一个<load-on-start>子元素,让容器在启动时自动加载Servlet并且调用其init方法完成一些全局性的初始化工作。

  • 相关阅读:
    Python: execute an external program (zz)
    Python notes
    Web Monitor/Dev/Test Tool Collection 网站/网页监控/开发/测试工具集合
    SilkTest 2006 sp2 Notes of GettingStartedTutorial (2008,07)
    Software Testing Essentials 软件测试精要
    Flex notes
    Review Java advanced features
    Fedora 11 Configuration and Management
    进制转换的方法原理
    win32 透明置顶
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3002718.html
Copyright © 2011-2022 走看看