2010-05-04 69 views
6

我們正在將jsp-only應用程序遷移到Spring-MVC。由於各種原因,我們無法更改當前頁面的擴展名。 (對login.jsp的調用需要由使用jsp文件作爲視圖的spring控制器來處理)。如何將彈簧控制器映射到擴展名爲.jsp的url?

我們這樣做是迭代的,所以有些頁面需要保留jsp文件(對welcome.jsp的調用不會被控制器處理)。

爲此,我將DispatcherDervlet和HandlerMapping都映射爲* .jsp,並以標準方式配置JstlView。

不幸的是,如果我瀏覽到//login.jsp我得到一個錯誤說

<No mapping found for HTTP request with URI [/<context>/WEB-INF/jsp/login.jsp] in DispatcherServlet with name 'spring'> 

的所有作品,如果我改變的.jsp在DispatcherServlet的HandlerMapping的和任何其它分機。

的web.xml:

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
</servlet> 

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

爲spring-servlet.xml:

<!-- View resolver --> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
    <property name="prefix" value="/WEB-INF/jsp/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

<!-- URL Mapping --> 
<bean id="publicUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="urlMap"> 
     <map> 
      <entry key="/login.jsp" value-ref="loginController"/> 
     </map> 
    </property> 
</bean> 

非常感謝。

更新:我剛剛證實,如果我將我的.jsp文件重命名爲其他內容(.jst)並相應地更新viewResolver,則它將全部正常工作。顯然,如果視圖解析爲擴展名爲.jsp的文件,spring會嘗試將視圖轉發給另一個控制器。

回答

3

這爲我工作[公然從http://forum.springsource.org/showthread.php?13263-Using-.jsp-extension被盜。嘗試添加到您的web.xml文件:

<servlet-mapping> 
    <servlet-name>jsp</servlet-name> 
    <url-pattern>/WEB-INF/jsp/*</url-pattern> 
</servlet-mapping> 

請注意,即使與鏈接中的信息,我不明白爲什麼這有助於。如果一些Spring專家可以下載並解釋它,我很樂意知道。

我也不能保證沒有潛在的安全/可靠性問題,因此可能造成風險。