2010-05-04 76 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专家可以下载并解释它,我很乐意知道。

我也不能保证没有潜在的安全/可靠性问题,因此可能造成风险。