如何将弹簧控制器映射到扩展名为.jsp的URL?

我们正在将仅限jsp的应用程序迁移到Spring-MVC。 由于各种原因,我们无法更改当前页面的扩展名。 (对login.jsp的调用需要由将使用jsp文件作为视图的spring控制器处理)。

我们正在迭代地执行此操作,因此一些页面需要保留jsp文件(对welcome.jsp的调用将不会由控制器处理)。

为此,我将DispatcherDervlet和HandlerMapping映射到* .jsp,并以标准方式配置JstlView。

不幸的是,如果我浏览到//login.jsp,我会收到错误消息

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

如果我将.jsp更改为DispatcherServlet和HandlerMapping中的任何其他扩展名,则一切正常。

web.xml中:

  spring org.springframework.web.servlet.DispatcherServlet 1   spring *.jsp  

为spring-servlet.xml:

               

非常感谢。

更新 :我刚刚validation过,如果我将.jsp文件重命名为其他东西(.jst)并相应地更新viewResolver,那么一切正常。 显然,如果视图被解析为扩展名为.jsp的文件,则spring会尝试将视图转发到另一个控制器。

[公然从http://forum.springsource.org/showthread.php?13263-Using-.jsp-extension中偷走]

这对我有用。 尝试将此添加到您的web.xml文件:

  jsp /WEB-INF/jsp/*  

请注意,即使链接中的信息,我也不明白为什么这有帮助。 如果一些Spring专家可以匆匆解释,我很想知道。

我也不能保证这可能造成潜在的安全/可靠性问题,因此使用风险自负。

如果它真的不能使用.jsp扩展名(虽然我个人看不出任何原因),你可以尝试使用http://tuckey.org/urlrewrite/来重写url。