Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-将一个URL重写为另一个URL_Java_Spring_Spring Mvc_Url Rewriting_Prettyfaces - Fatal编程技术网

Java Spring-将一个URL重写为另一个URL

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

我有一个包含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
重定向到
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
    定义

  • 您可以尝试让控制器返回类似于
    。/../other.jsp
    的视图名称,并希望servlet容器解析为
    /WEB-INF/jsp/。/../other.jsp
    /other.jsp

  • 只有当控制器返回视图名称时,才会参考视图解析器。控制器不必返回视图的名称,它们可以直接返回
    视图
    对象,在本例中是
    JstlView
    。这可以指向您喜欢的任何JSP。您可以选择一些控制器返回视图名称,一些控制器返回
    视图
    对象

  • 从视图解析器中删除
    前缀
    属性。这意味着您还必须更改每个现有控制器,在它们返回的每个视图名称前面加上
    /WEB-INF/jsp/
    。然后您可以按名称引用
    WebContent
    下的JSP


我认为您可以从tuckey.org制作的开源URL重写库中获益。SpringSource的人认可这个库,因为如果您使用SpringRoo创建项目,它会自动为您设置,所以它的质量很好。我已经在许多项目中成功地使用了它

请参阅其主页。Skaffman是对的,您希望它“向前”而不是重定向,这是默认行为

在web.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>

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>
我希望这有帮助


~Lincoln

UrlFilenameViewController只会将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的作者。你应该提到你的回答是有偏见的。