在tomcat\webapps\下创建的文件夹为什么tomcat一重启就会丢失了?,解决方法。。

本文详细解析了在使用Tomcat部署项目时,图片上传后在重启或清理缓存后丢失的问题。通过修改web.xml和server.xml配置,将图片保存路径指向项目目录,确保重启项目或清理缓存后图片仍可保留。

在写了一个图片上传的方法时候,先判断有没有这个目录,没有就自动建立一个。然后开始上传图片,能成功,能在服务器找到文件夹和相应的文件。但是,重启项目,或者清理缓存之后,图片和文件夹就会自动被删除,不见了。这个我也是郁闷了很久的,就各种在网上搜索。。。功夫不负有心人

 

1修改/tomcat/conf/web.xml文件:


<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

2修改/tomcat/conf/server.xml文件:

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
 
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->
 
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access_log." suffix=".txt" pattern="common"                 
          resolveHosts="false"/>
        -->
        <!--<Context path="/ser" docBase="D:\project\myProject\editor\WebRoot"></Context>-->
        <!--<Context path="/mvc" docBase="D:\project\myProject\你的项目名\WebRoot"></Context>-->
</Host>

分析:
重新redeploy的时候,  tomcat 会同步你本地的文件 ,因为本地没有相应的文件夹导致文件丢失。
这只是在开发过程中会遇到的问题 实际应用中 tomcat 只会 startup.bat/sh shutdown.bat/sh
我们这样做,其实就是给工程配置虚拟路径,这样tomcat在启动的时候直接找到工程了,
上传的图片就不会仅仅只在/tomcat/webapps/目录,而直接到了你的工程里,
不管你怎样重启项目,或者清理缓存,上传的文件依然存在!
 

### Tomcat Webapps 文件缺失原因分析 当遇到Tomcat `webapps`目录下的文件(如图片)在重启丢失的情况,通常有以下几个主要原因: #### 1. 自动部署机制的影响 Eclipse或其他IDE工具会自动管理项目的部署过程。每当项目发生更改或执行重启操作时,这些工具可能会清理并重新部署整个应用,从而覆盖掉原有的静态资源文件[^3]。 #### 2. Server.xml 被重写的风险 如果直接修改位于IDE工作区内的`server.xml`配置,则该文件可能随着每次构建而被刷新回默认状态,进而影响到之前设置好的外部路径映射等功能。 ### 解决方案建议 为了防止上述情况的发生,并确保上传至Tomcat的应用程序能够稳定地访问所需文件,可以采取如下措施之: #### 方法:调整应用程序逻辑以支持本地磁盘存储 通过改变业务流程设计,使用户提交的数据不再存放在Tomcat内部的临时位置(`webapps`)内;而是指向操作系统级别的绝对物理地址。例如,在Java代码里指定个固定的文件夹用于存放各类多媒体素材,像这样定义变量来表示目标路径: ```java String pic_path = "D:\\my_project_pics\\"; // 或者其他任何安全可靠的持久化区域 ``` 这种方法的好处在于即使服务器停止运行也不会影响已有的资料库完整性[^1]。 #### 方法二:优化Tomcat配置实现永久性的文件托管服务 对于希望继续利用Tomcat自带功能完成这项工作的开发者来说,可以在不依赖于特定IDE的情况下编辑真正的Tomcat安装包里的全局配置文档——即找到真实的`conf/server.xml`文件而非副本进行适当改造。具体做法是在Host节点下新增Context元素声明自定义上下文环境及其关联的实际硬盘分区,样例如下所示: ```xml <Host name="localhost" appBase="webapps"> <!-- ... --> <Context docBase="/path/to/your/persistent/storage" path="/static-resources"/> </Host> ``` 这里的关键是要保证所指代的位置不会因为简单的工程更新动作遭到破坏,同时还要注意权限控制等问题以免引发安全隐患。 #### 方法三:禁用IDE中的自动发布特性 考虑到某些场景下确实有必要保留原有结构不变,此时可以选择关闭集成开发环境中有关自动化发布的选项,转而在命令行界面手动触发打包与上线流程。这样做虽然牺牲了定程度上的便捷性,但却能有效规避不必要的风险。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值