HTTP缓存:Tomcat支持HTTP缓存机制,可以通过设置响应头中的Cache-Control、Expires和ETag等字段来控制缓存策略。这些字段告诉浏览器是否可以缓存响应以及缓存的有效期等信息。
Servlet缓存:Tomcat还提供了Servlet缓存机制,它可以缓存Servlet的响应内容,避免重复生成相同的响应。通过在web.xml文件中配置
会话缓存:Tomcat支持会话(Session)缓存,可以将会话数据存储在内存中,提高会话的访问速度。可以通过在context.xml文件中配置
静态资源缓存:Tomcat可以缓存静态资源(如图片、CSS和JavaScript文件),以减少对文件系统的访问。可以通过配置context.xml文件中的
事出做项目时一个jsp页面修改后一直没有读出来,后来仔细研究了下tomcat才发现
当请求jsp页面时,Tomcat会分派给JspServlet来处理,在jspServlet的方法 service()中有一句
boolean precompile = preCompile(request);
它会判断你请求jsp页面时有没有带?jsp_precompile查询字符串,如果带了就会重新编译
然后再由serviceJspFile(request, response, jspUri, null, precompile)进一步判断是否要进行编译jsp文件,下面是JspServletWraper service方法
- if (options.getDevelopment() || firstTime ) {
- synchronized (this) {
- if (firstTime) {
- firstTime = false;
- }
- // The following sets reload to true, if necessary
- ctxt.compile();
- }
- }
关键就在Compiler的isOutDated(boolean checkClass) 的判断上 。
判断标准是,如果 jsp最后修改时间大于目标文件的最后修改时间要重新编译。还有一种情况就是即使jsp的最后修改时间晚于目标文件的最后修改时间,但只要jsp中用了
include指令包含的某个文件的最后修改时间早于对应目标文件的修改时间的话,也是需要重新编译主jsp文件的