`

请写出Servlet的生命周期?

 
阅读更多

1、请写出Servlet的生命周期?

 

参考资料:http://book.51cto.com/art/200808/84955.htm

参考资料:http://wenku.baidu.com/view/a974b648852458fb770b56a3.html

学习笔记,转自:http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html

 

Servlet生命周期与工作原理

 

Servlet生命周期分为三个阶段:

  1,初始化阶段  调用init()方法

  2,响应客户请求阶段  调用service()方法

  3,终止阶段  调用destroy()方法

 

Servlet初始化阶段:

  在下列时刻Servlet容器装载Servlet:

    1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:

<loadon-startup>1</loadon-startup>

    2,在Servlet容器启动后,客户首次向Servlet发送请求

    3,Servlet类文件被更新后,重新装载Servlet

  Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

    

Servlet工作原理:

  首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。

  每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。

  Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。

public void service(ServletRequest req,ServletResponse res)
  throws ServletException,IOException
{
      HttpRequest request;
      HttpResponse response;
 
     try
     {
         req = (HttpRequest)request;
         res = (HttpResponse)response;
      }catch(ClassCastException e)
      {
         throw new ServletException("non-HTTP request response");
      }
      service(request,response);
}

    代码的最后调用了HTTPServlet自己的service(request,response)方法,然后根据请求去调用对应的doXXX方法,因为HttpServlet中的doXXX方法都是返回错误信息,

protected void doGet(HttpServletRequest res,HttpServletResponse resp)
  throws ServletException,IOException
{
   String protocol = req.getProtocol();
   String msg = IStrings.getString("http.method_get_not_supported");
   if(protocol.equals("1.1"))
   {
      resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg);
    }
   esle
    {
      resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg);
    }
}

所以需要我们在自定义的Servlet中override这些方法!

 

    源码面前,了无秘密!

---------------------------------------------------------------------------------------------------------------------------------

Servlet响应请求阶段:

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

  对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义是:

 

private Hashtable<String String[]> paramHashStringArray = new Hashtable<String String[]>();

 

  这是一个String-->String[]的键值映射。

  HashMap线程不安全的,Hashtable线程安全。

-----------------------------------------------------------------------------------------------------------------------------------

Servlet终止阶段:

  当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。

 

-----------------------------------------------------------------------------------------------------------------------------------

Servlet何时被创建:

  1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。

  2,当web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素时,Servlet容器在启动web服务器时,将按照顺序创建并初始化Servlet对象。

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

 

Web应用何时被启动:

  1,当Servlet容器启动的时候,所有的Web应用都会被启动

  2,控制器启动web应用

-----------------------------------------------------------------------------------------------------------------------------------------------

Servlet与JSP的比较:

  有许多相似之处,都可以生成动态网页。

  JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。

  Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。

 

分享到:
评论

相关推荐

    servlet源代码

    韩顺平老师的讲解通常会涵盖Servlet的生命周期、服务方法(service())、初始化(init())、销毁(destroy())等关键概念。他还会解释如何在web.xml中配置Servlet,以及doGet()和doPost()方法的区别。 4. **...

    servlet运行原理

    在Servlet生命周期的初始化阶段,会调用`init()`方法进行初始化操作,例如设置初始化参数。服务阶段,`doGet()`或`doPost()`方法会被调用来处理HTTP请求。这两个方法分别对应HTTP的GET和POST请求类型,通常在这里...

    使用Servlet写app接口

    首先,我们需要理解Servlet的基本工作原理和生命周期,然后探讨如何创建和配置Servlet来提供JSON数据。 1. **Servlet基础**: - **Servlet定义**:Servlet是Java编程语言中的一个接口,由Java Servlet API提供,...

    基于servlet3.0手写springmvc

    在手写Spring MVC时,我们需要实现一个容器来管理bean的生命周期,通过注解如`@Autowired`和`@Component`等来实现依赖注入。 在手写Spring MVC的过程中,我们需要实现以下几个关键步骤: 1. **初始化容器**:创建...

    用servlet写的九九乘法表

    首先,我们需要了解Servlet的生命周期。Servlet在服务器启动时并不立即加载,而是在接收到第一个请求时进行初始化,创建Servlet实例。然后,每次有新的请求到达,服务器都会调用Servlet的`service()`方法来处理请求...

    使用javaweb写Servlet

    在本篇文章中,我们将深入探讨如何使用JavaWeb技术来编写Servlet,以及相关的知识点。...在实际开发过程中,不断学习和理解Servlet生命周期、线程安全、性能优化等方面的知识,将有助于提升你的编程技能和项目质量。

    servlet反编译源码

    下面,我们将深入探讨Servlet的基本概念、生命周期、执行流程以及如何通过反编译源码来增强我们的理解。 首先,Servlet是一个Java类,它实现了Servlet接口或者ServletConfig接口。最基础的是javax.servlet.Servlet...

    servlet聊天小程序

    在Servlet生命周期中,它会经历初始化、服务和销毁三个阶段。初始化阶段,Servlet容器(如Tomcat)加载Servlet类,并调用`init()`方法进行配置;服务阶段,每当接收到一个HTTP请求,Servlet容器都会调用`service()`...

    servlet用户管理界面(Oracle数据库)

    每个Servlet类都会覆盖`service()`方法,这是Servlet生命周期的核心,用于处理HTTP请求。 数据库部分,项目使用了Oracle,这是一个关系型数据库管理系统,广泛应用于大型企业级应用。在Servlet中与Oracle数据库交互...

    Servlet&JSP知识点归纳思维导图

    2. **生命周期**:Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。初始化阶段通常会执行`init()`方法,服务阶段通过`service()`或`doGet()`/`doPost()`方法处理请求,最后在销毁时调用`destroy()`方法。 ...

    java Servlet学习笔记

    Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。请求到达后,调用相应的方法处理请求。 1.7 常见错误及解决方式 常见错误包括配置错误、类路径问题、权限问题等。解决方式通常是检查web.xml配置,确保...

    自己写的比较简单的留言板(jsp+ servlet+源码和数据库)

    2. Servlet基础:了解Servlet生命周期,学习如何重写doGet和doPost方法来处理HTTP请求,以及如何在Servlet中转发请求到JSP页面。 3. 请求和响应处理:理解HttpServletRequest和HttpServletResponse接口,以及如何...

    模拟tomcat、servlet服务器

    容器管理Servlet的生命周期,处理线程安全问题,提供配置和部署选项。在模拟中,我们需要自己实现类似的功能,比如Servlet实例的创建、初始化、服务以及销毁。 8. **多线程**:为了处理并发的客户端请求,服务器...

    servlet编写购物车的添加、修改

    Servlet是Java类,继承自`javax.servlet.Servlet`或`javax.servlet.http.HttpServlet`,并重写其生命周期方法,如`init()`, `service()`, 和 `destroy()`。在HTTP请求到达时,Servlet容器(如Tomcat)会调用`service...

    利用servlet动态生成验证码

    1. Servlet基础知识:了解Servlet的生命周期和HTTP请求处理。 2. HttpServlet的doGet和doPost方法:理解何时以及如何使用这两个方法。 3. 随机数生成:使用Java的Random类生成随机字符串。 4. 图像处理:利用Java的...

    servlet Session和Cookies小整合

    Servlet 的生命周期包括五个阶段: 1. 加载:在服务器端,ClassLoader 将 Java 程序加载成 class。 2. 实例化:创建一个实例对象。 3. 初始化:init 方法执行初始化。 4. 处理请求:各种方法,如 doGet 和 doPost。...

    java-servlet-api.doc

    一个Javaservlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。 所有的...

    使用Servlet技术响应用户请求

    常见的Java Servlet容器如Tomcat或Jetty,它们支持Java Servlet规范,能托管Servlet类并管理它们的生命周期。部署Servlet时,需要将编译后的`.class`文件放入服务器的相应目录,并在`web.xml`配置文件中声明Servlet...

    java+servlet+ajax程序

    1. 生命周期:Servlet有三个主要阶段:加载、初始化和销毁。 2. doGet()与doPost():分别对应HTTP的GET和POST请求,用于处理客户端请求。 3. HttpServlet:Servlet的基类,提供了基本的HTTP请求处理方法。 三、Ajax...

    JSP Servlet性能分析.rar

    2. JSP生命周期与Servlet生命周期: - JSP被首次请求时,会被转换为Servlet类(编译阶段),然后进行加载、实例化、初始化。后续请求会直接调用这个Servlet实例。 - Servlet的生命周期包括初始化、服务、销毁三个...

Global site tag (gtag.js) - Google Analytics