Spring Boot WAR部署后Linux环境浏览器返回空白页问题排查
排查Spring Boot WAR包在Linux上返回空白页(关联404响应)的问题
哥们,这种Windows本地跑正常、一到Linux就掉链子的问题,多半是环境配置或者部署细节的差异导致的。结合你提到的和404响应相关,咱们从这几个核心方向一步步排查:
1. 先查部署环境的基础配置
- 权限与路径检查:先确认Linux上的Servlet容器(比如Tomcat)有没有正确解压你的WAR包,去
webapps目录下看看应用文件夹的权限——用ls -l命令,确保Tomcat的运行用户(一般是tomcat)对这个文件夹有读写权限,不然可能连资源都读不出来。 - 上下文路径一致性:本地是不是用
localhost:8080/你的应用名访问?Linux上会不会因为把WAR包改名为ROOT.war,导致上下文路径变成了localhost:8080/?路径不匹配的话,所有路由都会走404逻辑。
2. 深挖404处理的跨环境差异
你试过把404重定向到test.jsp,那得先确认这个逻辑在Linux上能不能正常工作:
- JSP文件是否被正确打包:用
jar tf 你的应用.war命令看看WAR包里有没有WEB-INF/jsp/test.jsp——有时候本地开发时文件在,但打包漏了就麻烦了。 - 视图解析器配置是否生效:检查
application.properties(或yml)里的视图配置:
会不会Linux环境用了spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jspapplication-prod.properties这类环境配置文件,覆盖了默认的视图路径?要是路径错了,Spring找不到test.jsp,自然返回空白。 - Spring Boot的错误处理优先级:如果你用
web.xml配置了404错误页,要注意Spring Boot WAR部署时,这个配置可能会被Spring自带的错误处理覆盖。不如试试用Spring的方式处理:
先在配置文件加两行:
然后写个全局异常处理器:spring.mvc.throw-exception-if-no-handler-found=true spring.web.resources.add-mappings=false@ControllerAdvice public class Global404Handler { @ExceptionHandler(NoHandlerFoundException.class) public String handle404() { return "test"; // 对应视图解析器里的test.jsp } }
3. 开日志抓细节,别光看启动日志
启动没报错不代表请求处理没毛病,咱们开详细日志看看:
在application.properties里加这两行:
logging.level.org.springframework.web=DEBUG logging.level.org.apache.catalina=DEBUG
重新部署后,访问路由时去看Linux上容器的日志(比如Tomcat的logs/catalina.out),重点看这几个点:
- 请求有没有走到你的控制器?还是直接触发了404?
- 处理404时,视图解析器有没有报“找不到test.jsp”的错误?
- 有没有权限相关的报错?比如读JSP文件被拒绝。
4. 排查路由匹配的大小写问题
Windows的文件系统不区分大小写,但Linux是严格区分的!比如你的控制器写的是@RequestMapping("/User"),本地访问/user能匹配,但Linux上就会直接404。检查下所有路由的大小写是不是和访问的路径一致。
5. 确认WAR包的完整性
有时候本地打包的缓存会搞事情,建议用mvn clean package重新打一次包,然后对比本地和Linux上的WAR包内容——可以解压后看看目录结构,有没有缺失的依赖或者资源文件。
先按这个顺序排查,应该能找到问题。要是有具体的日志片段或者配置代码,也可以贴出来,咱们再精准分析。
内容的提问来源于stack exchange,提问作者ApollonDigital
相关产品推荐
相关产品推荐

