1. 程式人生 > >web.xml中不增加mapping而訪問servlet

web.xml中不增加mapping而訪問servlet

tomcat servlet與web.xml的配置說明

先總結使用方法:

1、Tomcat5的web.xml下,找到invoker相關的,去掉註釋,有兩個地方
2、自己專案的web.xml中
    <servlet>
       <servlet-name>AdminMsgServlet</servlet-name>
       <servlet-class>com.you9.servlet.AdminMsgServlet</servlet-class>
    </servlet>

   <servlet-mapping>
      <servlet-name>invoker

</servlet-name>
      <url-pattern>/servlet/*</url-pattern>
   </servlet-mapping>
3、訪問
   http://localhost:8080/專案名稱/servlet/servlet名稱[AdminMsgServlet]
  

詳細說明:
我一直以為最新版是功能最完美的,所以我使用了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>

後來通過多方打聽,才知道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中使用總不成功(其它配置均正確),且啟動tomcat的dos窗口出現多行”嚴重”字樣,提示錯在web.xml上,連基本的tomcat預設頁都出錯,把以上servlet-mapping去掉,就沒出現以上問題了。後來仔細查看了網上的帖子,發現網上談呼叫器的人大都用的是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配置時,講究、對應關係,於時分別檢視tomcat4與tomcat5中的項,真的發現了

<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呼叫器,只用去掉名為invoker的的註釋符即可;而在tomcat5中,除此之外,你還要去掉同名的的註釋符。

另附:tomcat4最高版4.1.30 , tomcat5最新版5.0.27 均可在tomcat官方地址下載
http:// http://jakarta.apache.org/site/binindex.cgi下載

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

檢視tomcat 的release-note( 我用的版本: 5.0.25), 會發現如下一段:

------------------------
Enabling invoker servlet:
------------------------

Starting with Tomcat 4.1.12, the invoker servlet is no longer available by
default in all webapps. Enabling it for all webapps is possible by editing
$CATALINA_HOME/conf/web.xml to uncomment the "/servlet/*" servlet-mapping
definition.

Using the invoker servlet in a production environment is not recommended and
is unsupported.

另外,我在閱讀<core servlet and java server pages: 2nd editon> 時,書中只是在輕描淡寫的說了一句與 /servlet 對映相關的話。這點,不知難倒過多少英雄!