一尘不染

在spring使用url-pattern重定向的上下文路径

tomcat

我对tomcat服务器上的路径和URL有点困惑,让我解释一下:

我的tomcat webapp目录是:/ server

我已经在目录/ server / myapp / subfolder中部署了一个spring应用程序

这意味着我的上下文路径/ server / myapp

我的servlet的url模式为/ subfolder / *

可以通过url
http://server.com/myapp/subfolder/访问我的servlet。

在我的许多spring控制器中,我返回一个重定向:

return "redirect:/item/list";

这会将访客重定向到http://server.com/myapp/item/list

当然,这会导致404原因,导致正确的网址为:http :
//server.com/myapp/subfolder/item/list

只需将所有内容都放在单独的Web应用程序中,或仅删除url模式即可轻松解决。但是这两者都是不可能的,因为单独的webapp意味着不同的类加载器(会导致其他系统出现问题),并且url模式(例如/)会与服务器上运行的其他应用程序发生冲突。

我可以将重定向更改为“ redirect:/ subfolder / item / list”,这将解决重定向问题。

是否有更好的解决方案,这样我就不必在使用contextpath的任何地方手动添加“ subfolder /”?


阅读 280

收藏
2020-06-16

共1个答案

一尘不染

最后,我只是简单地创建了一个util函数:

public String redirect(String path){
    return "redirect:/subfolder"+path;
}

有点骇人听闻,但如果url模式更改,它可以让我快速更改“子文件夹”。

视图中的@url标记也使用contextpath,因此我创建了自己的@url标记,该标记将“ subfolder”添加到contextpath。

spring现在似乎很快乐,我再也没有收到404了。

2020-06-16