失控的spring mvc 404

这是一个很奇怪的情况,代码是绝对正确的,但访问页面时有时404,有时正常(就是那种404,你多点几次又可能好了的情况)。

首先认真阅读了代码,确定没问题。而其它controller也是一样写法,没出现此类情况。

那么直接看tomcat日志(logs/catalina.out),在出现404的时候出现了以下错误:

14-Jun-2018 20:16:45.016 警告 [http-nio-8080-exec-191] org.apache.jasper.compiler.Compiler.generateJava Failed to delete generated Java file [/home/testuser/tomcat/work/Catalina/localhost/seams/org/apache/jsp/WEB_002dINF/jsp/dot/dotList_jsp.java] 

那么就简单了,直接定位到这个文件所在目录看看:

ls -l /home/testuser/tomcat/work/Catalina/localhost/seams/org/apache/jsp/WEB_002dINF/jsp/dot/dotList_jsp.java

发现了这个文件所属用户是root,而tomcat是用普通用户启动的。那么得到结论,就是文件权限问题了。应该是在某个时刻启动tomcat的时候使用了root权限,导致这个新建的文件或目录属于root用户了。而其它controller未出现这种情况,是因为,那些文件或目录在“这某个时刻”之前就已经存在了的,所以并不会出现这种问题。接下来直接修改文件所属为当前tomcat启动用户就可以了。

sudo chown -R testuser:testuser ./ 

以上是帮助一个朋友所解决的问题,觉得有必要记录下。所以建议,在日常工作中还是要多多熟悉linux知识比较好。而且要养成一定的开发习惯,这样样会避免很多问题。

以笔者多年的工作经验来看,很多朋友在开发中会碰到各种基础问题(如工具问题、环境问题、配置问题、权限问题等等),而笔者极少碰到,能给出的建议就是一切按规范来。理解了在去做,这样自然而然就不会碰到奇葩问题了。

PS:“奇葩问题”是指那些花费很长时间才解决,解决之后发现又如此简单,只是因为自己粗心导致的,一个让你恨自己的问题。 而一般这种问题,就算解决了,也无法让你获得提高。

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:失控的spring mvc 404

本文地址:https://jizhong.plus/post/2018/06/spring-mvc-404.html