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。