【问题标题】:Spring Framework: trying to add 301 redirect in dispatcher-servlet.xmlSpring Framework:尝试在 dispatcher-servlet.xml 中添加 301 重定向
【发布时间】:2014-03-23 11:49:25
【问题描述】:

我继承了一个(写得不好)Java web 应用程序,它有一堆我需要更改的 URL,但我不想为了 SEO 目的而破坏页面排名,所以我想让它们自动执行 301重定向。该应用程序使用 Spring 进行路线映射。我对 Spring 和 JavaEE 还很陌生,所以请原谅任何 n00bness 并帮助启发我。 :-)

应用程序的路由在src/main/webapp/WEB-INF/dispatcher-servlet.xml 中定义,它们被映射到处理每个请求的实际 JSP。有几十条路线需要改变。配置如下所示:

<bean id="urlMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="order" value="3" />
    <property name="mappings">
        <props>
            <prop key="/foo.html">fooController</prop>
            <prop key="/blah.html">barController</prop>
            ...
        </props>
    </property>
</bean>

在该文件的其他地方,定义了它们的控制器,例如:

<bean name="fooController"
    class="org.springframework.web.servlet.mvc.ParameterizableViewController"
    p:viewName="path/to/foo" />
<bean name="barController"
    class="org.springframework.web.servlet.mvc.ParameterizableViewController"
    p:viewName="path/to/bar" />
...

我想我应该能够编辑这些配置,以便为某些路由提供 301 重定向到其他路由,而无需求助于自定义控制器或类来处理重定向。我一直在谷歌搜索和搜索,但我没有找到它。这可能吗?如何?或者这样做的最佳实践是什么?

【问题讨论】:

  • 我不确定它是否会起作用,因为我从未尝试过,但也许您可以将 p:viewName 值更改为 "redirect:/my/new/path"。我认为这可能有效,因为它是一个有效的视图名称。
  • 成功了!谢谢@巴特。如果您将此作为答案发布,我会将其标记为正确。

标签: jsp jakarta-ee spring-mvc servlets


【解决方案1】:

您可以简单地将重定向语句设置为 viewName 属性。您通常会从处理程序(映射的控制器方法)返回的任何视图名称字符串都应该是有效的。

<bean name="barController"
    class="org.springframework.web.servlet.mvc.ParameterizableViewController"
    p:viewName="redirect:/my/new/path" />

【讨论】:

  • 我发现如果使用 Spring 3.0+,它也可以这样做:&lt;mvc:view-controller path="some-path.html" view-name="redirect:/other-path.html"/&gt;。比使用&lt;bean&gt; 更简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 2014-04-27
  • 2016-03-23
  • 2017-02-15
  • 1970-01-01
相关资源
最近更新 更多