2

我正在使用 Spring 3.1 来翻新一个非常古老的基于 Servlet 的站点。一些 URL 已过时。我的老板不相信网络的可靠性来维护重定向,所以她要求我将我自己的重定向从过时的 URL 放到 webapp 中。

我制作了一个名为LegacyServletController的控制器来处理过时的 URL。除非有人在 URL 上键入斜杠,否则它会很好用。Controller 方法仍然会选择它,但它不会重定向到新的 URL。它只是将新 URL 添加到地址栏中已有的 URL。

例如,这是一个过时的 URL:

http://blah.blah.blah/acme/moreinfo/

我希望它重定向到

http://blah.blah.blah/acme/home

但是,当过时的 URL 具有上述斜杠时,重定向会产生以下内容:

http://blah.blah.blah/acme/moreinfo/home

我猜我的 *-servlet.xml 中需要另一个 URL 处理程序,但我还是 Spring 新手,不知道如何设置,所以我的控制器函数可以正确处理带有和不带斜杠的过时 URL。

这是我用来处理旧 URL 的控制器类

import org.springframework.stereotype.Controller;
import org.springframework.validation.*;
import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;


import org.apache.log4j.Logger;

@Controller
public class LegacyServletController {

    private static final Logger logger = Logger.getLogger(LegacyServletController.class);

    // Redirect these legacy screns "home", the login screen via the logout process
    @RequestMapping({"moreinfo","other_dead_screen"})
    public String home() {
        logger.debug("started...");
        return "redirect:home";

    }// end home()  

}// end class LegacyServletController

这是我的 acme-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

  <context:component-scan base-package="com.acme.controller" />

  <mvc:resources mapping = "/**" location = "/,file:/apps1/bea/user_projects/domains/acme/common/,file:/c:/ftp/acme/"/>
  <mvc:annotation-driven/>

  <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name = "prefix" value = "/jsp/"/>
    <property name = "suffix" value = ".jsp"/>
  </bean>

  <bean name="af" class="com.acme.controller.security.CustomAuthenticationFilter"/>

</beans>
4

2 回答 2

4

返回语句应为:return "redirect:/home". 控制器应该返回视图解析器的绝对路径。

这个问题的答案也很有帮助:redirect in Spring MVC

于 2012-07-24T17:47:33.820 回答
0

最好为重定向提供完整路径,理想情况下您可以 return redirect:/home,这将重定向到相对于您的 Web 应用程序根目录的路径 -http://blah.blah.blah/acme/home

于 2012-07-24T17:11:24.293 回答