我有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版本,我将遇到麻烦。所以,如果你认为我必须从根本上改变一些方法,请指出我正确的方向。
答案 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应用程序的上下文路径
希望这有助于更进一步......