语言:java,web:jsp.
问题描述
在一个xx工程中,图片放在xx\WebContent\images下面
比如1.jpg。
通过某些处理比如把ppt文件转化成jpg格式放在此文件夹下,在读取该文件夹下的图片
这时不刷新eclipse工程图片就不会显示。
正常读取的过程是我把图片的url放到标签img 中的src下,比如“xx\WebContent\images\1.jpg”
读取之后的路径为http://localhost:8080/xx\WebContent\images\1.jpg
此时能把路径读取出来,但是只要是不刷新eclipse就不能读取该图片。
请教用什么方式能把图片读取出来

解决方案 »

  1.   

    那我在说明一下吧这个images\1.jpg这个图片可以读取出来我给他变换一个名字比如变成test1.jpg,相对应的jsp的src名字也变了,还是取不出来。工程build时候即存图片可以读取出来,后来在本地改名或者后增加的图片就读取不出来,除非刷新再重新build
      

  2.   

    工程目录是MyProject,下面有WebContent,图片上传到WebContent/resources/images目录下,浏览器访问该图片是
    http://localhost:8080/MyProject/resources/images/xxx.png,你是不是目录没有搞对啊?WebContent是根目录,不应该写在浏览器地址栏中的,
    要访问WebContent目录可以,String webRoot = request.getSession().getServletContext().getRealPath("/");用这句话就可以读出WebContent的真实目录。
      

  3.   

    JSP中要显示该图片的话,可以这么写<img src="${pageContext.request.contextPath}/resources/images/xxx.png" width="100" height="100" alt="" />
      

  4.   

    不要烦这个。
    Eclipse项目中的文件经过refresh才能进入Tomcat。
    当你直接发布到独立的Tomcat Server中,不在Eclipse中运行Tomcat的时候,就正常了。
      

  5.   

    我写错了,没有webcontent。
    就是说我把图片放在了这个路径下MyProject/resources/images/xxx.png,
    我用这个取
    <img src="/images/xxx.png" width="100" height="100" alt="" />
    得出http://localhost:8080/MyProject/resources/images/xxx.png,
    。正常来说这个图片已经存在于这个images下的话就可以取出来。
    但时候后来增加的图片在此文件夹下就不能读出来,同样的路径。
      

  6.   

    我估计你写的图片的目录没有写对,
    String webRoot = request.getSession().getServletContext().getRealPath("/");
    你写到这个webRoot目录去了吗?Tomcat发布工程,发布的目录是一个临时目录,不是tomcat的webapps目录下面,所以有可能是你的图片没有写到正确的目录里。
      

  7.   

    Tomcat发布工程,发布的目录是一个临时目录,也不是你Eclipse里的目录,所以你写到Eclipse目录里是没有用的
      

  8.   

    如果我把图片不放在工程的/resources/images/下面
    而是放到通过webRoot获得的真实路径下就能直接读取出图片来了
    图片怎那么变名称都无所谓也不用刷eclipse
      

  9.   

    必须要调用这个String webRoot = request.getSession().getServletContext().getRealPath("/");,取得当前的发布的Web目录,然后把图片写到这里才可以。你这种情况是可以测试的。要不上传文件,图片啥的怎么测试。你的情况和上传图片,附件啥的是一样的原理。
      

  10.   

    <img src="${pageContext.request.contextPath}/resources/images/xxx.png" width="100" height="100" alt="" />
    <img src="/images/xxx.png" width="100" height="100" alt="" />这两句话是有区别的,你懂的,读图片的时候别取错了,${pageContext.request.contextPath}这个是需要加上的。
      

  11.   

    <img src="<%=path %>/images/xxx.png" width="100" height="100" alt="" />
      

  12.   

    哦。
    测试嘛,
    你可以在JSP页面中加入
    <%= application.getRealPath() %>
    找出Web应用的真实部署目录,然后将图片拷贝到这个目录下的images目录中,不要拷贝到Eclipse项目中了。
      

  13.   

    你可以打印webRoot到控制台,你就知道Tomcat把工程发布到哪里了,然后打开那个目录,你就知道图片到底生没生成对。如果图片生成了,就是你jsp没有显示对,就是path变量不对。
      

  14.   

    那就是说我保存时候的路径不正确
    我是保存在工程的/resources/images/下面了,
    实际应该保存到通过webroot获取的真实路径下就可以自由取出来了对巴?
    但是这个真实路径是个临时文件夹把?
    能确保上传到/resources/images/下面的图片一直存在么?
    比如一个人上传了图片,别人也能看到么?
      

  15.   


    和你是不是在webContent目录或什么目录没多大关系。。关键是myeclipse没有自动构建一次1. 一般情况下,我们修改了文件名称,保存一下就行了。。必须myeclipse设置自动构建的。
    2. 要么就是设置了自动构建,但是修改了名称未保存这是eclipse工具的机制必须要这么干
      

  16.   

    你打印webRoot到控制台,一看你就明白了。Tomcat发布工程的目录是临时的,不是Eclipse的目录
      

  17.   

    如果你是在你自己电脑上测试,别人是访问不了得,因为图片在你的硬盘上啊。如果是代码编译好,部署到指定的测试机器上,大家都通过浏览器去访问,就都能看见了。
    而且当你正式部署环境的时候,目录也不是临时的了,生成就是生成了。现在是临时的目录是因为你用Eclipse开发,他就这样,发布工程就用一个临时的目录。正式环境就不这样了。要是想大家一起测试,就得像Keitas一样,部署到真正的生产环境中去,大家访问一个机器来测试。
      

  18.   

    打出来了,也看到了。知道是临时的文件,
    那就是说我保存的位置还是正确的,在MyProject/resources/images下面
    我读取的路径也是正确的,
    只是必须要重新构建一次工程
    即时我用="${pageContext.request.contextPath}/去读取图片
    只要没构建就读取不出来被
      

  19.   

    不需要构建,是可以读出来的。是你jsp显示图片没有显示对。要不上传图片,每传一张还得重新构建一次才能好用吗。你在好好看看,把你jsp显示图片的代码贴上来,我看看~
      

  20.   

    刚在3.7的Eclipse上做了一下,放到项目中的图片,马上可以访问的。
    楼主的版本是不是低了点?
      

  21.   


    他的情况是程序运行时,生成的测试图片,类似图片上传。不是直接复制到Eclipse中去得
      

  22.   

    Eclipse的构建,是把Eclipse中的文件复制到Tomcat发布的临时目录中去,然后同步一下。所以,如果图片直接生成到Tomcat的临时目录中去,就一定会显示的。但是这个图片不会保存在Eclipse项目中
      

  23.   

    图片都没问题 我写的是
    <img  src="<%=request.getContextPath()%>+/resources/images/2/JPG"  />
    这样得出的图片的路径是
    http://localhost:8080/SYNCLIP/images/study/2.JPG
    我保存到了
    MyProject/resources/images下面
    如果我把保存的图片改称test2.jpg
    img里面对应更改,不刷新不加载就不显示test2.jpg
      

  24.   

    你的工程名是SYNCLIP。你的图片应该保存到D:\eclipse\一个临时目录\resources\images\2.jpg.你的JSP应该写成
    <img src="<%=request.getContextPath()%>+/resources/images/2.jpg" />这里request.getContextPath() 应该等于 /SYNCLIP所以浏览器的地址应该是
    http://localhost:8080/SYNCLIP/resources/images/2.jpg图片只是保存在了临时目录中,Eclipse中应该没有才对。
      

  25.   

    其实你可以这样理解,当程序正在运行的时候你往images的文件夹里复制了两个图片,
    你后复制的这两个图片即时获取到正确的路径也无法显示的,而其他的图片可以显示
    因为他发不到了tomcat下了
      

  26.   

    他是可以显示的,你想想上传图片。Eclipse的发布和Refresh只是把Eclipse中的文件复制同步到Tomcat的临时目录中去。如果你已经把图片生成到Tomcat的临时目录中去了,就直接可以访问了,不需要发布了。
      

  27.   

    你说的临时目录就是我写在了/SYNCLIP工程中的\resources\images下了
    实际上就是工程原有的一些图片都放到了images下,我只是把转化的图片也放到了那个下面
    然后读取原来的就能读取出来,后来工程美关闭的时候生成在此文件夹下的图片就没有读出来,
    我觉得还是加载的问题,就像你说的在运行环境下可能就没事了,在eclipse里面就要重新加载一次。
    要不然图片肯定不会到临时的那个文件下的。就好比这个路径下如果不加载就不会有图片
    xxxx.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SYNCLIP
      

  28.   

    如果下面的代码你是copy出来,那目录和文件名你应该是搞错了。
    你可以看一下33楼,我贴出来的代码
      

  29.   

    你的图片要直接生成到xxxx.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SYNCLIP这个目录中去,不是生成到Eclipse项目中的目录去。
      

  30.   

    我的eclipse在
    D:\eclipse工程名是redwellgroup-work,在
    D:\eclipse\workspace\redwellgroup-workTomcat发布工程生成的临时目录在
    D:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\redwellgroup-work\你生成图片要生成到
    D:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\redwellgroup-work\resources\image\xxx.png网页访问要
    <img src="${pageContext.request.contextPath}/resources/image/xxx.png" />
      

  31.   

    工程中保存的是代码,要进svn的,你的图片是临时测试图片,还是网站的样式图片。样式图片是应该放到Eclipse工程中的,测试的就不用了吧~
      

  32.   

    我要做的是一个教材,就是把pdf文件转化成图片在显示出来。
    不同的老师上传不同的pdf文件解析成图片然后放到页面处理一下
    变成另外一种形式的讲解材料。就是这个主要目的。所以pdf解析出来的图片
    要保存到一个地方。。不是临时的
      

  33.   

    等老师上传的时候,用的就是正式生成环境了,不是Eclipse开发环境,也就不是临时目录了。你这个数据图片,也不应该保存在Eclipse工程中,因为他不属于代码。网站上线以后,你可以选择保存在目录中,也可以保存在数据库中
      

  34.   

    这和数据库中的数据是同一个道理。
    楼主不希望做完的工作丢失,但是如果说它是项目的一部分,似乎也比较勉强。
    觉得楼主可以将图片保存在不相干的目录中(既不是Tomcat RealPath,也不是项目下的目录),用一个Servlet提供这些图片到页面。
      

  35.   

    我是想这样,可问题又回来了
    你放到一个服务器上的话,就是指定一个固定的路径
    那么不重新加载eclipse工程就无法显示图片
    绕了一个圈
      

  36.   

    话不是这么说的,只要图片在指定的目录中,Servlet就应该可以提供的。Servlet是在页面请求图片的时候才去检查硬盘文件的。这些图片不存在发布的话题。
      

  37.   

    对了,页面中的Img src不要老改,没这个必要吧。
      

  38.   

    我的意思是你每次倒入pdf文件的图片都要重新生成图片的
    图片放在服务器上。
    你在本地写的时候就必须要加载一次工程的内容
    要是到运行环境应该就不存在这个问题了
    所以我想找更好的解决方式。这些图片不是固定的
    是把这些图片的url保存到db中,需要的时候进行调用的
      

  39.   

    恩,<img src属性的值来源于数据库查询结果,把这块代码完成,页面就不需要改了。
      

  40.   

    哎,看来是我表达有问题。从最开始开帖
    我就是从db中读取的路径,而这个路径是我解析pdf保存到db中的
    只是这个路径能读取出来,但是不能读取到那个图片,归根结底是因为
    我把文件保存到了eclipse工程下的文件夹中了,而不是保存到真实路径.
    .metadata\.plugins\org.eclipse.wst.server.core\tmp0\下面,
    所以只有重新加载工程才会在次把保存到eclipse工程下的图片加载到真实路径下
    所以我一直取不出来图片。即使放到服务器上估计也是这个效果