Tomcat下的work文件夹

本文详细解析了Tomcat服务器中JSP页面的编译及缓存机制,包括JSP转为Java文件的过程、编译为class文件的方式、工作目录的作用以及如何通过清理缓存或修改配置文件实现JSP更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发布过来,源文件没有发布过来,但这里的jsp没有经编译的)。tomcat有一个work目录,里面存放了页面的缓存,访问的jsp都会编译(从 work里进入Catalina后的如localhost站点文件夹下的项目,我们可以看到那些jsp页面会被编译成应该是servlet文件,下次再来 访问时,就直接运行servlet类就可以向客户端反应响应页面了,所以有的博客说第一次访问时会比较慢,是因为新发布上去的页面在第一个人访问时,会先 编译成servlet文件,所以慢了,一旦编译好,那么除非jsp页面修改,不然下次访问直接运行servlet就可以响应用户,所以快),编译后的文件都会存储在work目录下。而tomcat显示的目录,都会从这个缓存里找编译后的jsp对应的class文件。所以当清空了work目录后,该过程将会从新来过。

有的时候会遇到一个问题,就是修改后的页面在tomcat运行的时候显示不了修改后的痕迹。这个时候删除work目录下对应的项目文件夹,重新启动tomcat就可以了。

2、在tomcat的conf配置文件夹下的server.xml文件里配置了Host name后,就会在conf下的Catalina文件夹和work下的Catalina文件下建立站点名称的文件夹,项目每次发布都会放入来,也会记录到 conf下的Catalina文件夹的配置文件里去。

最近发现,很多网友喜欢把tomcat的work目录里的东西叫做缓存,其实那不是很恰当,work目录只是tomcat的工作目录,也就是tomcat把jsp转换为class文件的工作目录,这也正是为什么它叫work目录而不是cache目录的原因。
  jsp,tomcat的工作原理是当浏览器访问某个jsp页面时,tomcat会在work目录里把这个jsp页面转换成.Java文件,比如将index.jsp转换为index_jsp.java文件,而后编译为index_jsp.class文件,最后tomcat容器通过ClassLoader类把这个index_jsp.class类装载入内存,进行响应客户端的工作。

  tomcat会定时稍描容器内的jsp文件,读取每个文件的属性,当发现某个jsp文件发生改变时(文件的最后修改时间与上次稍描时不相同时),tomcat会重新转换、编译这个jsp文件。但是tomcat的稍描是定时的不是实时的,这也正是为什么jsp文件修改后需要几分钟的时间来等修改过的jsp生效。当然为了即刻生效,很多老前辈都会建议在修改jsp页面后立即清除work目录里的文件。

  另外,tomcat容器中,对转换后的java文件(比如:index_jsp.java)的编译最大只支持64k,所以在其他容器中的jsp移植到tomcat容器中时会遇到大jsp文件会发生无法编译的情况,所以建议把jsp中的业务逻辑写入单独的类,在jsp中通过调用这个类的静态方法来执行,并将jsp页面中的js提取出来放到单独的js文件内。

问题域:
如何让Tomcat自动更新class的问题。
解决方案:
一、
在安装的tomcat路径下创建独立配置文件。
例如:
创建一文件:D:\Tomcat5.5\conf\Catalina\localhost\testapp.xml

内容为:

重启Tomcat

二、
直接在tomcat 的配置文件conf/server.xml中添加内容如下:


注意是在标签下添加;
重启Tomcat

转载至:http://blog.youkuaiyun.com/wugouzi/article/details/12713559

<think>好的,我现在需要解决用户的问题:Tomcat9的webapps目录下缺少manager文件夹的原因及解决方法。首先,我得回忆一下Tomcat的结构和相关配置。 根据用户提供的引用内容,特别是引用[4]提到,有时为了安全优化会删除webapps下的内容,包括manager应用。这可能是一个原因。Tomcat9默认安装后,webapps下应该有manager、ROOT、examples等文件夹。如果这些都不见了,可能是因为安装包被修改过,或者管理员手动删除了。 另外,用户提到的引用[2]和[3]涉及到server.xml配置和虚拟目录的设置,但manager应用缺失可能更直接与webapps下的文件有关。需要确认是否在安装或部署时这些应用被移除了。比如,有些安全建议会建议删除默认应用以减少攻击面,如引用[4]所述的操作步骤。 解决方法方面,用户可能需要重新获取manager应用。可能的途径包括重新安装Tomcat,或者单独下载manager的WAR包。另外,检查Tomcat的配置文件,例如conf/Catalina/localhost/下是否有相关配置,或者是否在server.xml中禁用了manager的部署。 需要确保用户有权限访问manager应用,可能需要配置用户角色和权限,修改conf/tomcat-users.xml文件,添加相应的角色和用户。 总结可能的原因:安全优化删除、安装不完整、配置错误。解决方案包括重新部署manager应用,调整配置,设置用户权限。</think>### Tomcat9中缺少manager文件夹的原因及解决方法 #### 原因分析 1. **安全优化措施** Tomcat默认包含`manager`应用用于管理Web应用,但因其可能存在安全风险[^4],部分安装包或管理员会主动删除`webapps`目录下的`manager`、`host-manager`等默认应用。 2. **安装包不完整** 若使用非官方修改的Tomcat安装包(如精简版),可能移除了管理相关应用以减小体积。 3. **配置文件限制** 在`conf/server.xml`中,若未启用`Deploy applications configured in Tomcat instance`选项(参考[^1]),可能导致默认应用未被部署。 --- #### 解决方案 ##### 方法1:手动添加manager应用 1. **从官方安装包提取** - 下载官方Tomcat9压缩包,解压后从`webapps`目录复制`manager`文件夹到现有Tomcat的`webapps`目录。 - 或直接下载`manager` WAR包: ```bash wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.xx/bin/manager.war ``` 将其放入`webapps`目录后,Tomcat会自动解压部署。 2. **验证权限配置** 修改`conf/tomcat-users.xml`,添加用户角色(需在`<tomcat-users>`标签内): ```xml <role rolename="manager-gui"/> <user username="admin" password="密码" roles="manager-gui"/> ``` ##### 方法2:检查部署配置 1. **启用自动部署** 在IDE(如IntelliJ/Eclipse)中配置Tomcat时,确保勾选类似`Deploy applications configured in Tomcat instance`的选项(参考),否则默认应用可能不会加载。 2. **清理缓存** 删除`work/Catalina`目录下的缓存文件,重启Tomcat。 --- ##### 方法3:重建虚拟目录(高级) 若需自定义访问路径(参考[^2]),可在`conf/server.xml`的`<Host>`节点添加: ```xml <Context path="" docBase="manager" debug="0" privileged="true"/> ``` 但通常直接放置`manager`文件夹到`webapps`更简单。 --- #### 验证结果 访问`http://localhost:8080/manager/html`,输入配置的用户名密码,应能看到管理界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值