之前项目一直运行的很正常,有一天重新打包替换了之后,访问任何页面jsp页面都是404
看了后台报错日志,发现是tomcat的work目录下的文件没有访问权限
那么这个work目录到底是干嘛的呢
1)jsp运行时都要先转换成servlet,tomcat容器启动时会在目录下的work目录中生成一系列的文件夹,.java文件以及.class文件
2)jsp最终转化为servlet,work的作用就是加快速度,如果jsp没有变化(依据时间戳)就不再重新编译。
jsp编译相关:
当请求jsp页面时,tomcat将请求交由JspServlet来处理,下面是JspServlet的service()方法
boolean precompile = preCompile(request);
它会判断我们在请求jsp页面时有没有带?jsp_precompile查询字符串,如果带了就会重新编译,然后再由serviceJspFile(request, response, jspUri, null, precompile)进一步判断是否要进行编译jsp文件。
判断标准:如果jsp文件最后修改时间晚于目标文件的最后修改时间要会重新编译,若jsp的最后修改时间早于目标文件的最后修改时间,但只要jsp中用了include指令包含的某个文件的最后修改时间晚于对应目标文件的修改时间额话,也需要重新编译主jsp文件。