我在做javaweb项目的时候,有个项目中需要进行图片的上传,有次我重新部署项目后,发现之前上传的图片不见了,最后找出原因:图片上传在服务器目录上,而不是绝对路径,所以特别想弄清楚javaweb项目中有关路径的一些问题。

首先,在做项目的时候我们最好用相对路径,如果写成绝对路径,当项目发布到其他环境时,绝对路径就错了。

Java中传统方式取资源时,有很多的方法;

先来看一看Class.getResource(String path),

path 不以'/'开头时,默认是从此类所在的包下取资源;

path  以'/'开头时,则是从ClassPath根下获取,在这里就是相当于项目的bin目录(Eclipse环境下);

注意:Class.getResourceClass.getResourceAsStream(获取资源流)在使用时,路径选择上是一样的。

再来看ClassLoader,即Class.getClassLoader().getResource(String path),

path不能以’/'开头, path是从ClassPath根下获取,在这里就是相当于项目的bin目录(Eclipse环境下);

注意:Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。

-----------------------------------------------------------------------------------------------------------------------------

手动分割线

-----------------------------------------------------------------------------------------------------------------------------

注意哦,上面说的是传统方式获取资源的方法,也就是在一般的java项目中,那么在web项目中呢?

在web工程中,一般来说,是不能采用传统方式读取资源的,因为相对的是tomcat的bin目录,这也就是为什么图片上传在服务器目录上。

首先我们要先了解web中通过servletContext对象读取资源文件,然后就好理解web工程中,不同位置的资源文件的读取方式;

(在一个web工程中,只要涉及到写地址,建议最好以/开头)

第一点:使用ServletContext的getRealPath(String path)方法,获得文件的完整绝对路径path,再使用字节流读取path下的文件;

第二点:使用ServletContext的getResourceAsStream(String path)方法:返回资源文件的读取字节流;

第三点:使用ServletContext的getResource(String path)方法,获得一个url对象,调用该类的openStream方法返回一个字节流,读取数据;

第四点:还可以使用ServletContext的getResourcePaths(String Path)获取指定目录下所有资源路径;

好了,了解了ServletContext,现在就能用它在web项目中进行不同位置的资源文件的读取了,用例子来说明:

项目目录:

tomcat中的此项目目录:

miniblog目录:

WEB-INF目录:

classes目录:

读取jdbc.properties(当资源文件在包下面时),

InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/classes/jdbc.properties");

读取web.xml(资源文件在WEB-INF下),

InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/web.xml");

读取adminuser.jsp(资源文件在web工程中),

InputStream in =this.getServletContext().getResourceAsStream("/adminjsps/adminuser.jsp");

好了,这些就是我了解到的了~

注意:普通java项目和javaweb项目所对应的基本路径是不一样的,普通java项目对应的是eclipse工作空间的某个项目的bin目录,而javaweb项目则是tomcat的某个项目的根

目录;所以,取路径,取资源的方式都有所区别。

转载于:https://www.cnblogs.com/Arry10/p/7731802.html

由web项目中上传图片所引出的路径问题相关推荐

  1. java web资源目录下_Java Web项目中的各种资源的路径写法

    如图,在项目中要跳转到如下的路径中(在项目下的target.html): public class PathDemo extends HttpServlet { public void doGet(H ...

  2. 聊聊WEB项目中的图片

    最近一直在鼓捣图片相关的代码,今天抽时间写篇总结.此文没有什么高深的知识点,不汲及第三方的OSS相关点,更不汲及分布式文件存储框架,算是一篇关于WEB项目中图片相关功能的扫盲文; 同时与大家分享码字时 ...

  3. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

  4. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...

    标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...

  5. 在java web项目中编写自己的代码生成器

    在java web项目中编写自己的代码生成器 转载于:https://www.cnblogs.com/punisher/p/5909943.html

  6. 在web项目中发布jaxws

    概述 在web项目中发布基于jaxws的webservice. 参考文章:用JAX-WS在Tomcat中发布WebService 参考文章说,如果不是servlet3.0及以上,需要配置servlet ...

  7. Web项目中引进EasyUI的路径问题

    场景 Web项目中引入EasyUI,新建test.html,页面中引入EasyUI相关资源文件. 运行后页面并没有改变,打开检查提示404找不到资源. 实现 项目路径为: 路径引用错误: test.h ...

  8. maven web项目中的web.xml的版本如何更改

    maven web项目中的web.xml的版本如何更改 问题 因web.xml的版本太低不支持el表达式的问题(maven3.6版本通过底层的maven web插件生成的最终的web.xml文件版本只 ...

  9. 在java web项目中实现随项目启动的额外操作

    前言 在web项目中经常会遇到在项目启动初始,会要求做一些逻辑的实现,比如实现一个消息推送服务,实现不同类型数据同步的回调操作初始化,或则通知其他客户服务器本项目即将启动,等等.对于这种要求,目前个人 ...

最新文章

  1. IIS7.0 网站发布页面显示 500 - 内部服务器错误。您要查找的资源有问题,无法显示...
  2. 基础回顾(正则、循环、和、 int和Integer、String /StringBuffer、Array和ArrayList、值传递和引用传递、 Lamda、java8)
  3. 公式编辑公式总是偏上怎么办?
  4. SAP Cloud Platform上Destination属性为odata_gen的具体用途
  5. P4137-Rmq Problem/mex【莫队,分块】
  6. 7.0上的新KIE持久性API
  7. Windows 窗体重绘
  8. 局域网传文件_跨平台传输文件方案大汇总(中篇)——可能全网最全的传输方案了...
  9. 我是火枪,我想打dps
  10. IMO 双帐号同步API文档
  11. 洛谷 P3957 跳房子
  12. My SQL 排序和分组
  13. svg图片 填充颜色
  14. 测试pok_如何使用PokémonGO的新评估系统计算您的Pokémon的精确IV
  15. 在人一生的成长过程中,什么才是最重要的因素?
  16. “代码差的程序员,90%输在了方法上!”骨灰级开发:其实都是瞎努力
  17. 关于Redis数据过期策略
  18. 手游神武2最新服务器,神武2手游新服开启公告 安卓IOS新服开启
  19. Mac版Ps、AE、PR不能突然使用?Adobe全家桶关闭自动更新的方法
  20. L2-040 哲哲打游戏 (25 分)

热门文章

  1. 【⭐C++宝藏男孩⭐】C++ string字符串比较
  2. Mysql - Binlog
  3. Object的finalize方法
  4. STM32F4 HAL库开发 -- STM32F407引脚图
  5. 【译】Jumping into Solidity — The ERC721 Standard (Part 2)
  6. butterknife 源码分析
  7. Android代码入侵原理解析(一)
  8. Ubuntu 14 配置Android Studio的快捷启动方式
  9. Android APP终极瘦身指南
  10. android电视打印信息解析,液晶电视获取打印信息的方法与操作