2010-02-19 59 views
1

我讀了this後,這是類似我的問題,但沒有運氣解決問題:Spring servlet映射 - 無css或jsp!

基本上我曾經在我的web.xml以下的servlet映射:

<servlet-mapping> 
    <servlet-name>myServlet</servlet-name> 
    <url-pattern>/index.html</url-pattern> 
    <url-pattern>/channel1</url-pattern> 
    <url-pattern>/channel2</url-pattern> 
</servlet-mapping> 

這個工作完美,直到我需要映射以下網址:

/channel1/{id}/{random_text} 

其中{ID}是我對象的數字ID值和{} random_text只是存在只是爲了「業間友好的URL」。我設法使用我的控制器中的@RequestMapping以及@PathVariable來從URL中提取變量。

然而,只有這樣,我設法得到新的URL,才能成功映射在我的servlet的映射的底部添加

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

web.xml。但是,當我這樣做時,所有其他頁面(/channel1/channel2)都不顯示靜態內容(css,jsp等)。我爲靜態文件獲得了一個No mapping found for HTTP request with URI。我嘗試了各種映射的組合,如我發佈的鏈接中所建議的,但沒有任何工作。任何幫助將是偉大的!

更新:我在控制器RequestMapping如下所示(如果它有助於在所有解決這個問題。):

@RequestMapping(value = { "/channel1/{id}", "/channel1/{id}/{text}" }) 

回答

0

我意識到這個問題是什麼(也許是我在控制器早些時候我@RequestMapping設置不闡述故障):

在我web.xml我有一個網址模式:

<url-pattern>/channel/*</url-pattern> 

另外,在我的控制器我用下面的映射:

@RequestMapping(value = { "/channel1/{id}", "/channel1/{id}/{text}" }) 

的問題是,我是複製/channel1部。我隨機(幸運地)遇到了this後解釋這個問題。

長話短說,當我改變了我的映射在控制器下面它完美的作品:

@RequestMapping(value = { "/{id}", "/{id}/{text}" }) 
3

這完美地工作,直到我需要映射以下網址:

/channel1/{id}/{random_text} 

這是爲了通過/channel1/*url-pattern覆蓋。注意尾隨/*/channel1url-pattern在後面的pathinfo中不會再接受任何其他信息,它只接受確切的URL和可選的查詢參數。

+0

是我嘗試這樣做(只是又試了一次),我得到一個「沒有找到映射... '訪問網址時出錯... – oym 2010-02-19 19:21:54

+0

然後,無論測試/部署是不正確的,還是有更多的映射可以幫助和/或得到優先。 – BalusC 2010-02-19 19:23:07

+0

我的映射與我在問題中發佈的完全相同。有沒有必要的特定訂單?此外,我不確定部署是否有問題,因爲除了我需要的新網址外,其他所有網站都正確映射。 – oym 2010-02-19 19:25:20

3

處理靜態格式的最佳做法是將您需要由DispatcherServlet處理的所有URL保存在一個單獨的名稱空間(如web)中,以便靜態資源將直接供應,並且您的所有控制器URL將通過調度員通過,這裏有一個例子..

<servlet> 
    <servlet-name>web</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>namespace</param-name> 
     <param-value>web</param-value> 
    </init-param> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/web-servlet.xml</param-value> 
    </init-param> 

    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>web</servlet-name> 
    <url-pattern>/web/*</url-pattern> 
</servlet-mapping> 
+0

使用/ app /啓動應用程序URL也很常見。 – 2010-02-20 09:40:01