6

我有一个包含 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 中,我有

<servlet-mapping>
  <servlet-name>myapp</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

更新

这是 URL 映射器。如果我添加一个控制器,我如何返回 WebContent 目录中的 jsp 视图,因为视图解析器包含 /WEB-INF/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>
4

3 回答 3

16

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

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

像这样在 web.xml 中配置它:

<filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

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

<rule>
    <from>offers.html</from>
    <to>offers.jsp</to>     
</rule>
于 2010-02-25T09:16:54.050 回答
5

我会为此使用 OCPsoft PrettyFaces 或 OCPsoft Rewrite:

使用PrettyFaces

创建 WEB-INF/pretty-config.xml

<url-mapping>
   <pattern value="/offers.html" />
   <view-id value="/offers.jsp" />
</url-mapping>

使用重写

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

我希望这有帮助。

~林肯

于 2011-10-27T05:24:35.057 回答
1

首先,我假设当您说“重定向”时,您的真正意思是“转发”。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/。然后您可以按名称引用 JSP WebContent

于 2010-02-25T07:52:43.940 回答