jsp+servlet上传图片本来是一个简单的问题,网上也有很多写得很好的代码可供参考。但实际上我在上传图片的过程中还是碰到了很多奇怪的问题,花费了很多时间,所以在这里记录一下当中碰到的一些问题。
笔者使用的是eclipse+tomcat7.0来部署web项目(后来才知道最大的问题才出在这里)。如果是直接将web项目部署在tomcat的webapps文件夹下,那么下面的问题就可以跳过了。
图片上传到tomcat服务器的项目目录下面后,只要调整代码,图片就会被自动删除
当时碰到这个问题的时候,相当的纳闷,也不怎么会表述这个问题,所以疯狂的胡乱搜索,终于让我碰上了相似的问题。大致的解答如下:
将图片上传到tomcat服务器下的目录后,当在eclipse中重启tomcat时,项目会被重新部署,图片不属于项目内容,所以图片会被清空。
我们可以自己对比一下eclipse工程下的项目 和tomcat服务器下的项目,eclipse工程下的项目里面是不包含我们的图片的(因为我们本来就是将图片写入到tomcat服务器下的项目中),而tomcat服务器是通过eclipse来启动的,此时tomcat服务器下的项目是eclipse工程项目的拷贝,此时图片就会被删除。
上面后面一部分的解释是笔者自己瞎扯的,先留个坑,以后真正想清楚了,再回来补上
既然如此,那我就把图片上传到一个不同的地址上,D:\images。这样一来就没有问题了。我图片上传成功了,那我肯定要能使用吧。
我使用img标签来引用图片。
<img src="D:\images">
像上面这样引用绝对地址肯定是不行的(这里不是很清楚的可以google一下)。需要对tomcat配置虚拟路径来使用绝对路径
笔者根据google上80%的关于如何配置虚拟路径 的解答,开心的在tomcat服务器下面server.xml 文件中的<Host>标签中加下了如下的一句:
<Context debug="0" docBase="D:\images" path="/images" reloadable="true"/>
docBase后面是你的绝对地址,path后面是你的虚拟地址
然鹅问题又来了。
tomcat配置虚拟路径后仍然无法引用图片
这个问题依旧和使用eclipse启动tomcat,然后部署项目 有着很大的关系,但笔者一开始还是没有想到这一点,直到后面笔者发现修改后的server.xml文件莫名其妙的被还原了。这让我开始对eclipse起了疑心,但还是无法帮助我解决问题。
最后还是在网上找到了相关资料。
在eclipse中打开一个项目后,在旁边的project explorer 中存在一个servers 的文件夹,其中同样存在着一个server.xml 文件,突然恍然大悟,是不是tomcat下面的server.xml文件被上面那个给还原了,(具体还不是很清楚),于是我给上面那个server.xml文件也添加上了配置虚拟路径那一句话,图片终于成功被引用。
问题虽然被解决了,但整个问题的所在还不是很明了,只是冥冥之中有种感觉.......,算了以后再想吧,先占个坑