`
yznxing
  • 浏览: 369991 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【新手记录】servlet的初始化init方法什么时候被调用?

    博客分类:
  • java
阅读更多

前几天跟几个同学聊到这个,

我一直认为的是说:在容器启动的时候,就会加载web.xml然后将里面的servlet进行初始化加载,

然后调用其init方法。

 

可是一个同学说:是在第一个请求到来的时候才调用init方法。

 

另外一个同学说:跟配置的servlet的

<load-on-startup>1</load-on-startup>

这个参数有关。

 

我当时想了下说,会不会load-on-startup配置为0就是默认跟容器一起初始化,否则就是第一次请求的时候初始化。

 

带着这个疑问做了下简单的servlet的测试。。

 

public class SimpleDispatherServlet extends HttpServlet

 

public void init() throws ServletException {
		System.out.println("SimpleDispatherServlet init");
}
 

web.xml中的配置

 

<servlet>
        <servlet-name>simpleDispatherServlet</servlet-name>
        <display-name>simpleDispatherServlet</display-name>
        <servlet-class>SimpleDispatherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
</servlet>

 

看到控制台中打印出来了

 

[INFO] Starting jetty 7.0.1.v20091125 ...
2010-05-15 21:14:31.855:INFO::jetty-7.0.1.v20091125
2010-05-15 21:14:32.155:INFO::No Transaction manager found - if your webapp requ
ires one, please configure one.
SimpleDispatherServlet init
。。。。

 

事后,我又将load-on-startup进行了参数更改,还是一样init方法还是跟容器启动的时候一起调用。不存在影响的问题。

 

看来load-on-startup跟这没关系的。想想还是我之前理解的是正确的,servlet的初始化方法一般都包括读取配置文件等很多事情,如果放在第一次请求的时候才发现问题,才进行加载,也有些太不靠谱了。

 

ok,记录一下!~

 

===============================================

 

刚开始做了这个实验觉得不靠谱,又去查询了servlet的API,具体写在下一篇博客:

 

http://guoliangqi.iteye.com/blog/670710

 

API里面很清楚的说明了oad-on-startup对servlet初始化的影响。

 

 

 

1
2
分享到:
评论
4 楼 vincenlxn 2013-01-15  
楼主的头像是 淘宝送的礼品吧 左边的那个我也有,哈哈
3 楼 yznxing 2010-09-11  
ttl1118 写道
请楼主不要误人子弟行不,自己的测试用例都没写好,还得意洋洋说记录一下

load-on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。
在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:

标记容器是否在启动的时候就加载这个servlet。

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。

<servlet> 
<servlet-name>initservlet</servlet-name> 
<servlet-class>com.bb.eoa.util.initServlet</servlet-class> 
<init-param> 
   <param-name>log4j-init-file</param-name> 
   <param-value>config/log.properties</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet> 

比如:这里的<load-on-startup>为1表示加载这个servlet并且是初始化这个类,初始化一般是调用了这个类的init方法.这个方法里可以写些对属性文件 ,或者配置文件的读取.



恩,书上以及API上写的的确是这样的。。。

我这边http://guoliangqi.iteye.com/blog/670710 再这里也说明了下。

谢谢指教,只不过我没把2篇博客的观点放一起而已。。。

而且是个人记录,也没说明就是技术总结帖啊。。。

具备识别能力的人,比如说你,是能看出其中的问题的,谢谢你的提醒,我下次注意咯~~~
2 楼 ttl1118 2010-09-09  
请楼主不要误人子弟行不,自己的测试用例都没写好,还得意洋洋说记录一下

load-on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。
在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:

标记容器是否在启动的时候就加载这个servlet。

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。

<servlet> 
<servlet-name>initservlet</servlet-name> 
<servlet-class>com.bb.eoa.util.initServlet</servlet-class> 
<init-param> 
   <param-name>log4j-init-file</param-name> 
   <param-value>config/log.properties</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet> 

比如:这里的<load-on-startup>为1表示加载这个servlet并且是初始化这个类,初始化一般是调用了这个类的init方法.这个方法里可以写些对属性文件 ,或者配置文件的读取.
1 楼 yanlp 2010-08-19  
如果为负数的话,启动容器是不会执行init方法的,楼主可以试试看.

相关推荐

    Servlet初始化参数和上下文初始化参数训练及处理数据库示例[汇编].pdf

    本文主要讲解 Servlet 初始化参数和上下文初始化参数的概念、定义、配置和获取方法。同时,通过实践演示,展示了如何在 Servlet 中读取初始化参数和上下文初始化参数,并将其显示在网页上。 一、Servlet 初始化参数...

    探讨Struts的初始化方法

    当Web应用启动时,`ActionServlet`作为Servlet初始化并存入Tomcat容器中。这一过程发生在Struts首次被使用时。`ActionServlet`在初始化过程中主要负责配置和管理整个Struts应用的环境,包括但不限于配置文件的加载、...

    servlet执行过程与生命周期

    `init()`方法只会在Servlet的生命周期中被调用一次,主要用于加载资源、创建数据库连接等初始化操作。完成初始化后,Servlet便处于待命状态,准备接收客户端的请求。 #### 二、Servlet的请求处理 当客户端发送请求...

    Servlet实验报告.pdf

    1. init() 方法:在 Servlet 生命周期中第一个被调用的方法,用于初始化 Servlet。 2. destory() 方法:在 Servlet 生命周期中最后一个被调用的方法,用于释放 Servlet 占用的资源。 3. doGet() 方法:处理 GET 请求...

    SERVLET基本原理

    init() 方法只会被调用一次,用于完成 SERVLET 的初始化工作。 service() 方法是 SERVLET 生命周期的第二个阶段,在这个阶段,SERVLET 容器会将用户的请求传递给 SERVLET,并调用 SERVLET 的 service() 方法,以...

    Servlet

    #### 三、Servlet初始化 Servlet的初始化是一个重要的步骤,涉及到资源的分配和准备。初始化过程主要由容器(如Tomcat)负责,具体步骤如下: 1. **加载Servlet类**:当服务器启动并接收到针对某个Servlet的第一个...

    Servlet接口及方法

    - 如果Servlet已经被卸载,则在新的Servlet被初始化之前,此方法不会被调用。 ##### 3. destroy方法 ```java public void destroy(); ``` **作用:** 当Servlet从服务中移除时,Servlet容器会调用此方法来释放...

    JSP\Servlet中文API文档

    `ServletConfig`接口提供了对Servlet初始化参数和Servlet上下文的访问,是Servlet与Servlet容器之间的桥梁。 - **getServletConfig()方法:** 返回传递给`init()`方法的`ServletConfig`对象,用于获取Servlet的配置...

    说一说servlet的生命周期

    `init()`方法只在Servlet的生命周期中被调用一次,因此它是设置Servlet初始状态的好时机。 3. **服务**: 初始化完成后,Servlet开始处理客户端的请求。每当一个HTTP请求到达,服务器会检查该请求是否属于已存在的...

    JSP开发Servlet重写init()方法实例详解

    Servlet接口定义了一个`init(ServletConfig config)`方法,这个方法在Servlet被加载到服务器后首次调用,用于初始化Servlet实例。`ServletConfig`接口提供了访问Servlet配置信息的方法,如获取Servlet名称、Servlet...

    log4j初始化

    3. **在Servlet中调用初始化方法**:在Servlet的`init()`方法中,获取Web应用的根目录,结合配置的文件名,构造出配置文件的完整路径,然后使用`PropertyConfigurator.configure()`方法进行初始化。 ```java ...

    Servlet中文API文档 .docx

    1. `void init(ServletConfig config) throws ServletException`:这是Servlet的初始化方法,当Servlet容器(如Tomcat)加载Servlet时调用。ServletConfig对象在此方法中传递,包含了Servlet的配置信息,如初始化...

    Servlet API 帮助文档

    - `init(ServletConfig config)`: 这是Servlet的初始化方法,当Servlet被加载到服务器时调用一次。ServletConfig对象传递给这个方法,提供了关于Servlet配置的信息。 - `service(ServletRequest request, Servlet...

    servlet源码

    ServletConfig对象提供了访问Servlet初始化参数的方法,这些参数是在web.xml文件中配置的。例如,可以获取Servlet的名称、初始化参数值等。 6. **ServletContext接口** ServletContext代表整个Web应用的上下文,...

    Servlet 生命周期.pdf

    init()方法负责初始化Servlet,service()方法负责处理请求,destroy()方法负责清理资源。doGet()和doPost()方法是service()方法的两个重要组成部分,它们负责处理GET和POST请求。 在Servlet生命周期中,init()方法...

    servlet中方法执行次序及API简介(init,service,doservice,doget等)

    1. **init()**:Servlet初始化时调用此方法。在Servlet实例化后,容器(如Tomcat)会调用此方法进行初始化操作。开发者可以在这里进行配置加载、资源绑定等一次性设置。例如,你可以加载属性文件,创建数据库连接池...

    servlet生命周期详解

    一旦Servlet对象被创建,容器会调用Servlet对象的`init(ServletConfig config)`方法进行初始化。在这个方法中,开发者可以进行一些设置和资源的加载,比如打开数据库连接、读取配置文件等。`getServletContext()`...

    servlet原理的概述

    `init`方法在servlet初始化时被调用,`service`方法在每次请求到来时被调用,而`destroy`方法在servlet被销毁前被调用。 #### 结论 通过以上分析,我们可以看到servlet提供了一种强大的机制来处理Web请求。它们...

    Servlet的应用与配置

    1. 初始化阶段:在容器实例化 Servlet 实例后,会调用 init 方法,该方法用于初始化 Servlet 并传入 ServletConfig 对象。 2. 服务阶段:在 init 方法调用后,Servlet 将调用 service 方法,该方法用于处理请求和...

Global site tag (gtag.js) - Google Analytics