2010-06-12 94 views
2

我有一個web應用程序,我想我的定義index.jsp文件中顯示當輸入的網址是這樣的:如何在web.xml中定義一個url未找到servlet映射?

www.mysite.com 
www.mysite.com/ 
www.mysite.com/index.jsp 

但是如果輸入任何其他網址,如:

wwww.mysite.com/g 

我想要一個特定的servlet來處理請求。在我的web.xml文件中,我這樣做:

<servlet> 
    <servlet-name>ServletCore</servlet-name> 
    <servlet-class>com.me.test.ServletCore</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ServletCore</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

從而讓ServletCore的servlet拿起任何URL,但預計它接管了連:

www.mysite.com/index.jsp 

類型的網址。我怎樣才能以這種方式來定義它的工作方式?

謝謝

回答

4

url-pattern/*上偵聽,每請求URL。相反,<error-page>條目web.xmlHTTP status code 404(未找到)上偵聽。

<error-page> 
    <error-code>404</error-code> 
    <location>/error</location> 
</error-page> 

再明顯地圖上/errorurl-pattern或任何你喜歡,只要<location>匹配這個servlet的。

0

問題是,servlet會佔用整個根名稱空間。爲了阻止它,把它移到子文件夾中,然後你就可以得到你想要的東西,例如

<servlet-mapping> 
    <servlet-name>ServletCore</servlet-name> 
    <url-pattern>/core/*</url-pattern> 
</servlet-mapping> 

然後,您可以使用apache重寫規則統一兩個命名空間(root和core/subdir)。或者使用重定向filter,使用映射表將請求分派到適當的URL。這將映射

index.jsp -> index.jsp 
    everything else -> core/$1 

因此,請求index.jsp去那裏,所有其他請求去做servlet。

0

只要確保您的webapp作爲ROOT運行,將您的應用程序目錄命名爲webapps/ROOT或使用ROOT.war。

然後將它添加到你的web.xml,

<welcome-file-list> 
<welcome-file>index.jsp</welcome-file> 
</welcome-file-list>