Spring – 将一个URL重写为另一个URL

我有一个包含Flash横幅的Spring 2.5应用程序。 我没有Flash组件的源代码,但它有硬编码到以.html结尾的某些页面的链接。我希望能够将这些.html页面重定向到现有的jsp页面。 我怎样才能让Spring将几个.html页面解析为.jsp页面?

我的项目看起来像:

 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中,我有

  myapp *.htm  

更新

这是URL映射器。 如果我添加控制器,如何返回WebContent目录中的jsp视图,因为视图解析器包含/ WEB-INF / jsp目录。

    page1Controller page2Controller         

我想你可以从tuckey.org开发的开源URL重写库中受益。 SpringSource的工作人员认可这个库,因为如果您使用Spring Roo创建项目,它会自动为您设置,因此质量很好。 我已经成功地在许多项目中使用过它。

请看这里的主页。 而Skaffman是对的,你希望它“转发”而不是重定向,这是默认行为。

在web.xml中配置它,如下所示:

  UrlRewriteFilter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter  

然后,在WEB-INF / urlrewrite.xml中有一个这样的元素:

  offers.html offers.jsp  

我会使用OCPsoft PrettyFaces或OCPsoft Rewrite:

使用PrettyFaces :

创建WEB-INF / pretty-config.xml

     

使用重写 :

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

我希望这有帮助。

〜林肯

首先,我假设当你说“重定向”时,你的意思是“向前”。 HTTP重定向在这里不合适。

因此,这里有一些尝试:

  • 你不能把JSP文件从WebContent移动到/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。