2009-09-28 127 views
3

我希望我的一個servlet(test2)處理「/」請求(即http://localhost/),而另一個servlet(test1)處理所有其他請求(「/ *」)。通配符請求的web.xml servlet映射

設置我的web.xml以下,但問題是,所有的請求去test1.jsp(甚至是「/」請求)

誰能告訴我如何做到這一點?

<servlet> 
    <servlet-name>test1</servlet-name> 
    <jsp-file>/test1.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>test1</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>test2</servlet-name> 
    <jsp-file>/test2.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>test2</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

----編輯-----

我意識到我的問題是有點不明確,不完整的。這裏是正是我想要完成一個例子..

  1. http://mytestsite.com/ - >映射到http://mytestsite.com/index.html
  2. http://mytestsite.com/servlet1 - >運行com.mytestsite.servlet1
  3. http://mytestsite.com/ * - >映射到http://mytestsite.com/catchall.jsp(我想未在web.xml中映射的所有其他請求映射到catchall.jsp)

所以我的web.xml如下所示:

<servlet> 
    <servlet-name>servlet1</servlet-name> 
    <servlet-class>com.mytestsite.servlet1</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>servlet1</servlet-name> 
    <url-pattern>/servlet1</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>catchall</servlet-name> 
    <jsp-file>/catchall.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>catchall</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

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

,所以我注意到一個奇怪的問題。當我請求http://mytestsite.com/時,它會在重定向到index.html之前轉到catchall.jsp。然而,如此之快,我根本不會注意到它擊中catchall.jsp(但我把在的System.out.println這個文件,它肯定是打它)。

回答

0

真的不確定,但可能您聲明\映射您的servlet的順序定義了優先順序。嘗試首先聲明\ map test2並查看。

親切的問候

0

儘量不要映射/請求任何東西(擺脫TEST2的servlet的),而是使用一個歡迎文件:

<welcome-file-list> 
    <welcome-file> 
    test2.jsp 
    </welcome-file> 
</welcome-file-list> 
1

,我認爲你的目標是一個有點混亂,脆。但是,要回答您的問題,請嘗試http://your-domain.com/請求的歡迎文件條目。

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

然後讓test2.jsp執行重定向或轉發到應用程序中的某個其他「控制器」是最常見的。這樣你的MVC總是被解僱,即使在http://your-domain.com/請求。

如果您同意我的觀點,那麼您的歡迎文件應該是index.jsp(遵循常見約定)。 index.jsp中的代碼然後是一個單線程重定向到一個'welcome'servlet。

+0

感謝您花時間看我遇到的問題。我編輯了我的問題上面。希望它清除了一切...... – jmoney 2009-09-28 16:06:48

1

使用轉發過濾器而不是servlet。使用這種方法攔截「/」非常簡單。

filter --> /* 

servlet1 --> /_some_hidden_path_1_ 
servlet2 --> /_some_hidden_path_2_