Spring RedirectView在不同的tomcat安装中表现不同

时间:2011-01-26 00:08:04

标签: java tomcat servlets redirect spring-mvc

我有2个tomcat实例。两者都在代理apache httpds。我在Spring控制器中的代码如下所示:

@RequestMapping(value = "/doSuperSexyStuff", method = RequestMethod.GET)
public String viewSuperSexyStuff() {
    return "redirect:/mySuperSexyStuff";
}

在我在Windows上的第一次tomcat安装中,我将somedomain1.dev重定向到http://localhost:8080/myapp,一切都运行良好。重定向转到http://somedomain1.dev/mySuperSexyStuff

在另一个tomcat安装(在Linux上),重定向相对于上下文路径工作,用户最终在http://somedomain2.dev/myapp/mySuperSexyStuff,这显然是错误的。

我应该怎样做才能让spring忽略上下文路径并将用户重定向到“所属”的位置?

我的应用程序中的所有URL都是绝对的(包括jsps中的链接,重定向URL和使用链接的所有位置)。我想这不是正确的做法:如果我必须实施网站的HTTPS版本,我将遇到麻烦。所以,如果你认为我必须从根本上改变一些方法,请指出我正确的方向。

3 个答案:

答案 0 :(得分:8)

不要返回一个非常不灵活的String,而是考虑返回一个View:

@RequestMapping(value = "/doSuperSexyStuff", method = RequestMethod.GET)
    public View viewSuperSexyStuff(){
    return new RedirectView("/mySuperSexyStuff");
}

重定向视图有一个构造函数,它接受一个boolean contextRelative,所以下面的代码与上面相反:

return new RedirectView("/mySuperSexyStuff", true);

你的所有网址都应该是上下文相关的,除非你真的指出你的网站,所以链接到css,图片资产等应该在jsp的使用<c:url />标签来解析路径。

答案 1 :(得分:0)

您可以实现此目的的一种方法是使用部署到根目录的Web应用程序,而不是上下文“myapp”。这是有道理的,因为您配置了单独的域。只需将所有文件放在tomcat根文件夹中即可。

答案 2 :(得分:0)

Spring documentation for MVC表示路径始终与您的上下文路径相关。

据我所知,您有两种选择:

  • 在重定向中使用绝对路径,例如“http:// somedomain ....”

  • 检查您的configuration Web应用程序的上下文路径

希望这有助于更进一步......