Java Spring-将一个URL重写为另一个URL
我有一个包含Flash横幅的Spring2.5应用程序。我没有Flash组件的源代码,但它有硬编码到某些页面的链接,这些页面以Java Spring-将一个URL重写为另一个URL,java,spring,spring-mvc,url-rewriting,prettyfaces,Java,Spring,Spring Mvc,Url Rewriting,Prettyfaces,我有一个包含Flash横幅的Spring2.5应用程序。我没有Flash组件的源代码,但它有硬编码到某些页面的链接,这些页面以.html结尾。我希望能够将这些.html页面重定向到现有的jsp页面。如何让Spring将几个.html页面解析为.jsp页面 我的项目看起来像: WebContent | -sample.jsp -another.jsp WEB-INF | -myapp-servlet.xml -web.xml 我希望localhost:8080/offers
.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
我能用弹簧做这个吗?我已经在myapp-servlet.xml中定义了一个SimpleUrlHandlerMapping和UrlFilenameViewController,它必须继续为已经存在的页面提供服务
在我的web.xml中,我有
<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
myapp
*.htm
更新
这是URL映射器。如果我添加一个控制器,当视图解析器包含/WEB-INF/jsp目录时,如何返回WebContent目录中的jsp视图
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/page1.htm">page1Controller</prop>
<prop key="/page2.htm">page2Controller</prop>
</props>
</property>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
第1页控制器
第2页控制器
首先,我假设当你说“重定向”时,你的意思是“转发”。HTTP重定向在这里不合适
因此,以下是一些可以尝试的事情:
- 您不能将JSP文件从
移动到WebContent
?那么,您就不必更改/WEB-INF/JSP/
定义viewsolver
- 您可以尝试让控制器返回类似于
的视图名称,并希望servlet容器解析为。/../other.jsp
到/WEB-INF/jsp/。/../other.jsp
/other.jsp
- 只有当控制器返回视图名称时,才会参考视图解析器。控制器不必返回视图的名称,它们可以直接返回
对象,在本例中是视图
。这可以指向您喜欢的任何JSP。您可以选择一些控制器返回视图名称,一些控制器返回JstlView
对象视图
- 从视图解析器中删除
属性。这意味着您还必须更改每个现有控制器,在它们返回的每个视图名称前面加上前缀
。然后您可以按名称引用/WEB-INF/jsp/
下的JSPWebContent
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<rule>
<from>offers.html</from>
<to>offers.jsp</to>
</rule>
URL重写过滤器
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
然后,在WEB-INF/urlrewrite.xml中有一个如下元素:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<rule>
<from>offers.html</from>
<to>offers.jsp</to>
</rule>
offers.html
offers.jsp
我会使用OCPsoft PrettyFaces或OCPsoft Rewrite:
与:
ConfigurationBuilder.begin()
.addRule(Join.path("/offers.html").to("/offers.jsp"));
创建WEB-INF/pretty-config.xml
<url-mapping>
<pattern value="/offers.html" />
<view-id value="/offers.jsp" />
</url-mapping>
我希望这有帮助
~LincolnUrlFilenameViewController只会将URL模式解析为文件名,您无法将URL“映射”到其他文件。如果要将/offers.html映射到视图sample.jsp,则需要一个控制器来处理/offers.html模式并将sample.jsp作为视图返回。你能从myapp servlet.xml发布你的SimpleUrlHandlerMapping吗?@Rob Beardow-用SimpleUrlHandlerMapping和InternalResourceViewResolver@mirror303-谢谢。这非常有效,大约需要10秒钟的时间来配置。您也可以通过重写集成Tuckey模块将现有Tuckey配置用于重写。Lincoln是OCPsoft的创始人,也是PrettyFaces and Rewrite的作者。你应该提到你的回答是有偏见的。