遇到问题介绍:项目中上传文件到服务器。如果使用tomcat下的目录作为上传图片的路径,则每次重启服务器图片将消失。
因为开发工具的项目中没有该图片,每次重启服务器重新部署的时候将会删除开发工具的项目中不存在的文件
解决:可以使用tomcat的配置文件将某个请求 映射到 物理路径下 ,完成图片的回显—在Tomcat的server.xml设置虚拟路径!
如,请求http://localhost:8080/upload/resources/1.jpg,让其自动去本机D盘D:\upload\resources路径下寻找
操作步骤:
找到Tomcat/conf/server.xml文件
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<!-- 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
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="MavenWebProject" path="/MavenWebProject" reloadable="true" source="org.eclipse.jst.jee.server:MavenWebProject"/>
<Context docBase="JavaSE-JS" path="/JavaSE-JS" reloadable="true" source="org.eclipse.jst.jee.server:JavaSE-JS"/>
<!-- 这里添加以下语句-->
<!-- To Solve upload file -->
<Context path="/upload/resources/" docBase="D:\upload\resources\"></Context>
</Host>
重启Tomcat,这样当请求http://localhost:8080/upload/resources/1.jpg,
服务器会自动去本机D盘D:\upload\resources路径下寻找图片1.jpg。
上面示例没有添加contextPath,如果访问URL存在contextPath呢?如下所示:
# url
http://localhost:8080/furniture/upload/1.jpg
# 虚拟路径设置
<Context docBase="D:\my\upload\" path="/furniture/upload" reloadable="true"/>
这里处理的是动态上传图片并且进行图片回显。
如果是Eclipse下项目中的静态资源文件,部署的时候会同时部署到Tomcat/webapps(Eclipse默认的项目发布目录不是为Eclipse自身下的一个文件夹,请手动修改)下。
可以直接请求,不用进行目录映射。
题外话:
如果Tomcat重启后,发现修改的server.xml自动还原了。
两种解决思路:
① 修改Eclipse工具下的Servers里面的server.xml , 使其保证与你想要修改成的目标一致。
因为自动发布的时候,会默认加载这里面的context.xml 和 server.xml !
② 取消自动发布 !
|