身陷Tomcat4与Tomcat5中servlet调用器的迷魂阵

作为tomcat新手,我为这个问题困惑了很长时间,书上写得太简单,没涉及到;曾在CSDN上发贴,但没能到想要的答案。昨突受启发,经上机试验,才彻底解决心中的疑问。真的很简单,现发出来,供servelt/jsp的学友一起探讨,少走弯路。

 

我一直以为最新版是功能最完美的,所以我使用了tomcat5.0.19,但按书上定的我编每个servlet,调试时都要在项目目录下的web-inf/web.xml加入类似以下的代码:     

 

  <servlet>

        <servlet-name>CounterServlet </servlet-name>

        <servlet-class>mypack.CounterServlet </servlet-class>

  </servlet>

  <servlet-mapping>

         <servlet-name>CounterServlet </servlet-name>

         <url-pattern>/counter</url-pattern>

  </servlet-mapping>

 

 

  <servlet>

        <servlet-name>CounterServlet </servlet-name>

        <servlet-class>mypack.CounterServlet </servlet-class>

  </servlet>

  <servlet-mapping>

         <servlet-name>CounterServlet </servlet-name>

         <url-pattern>/counter</url-pattern>

  </servlet-mapping>

 

后来通过多方打听,才知道tomcat有个调用器(invoker servlet,只要在web.xml中加入以下代码: 

   <servlet-mapping>

        <servlet-name>invoker</servlet-name>

        <url-pattern>/servlet/*</url-pattern>

   </servlet-mapping>

 

便直接用http://localhost:8080/项目目录名/servlet/servlet 的方式直接调试,如果项目是root话,其中的项目目录可省即 http://localhost:8080/servelt/servlet。可我按上述方法在tomcat5中使用总不成功(其它配置均正确),且启动tomcatdos窗口出现多行严重字样,提示错在web.xml上,连基本的tomcat默认页都出错,把以上servletmapping去掉,就没出现以上问题了。后来仔细查看了网上的帖子,发现网上谈调用器的人大都用的是tomcat4,而且也听说tomcat5相对于tomcat4是有些改变,于是从官方网上下了tomcat4.1.30版,再按上面方法试,居然成了。自然我的上机也就完全改用tomcat4了。由于我装有win2K+winXP双系统,为了了解tomcat5的新功能,在另一系统上也装有tomcat5,但调试还是用的tomcat4,这个疑问也放下了。

        <servlet-name>invoker</servlet-name>

        <url-pattern>/servlet/*</url-pattern>

   </servlet-mapping>

 

便直接用http://localhost:8080/项目目录名/servlet/servlet 的方式直接调试,如果项目是root话,其中的项目目录可省即 http://localhost:8080/servelt/servlet。可我按上述方法在tomcat5中使用总不成功(其它配置均正确),且启动tomcatdos窗口出现多行严重字样,提示错在web.xml上,连基本的tomcat默认页都出错,把以上servletmapping去掉,就没出现以上问题了。后来仔细查看了网上的帖子,发现网上谈调用器的人大都用的是tomcat4,而且也听说tomcat5相对于tomcat4是有些改变,于是从官方网上下了tomcat4.1.30版,再按上面方法试,居然成了。自然我的上机也就完全改用tomcat4了。由于我装有win2K+winXP双系统,为了了解tomcat5的新功能,在另一系统上也装有tomcat5,但调试还是用的tomcat4,这个疑问也放下了。

 

昨才得知tomcat4.1.12之前的版本,默认情况下调用器是启用的,由于一个安全缺陷的揭示,因此,此以后的版本,调用器默认情况下是禁用的。如果要启用的话,需要将conf/web.xml文件中下面的servlet-mapping元素项取消注释。打开相应的web.xml,发现其中真的有   

 

 <!-- The mapping for the invoker servlet -->

  <!

  <servlet-mapping>

        <servlet-name>invoker</servlet-name>

        <url-pattern>/servlet/*</url-pattern>

    </servlet-mapping>

  --> 

  --> 

 

只不过加了注释符,禁用了。要解禁,根本不用再加,只用把注释符去掉就行了(当时咋没注意呢,呵呵。想当然了,我又查看了一下tomcat5的相应的web.xml,它也有这几项,被加注释,相必有这个功能呀!于是切换系统,运行,还是上面的错误。哦,对了,在web.xml配置时,讲究 对应关系,于时分别查看tomcat4tomcat5中的 项,真的发现了

   <servlet>

        <servlet-name>invoker</servlet-name>

        <servlet-class>

          org.apache.catalina.servlets.InvokerServlet

        </servlet-class>

        <init-param>

            <param-name>debug</param-name>

            <param-value>0</param-value>

        </init-param>

        <load-on-startup>2</load-on-startup>

    </servlet>

   

   

不同之处在于在tomcat5中,以上代码加了注释符被禁用了,而tomcat4却没有,这就解释为什么tomcat5总出错的原因。于是马上去掉注释符,再试tomcat5,初始化没出现“严重”字样,运行也没问题,又一个疑问解决了。

综上,在tomcat4中,启用servlet调用器,只用去掉名<servelt-mapping>项为invoker 的注释符即可;而在tomcat5中,除此之外,你还要去掉同名<servlet>项的 的注释符。

 

 

 另附:tomcat4最高版4.1.30 tomcat5最新版5.0.27  均可在tomcat官方地址下载

 http://jakarta.apache.org/site/binindex.cgi下载

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值