`
yznxing
  • 浏览: 367200 次
  • 性别: 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 temple

    缺省的 init() 方法设置了 Servlet 的初始化参数,并用它的 ServletConfig 对象参数来启动配置, 因此所有覆盖 init() 方法的 Servlet 应调用 super.init() 以确保仍然执行这些任务。在调用 service() 方法之前,应...

    Servlet过滤器使用

    这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数。 b、doFilter(ServletRequest,ServletResponse,FilterChain)...

    说一说servlet的生命周期

     当客户第一次请求时,首先判断是否存在servlet对象,第一次请求时不存在,则由tomcat创建对象,调用init()方法对其初始化,用service()方法判断是post请求还是get请求,调用对应的方法返回给客户。  当客户第...

    JSP/Servlet Java面试逻辑题

    通过调用servlet的init()方法进行servlet的初始化。 通过调用service()方法实现,根据请求的不同调用不同的do***()方法。 结束服务,web容器调用servlet的destroy()方法。 3、Servlet的基本架构 public class ...

    java-servlet-api.doc

    在初始化过程中,javax.servlet.Servlet接口的init()方法提供了Servlet的初始化信息。这样,Servlet可以对自己进行配置。 init()方法获得了一个Servlet配置对象(ServletConfig)。这个对象在Servlet引擎中执行,并...

    Servlet生命周期与工作原理

    Servlet生命周期与工作原理 Servlet生命周期分为三个阶段:  1,初始化阶段 调用init()方法  2,响应客户请求阶段 调用service()方法  3,终止阶段 调用destroy()方法 Servlet初始化阶段:

    servlet技术功能全套

    servlet程序设计与支持 Servlet生命周期分为三个阶段:  1,初始化阶段 调用init()方法  2,响应客户请求阶段 调用service()方法  3,终止阶段 调用destroy()方法

    Javaweb面试题.docx

    Servlet 生命周期开始,容器运行其init 方法进行Servlet 的初始化,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy...

    JSP和Servlet面试题

    方法初始化servlet,再根据不同请求调用doGet或doPost方法,最后再通过destroy()方法进行销毁。 2.Get和Post的区别 在页面提交数据时,get的数据大小有限制4k,post没有限制,get请求提交的数据会在地址栏显示,...

    java面试宝典

    34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点和原理。并考虑2 种回收机制。 11 38...

    千方百计笔试题大全

    34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点和原理。并考虑2 种回收机制。 11 38...

    tomcat中Servlet的工作机制详细介绍

    在研究Servlet在tomcat中的工作机制前必须先看看Servlet规范的一些重要的相关规定,规范提供了一个Servlet接口,接口中包含的重要方法是init、service、destroy等方法,Servlet在初始化时要调用init方法,在销毁时要...

    Servlet的生命周期1

    Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用de

    Servlet的生命周期

    2.初始化:服务器实例化之后会调用init()方法,执行初始化逻辑。该方法默认是空白的,开发者希望servlet 实例化之后执行什么样的逻辑,可以在这个方法中写代码。该方法在servlet生命周期中,只会执行一次。 3.服务:...

    提升JSP应用程序的七大绝招

    当应用服务器初始化servlet实例之后,为客户端请求提供服务之前,它会调用这个servlet的init()方法。在一个servlet的生命周期中,init()方法只会被调用一次。通过在init()方法中缓存一些静态的数据或完成一些只需要...

    Servlet生命周期

    1.Servlet 通过调用 init () 方法进行初始化。 2.Servlet 调用 service() 方法来处理客户端的请求。 3.Servlet 通过调用 destroy() 方法终止(结束)。 4.最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的...

    2019年VIPKID Java工程师一面1

    (2)初始化(调用init方式,进行初始化)实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作) (3)

    pinnuli#learning_notes#servlet笔记1

    1.初始化,调用init()方法,生成Servlet实例 2.响应客户请求,调用service()方法,由service()方法根据提交方式悬着执行doGet

    Servlet 点击计数器

    Servlet 点击计数器 ...很多时候,您可能有兴趣知道网站的某个特定页面上的总点击量。... ...在 init() 方法中初始化一个全局变量。...在下次初始化 Servlet 时,该值可在 init() 方法内被读取。这一步是可选的。 如果您只

    Java框架

    Java框架ssh/ssm Spring 什么是 spring? Spring 是个 java 企业级应用的开源开发框架。...(默认) 2,调用 Servlet 对象的 init()方法,初始化 Servlet 的信息,init()方法只会在创建后被调用一次; 3,响应请求

Global site tag (gtag.js) - Google Analytics