IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 两个关于Tomcat利用的好问题 -> 正文阅读

[Java知识库]两个关于Tomcat利用的好问题

两个好玩的问题

1.为什么往 /WEB-INF/tomcat-web.xml/文件夹下写东西可以触发重加载

问题来源

问题的一切来源于一句话:

Trigger a reload of the web app by writing any file to /WEB-INF/tomcat-web.xml/ ,文件夹什么鬼!

当然多提一嘴不是每个版本这个tomcat-web.xml都生效的具体看配置,详细的往下看

解决

首先既然能够在tomcat运行后继续加载新的jar到jvm,如果是你会怎么实现呢,答案很显然,多线程,定时让一个子进程去监控文件的变化,tomcat也是如此,具体的就不多说了,也不是本篇的重点,这里只是简单提一嘴

关于本篇要探索的问题,我本来也确实不清楚,但是昨天看到一句话

Trigger a reload of the web app by writing any file to `/WEB-INF/tomcat-web.xml/` 

嗯?看到这个我愣了一下,因为在我第一认知里面都是网上说的web.xml,这个加了个前缀tomcat又是什么,并且为什么创建目录也能被识别到内容变化呢(今天一位师傅与我讨论)

首先谈谈我的第一想法,我一开始猜测是扫描到这个/WEB-INF/tomcat-web.xml/,发现是目录,是不是就去通过遍历目录下的文件内容看是否有变化呢

但是答案是No,我跟了下源码,这里我们节约时间从关键的说起org.apache.catalina.startup.HostConfig#checkResources,

我们来看看checkResources是干嘛的,会去检查哪些资源这里也很清楚了

在这里插入图片描述

我们这里研究的是/WEB-INF/tomcat-web.xml/,继续往下看

往下看,关注下

long lastModified = app.reloadResources.get(s).longValue();

光看lastModified我就大概猜到了是靠什么机制了,没错时间戳!当前文件夹下的文件变动了自然也会影响文件夹的时间戳变化,不过都来了当然还是进去看看嘛

在这里插入图片描述

确实如此,后面通过reload也就重新将/WEB-INF/lib下的jar加载进去了,昨天提过这里不再多讲

好了到了这里又是一个问题,刚才我们的资源路径是怎么取得的?

app.reloadResources这值是怎么来的呢,其实是在tomca首次运行时就设置了,在org.apache.catalina.core.StandardContext#addWatchedResource中便引入了,那值是哪来的,在项目路径/conf/context.xml

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
</Context>

哦一切也就解决了,通过配置WatchedResource来监视,这也是默认名称

2.Tomcat下/META-INF/lib中被加载的jar,如果在其/META-INF/resources/下直接写jsp可以直接访问执行

问题来源

在这里插入图片描述

很骚的东西,第一次看到,马上吃饭了,简单看了下

首先大概说一下浏览器敲下htttp://xxx/xx.jsp时候,它会检查jsp文件是否存在来避免创建垃圾文件夹和文件,也就是在

org.apache.jasper.servlet.JspServlet#serviceJspFile下的

if (null == context.getResource(jspUri)) {

往里一直跟,最终一个关键的点在org.apache.catalina.webresources.CachedResource#validateResource

在这里插入图片描述

这个JarResource里面有映射关系,我们简简单单看看webResource咋来的

在这里插入图片描述

这里只是初始化其他地方也没有

后面找了下在org.apache.jasper.servlet.JspCServletContext#scanForResourceJARs找到了答案

在这里插入图片描述

拿下!!!

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 22:56:58  更:2022-01-29 22:57:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:19:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码