2010-02-25 52 views
5

我有一個包含Flash橫幅的Spring 2.5應用程序。我沒有Flash組件的源代碼,但它具有硬編碼鏈接到以.html結尾的某些頁面的鏈接我希望能夠將這些.html頁面重定向到現有的jsp頁面。我如何讓Spring將幾個.html頁面解析爲.jsp頁面?Spring - 將一個URL重寫爲另一個

我的項目是這樣的:

WebContent 
| 
-sample.jsp 
-another.jsp 
    WEB-INF 
    | 
    -myapp-servlet.xml 
    -web.xml 

我想localhost:8080/offers.html重定向到localhost:8080/sample.jsp

我能做到這一點與Spring?我已經在myapp-servlet.xml中定義了一個SimpleUrlHandlerMapping和UrlFilenameViewController,它必須繼續爲已經存在的頁面提供服務。

在我的web.xml,我有

<servlet-mapping> 
    <servlet-name>myapp</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

更新

這裏是URL映射器。如果我添加一個控制器,如何返回WebContent目錄中的jsp視圖,因爲視圖解析器包含/ WEB-INF/jsp目錄。

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
    <props> 
     <prop key="/page1.htm">page1Controller</prop> 
     <prop key="/page2.htm">page2Controller</prop> 
    </props> 
    </property> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 
+0

UrlFilenameViewController會只會解析URL的模式到一個文件名,你不能網址「映射」到不同的文件。 如果您想將/offers.html映射到sample.jsp視圖,您需要一個控制器來處理/offers.html模式並將sample.jsp作爲視圖返回。 你能從myapp-servlet.xml發佈你的SimpleUrlHandlerMapping嗎? – 2010-02-25 03:33:48

+0

@Rob Beardow - 用SimpleUrlHandlerMapping和InternalResourceViewResolver更新 – George 2010-02-25 04:39:50

回答

16

我想你可以從tuckey.org製作的開源URL重寫庫中受益。 SpringSource的人認可這個庫,因爲如果你使用Spring Roo來創建一個項目,它會自動爲你設置,所以它的質量很好。我在一些項目中成功地使用了它。

請參閱here的主頁。而Skaffman是對的,你希望它'轉發'而不是重定向,這是默認行爲。

,將其配置在web.xml這樣的:

<filter> 
     <filter-name>UrlRewriteFilter</filter-name> 
     <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
</filter> 

然後,在WEB-INF/urlrewrite.xml有一個這樣的元件:

<rule> 
    <from>offers.html</from> 
    <to>offers.jsp</to>  
</rule> 
+0

@ mirror303 - 謝謝。這工作完美,需要大約10秒來配置。 – George 2010-02-25 17:29:08

1

首先,我假設當你說「重定向」時,你的意思是「前進」。 HTTP重定向在這裏不合適。

SO因爲,這裏有一些事情要嘗試:

  • 你就不能從WebContent的JSP文件移動到/WEB-INF/jsp/?那麼您不必更改ViewResolver定義。

  • 您可以嘗試讓控制器返回類似../../another.jsp之類的視圖名稱,並希望servlet容器解析爲/WEB-INF/jsp/../../another.jsp/another.jsp

  • 僅當控制器返回視圖的名稱時纔會諮詢ViewResolver。你的控制器沒有返回一個視圖的名稱,他們可以直接返回一個View對象,在這種情況下,一個JstlView。這可以指向你喜歡的任何JSP。你可以讓一些控制器返回視圖名稱,有些則返回View對象。

  • 從您的視圖解析器中刪除prefix屬性。這意味着您還必須更改每個現有控制器,以便以/WEB-INF/jsp/作爲其返回的每個視圖名稱的前綴。然後您可以通過名稱參考WebContent下的JSP。

5

我會使用OCPsoft PrettyFaces或OCPsoft重寫此:

隨着PrettyFaces

創建WEB-INF /漂亮-config.xml中

<url-mapping> 
    <pattern value="/offers.html" /> 
    <view-id value="/offers.jsp" /> 
</url-mapping> 

隨着Rewrite

ConfigurationBuilder.begin() 
    .addRule(Join.path("/offers.html").to("/offers.jsp")); 

我希望這有助於。

〜林肯

+0

您也可以通過rewrite-integration-tuckey模塊使用您現有的Tuckey配置和Rewrite。 – Lincoln 2011-11-23 15:14:24

+0

林肯是OCPsoft的創始人,PrettyFaces和Rewrite的作者。你應該提到你的答案是有偏見的。 – Janning 2013-07-10 09:40:42

+4

我的答案是有偏見的。 – Lincoln 2013-07-10 14:38:57