我对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 /”?
最后,我只是简单地创建了一个util函数:
public String redirect(String path){ return "redirect:/subfolder"+path; }
有点骇人听闻,但如果url模式更改,它可以让我快速更改“子文件夹”。
视图中的@url标记也使用contextpath,因此我创建了自己的@url标记,该标记将“ subfolder”添加到contextpath。
spring现在似乎很快乐,我再也没有收到404了。