文章转载:http://blog.csdn.net/helloworld1993/article/details/47661759前端
调试上传用户头像时看不见的功夫上传的图片就不见了,看了这篇文章恍然大悟!!!以上是一字不差地原文java
-------------------------------------------------------------------------------------------------分哥线----------------------------------------------------------------------------------------------------------------------------------linux
最近在作一个Javaweb的项目,涉及到图片上传,而且须要将图片经过URL回显给JSP页面,在调试的时候发现,上传到tomcat的图片再从新部署以后就消失了。研究了半天发现才解决了。首先说一下,我为何要将图片存放到tomcat服务器或者更直白点说是web工程目录下的缘由:web
项目中对于图片的处理在于用户上传好比本身的头像,上传后再查看时,就直接根据服务器的URL指定图片的位置去查看图片,通俗点就是jsp页面中的<img >标签的src属性的路径就直接指向服务器该图片存放的位置。鉴于这一点,因此将图片文件存放在了tomcat中,而不放在服务器磁盘文件系统中,这样前端JSP就能够直接经过URL访问到图片资源。tomcat
发现的问题:在调试的时候,个人开发环境十分通用,就是eclipse for jee ,服务器为tomcat7.0。在配置eclipse runtime服务器运行环境时,工程发布的位置选择的是直接将工程发布到tomcat的webapps目录下。配置过程以下:服务器
1.在为eclipse添加到tomcat7.0服务器后,将服务器的工程所有remove掉,以下图:app
remove all,而后右键clean一下,这时再open,以下图eclipse
在server locations下选择第二个,这时工程在ADD到服务器时就直接到了tomcat 的webapps目录下了。webapp
遇到的问题:发现上传的图片在改动eclipse上的代码的时候,也就是从新部署后,tomcat下的webapps中的工程目录下的图片所有没有了,很奇怪,通过研究发现,缘由以下:jsp
咱们在Java代码中上传图片时,图片的路径是经过代码
request.getSession().getServletContext().getRealPath("/img")
来获取路径的,而这句代码返回的路径是tomcat中webapps目录下的工程路径,图片就直接保存到了tomcat中。
当咱们从新发布工程的时候,tomcat实际上是先将原来的工程删掉,而后再将改动过的新的工程放上去。而改动过的新的工程师来自与咱们eclipse的工做空间中的工程,这就也难怪了,由于咱们是把图片直接上传到的tomcat服务器下,而不是放到工做空间的工程目录下,天然从新部署后图片就没了。
解决办法:
归根到底的缘由就是由于
request.getSession().getServletContext().getRealPath("/img")
这句代码搞的鬼,因此在调试时,咱们在Java代码中保存上传的图片位置时将图片的保存路径应该保存在eclipse工做空间的目录下,如:
String path = "E:\\program\\eclipse project\\Server\\WebContent\\img";
这样,图片在上传到该工做空间后,由于项目发生了改变,eclipse会再次发布工程,这时图片便会同步到tomcat服务器中,这时,咱们前端jsp页面也就能够经过URL定位到图片了。
注意的地方:
归根到底这些问题其实仍是由于咱们是在调试的工程中,发布后确定是不会出现这些问题的。由于你想一想咱们的web工程通常是发布到Linux下,发布了以后你的tomcat服务器只有关闭和打开,而不会对工程从新部署,天然也就不会出现这些问题。而后这也同时出现了另一个问题,就是咱们的web系统是在linux下,也不会有eclipse环境,那也就更不用谈什么工做空间了,因此若是在代码中String path = "E:\\program\\eclipse project\\Server\\WebContent\\img";这么写系统确定会报错咯。因此最终来讲,改为这样也只是权宜之计,方便咱们在调试的时候用的,到项目正式发布的时候须要咱们再将路径改为request.getSession().getServletContext().getRealPath("/img")的。