Tin*_*Sky 4 java spring tomcat
我对 tomcat 服务器上的路径和 url 有点困惑,让我解释一下:
我的tomcat webapp目录是:/server
我已经在目录 /server/myapp/subfolder 中部署了一个 spring 应用程序
这意味着我的上下文路径 /server/myapp
我的 servlet 的 url-pattern 为 /subfolder/*
我的 servlet 可以通过 url http://server.com/myapp/subfolder/ 访问
在我的许多弹簧控制器中,我返回一个重定向:
return "redirect:/item/list";
Run Code Online (Sandbox Code Playgroud)
这会将访问者重定向到http://server.com/myapp/item/list
这当然会导致 404,因为正确的 url 是:http : //server.com/myapp/subfolder/item/list
这可以通过将所有内容都放在一个单独的 web 应用程序中或简单地删除 url-pattern 来轻松解决。但两者都不可能,因为单独的 webapp 意味着不同的类加载器(导致其他系统出现问题),并且像 / 这样的 url-pattern 将与服务器上运行的其他应用程序冲突。
我可以将重定向更改为“重定向:/子文件夹/项目/列表”,这将修复重定向。
是否有更好的解决方案,以便我不必在使用上下文路径的任何地方手动添加“子文件夹/”?
小智 8
我知道这是一个老问题,但如果有人正在寻找当前的答案,RedirectView(至少在最新的 5.0.9 版本中)有一个 contextRelative 布尔参数,默认情况下为 false。将其设置为 true 会使重定向上下文相对。例如:
return new RedirectView("/account", true);
Run Code Online (Sandbox Code Playgroud)
参考:文档
最后我简单地做了一个util函数:
public String redirect(String path){
return "redirect:/subfolder"+path;
}
Run Code Online (Sandbox Code Playgroud)
有点 hacky,但它允许我快速更改“子文件夹”,以防 url 模式发生变化。
视图中的 @url 标记也使用上下文路径,因此我创建了自己的 @url 标记,它将“子文件夹”添加到上下文路径。
现在春天看起来很开心,我不再收到任何 404 错误了。
| 归档时间: |
|
| 查看次数: |
10997 次 |
| 最近记录: |