由web项目中上传图片所引出的路径问题
我在做javaweb项目的时候,有个项目中需要进行图片的上传,有次我重新部署项目后,发现之前上传的图片不见了,最后找出原因:图片上传在服务器目录上,而不是绝对路径,所以特别想弄清楚javaweb项目中有关路径的一些问题。
首先,在做项目的时候我们最好用相对路径,如果写成绝对路径,当项目发布到其他环境时,绝对路径就错了。
Java中传统方式取资源时,有很多的方法;
先来看一看Class.getResource(String path),
path 不以'/'开头时,默认是从此类所在的包下取资源;
path 以'/'开头时,则是从ClassPath根下获取,在这里就是相当于项目的bin目录(Eclipse环境下);
注意:Class.getResource和Class.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的某个项目的根
目录;所以,取路径,取资源的方式都有所区别。
由web项目中上传图片所引出的路径问题的更多相关文章
- WEB 项目中JAVA取得WEBROOT物理路径
http://wwwzhouhui.iteye.com/blog/504330 ———————————————————————————————————————————————————————————— ...
- springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题
有两种解决方案: 1:在api路径中加入:.+ @RequestMapping("/findByIp/{ip:.+}") public Object test(@PathVaria ...
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- Web 项目中分享到微博、QQ空间等分享功能
Web 项目中分享到微博.QQ空间等分享功能 网上有很多的模板以及代码,但是有很多都不能分享内容,简单的测试了下: 以新浪微博为例,文本框中的内容是title属性,下面的链接是url属性,如果你的链接 ...
- 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能. 项目是用springMVC+spring+hibernate实现 (和这个没有多大关系) 第一步: 首先 ...
- java web项目中 获取resource路径下的文件路径
public GetResource{ String path = GetResource.class.getClassLoader().getResource("xx/xx.txt&quo ...
- web项目中加入struts2、spring的支持,并整合两者
Web项目中加入struts2 的支持 在lib下加入strut2的jar包 2. 在web.xml中添加配置 <filter> <filter-name>struts2< ...
随机推荐
- idea 中maven编译速度过慢的问题的解决
解决方案一 在创建Maven项目时加上 archetypeCatalog=internal 参数,如下: 解决方案二 在maven的VM Options加上-DarchetypeCatalog=int ...
- 【转】 Ubuntu在启动器添加程序快捷方式
转自: http://blog.csdn.net/walker0411/article/details/51555821 目录(?)[-] Ubuntu在启动器添加程序 eclipse快捷方式的创建 ...
- C语言中基本的数据类型
一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码.为了用户的方便,C99标准的C语言硬件为我 ...
- MySQL 使用profile分析慢sql,group left join效率高于子查询
MySQL 使用profile分析慢sql,group left join效率高于子查询 http://blog.csdn.net/mchdba/article/details/54380221 -- ...
- Windows Phone 常用资源
统计分析: 1. 友盟 http://www.umeng.com SDK: http://www.nuget.org/packages/UmengAnalytics/ 集成文档: http://dev ...
- iphone越狱安装python2.7
cydia 添加源地址:http://apt.so/whitefur 选择python 进行安装 打开ssh连接后输入python 显示python2.7.3 安装成功
- .net4.0、.net4.5、.net4.6 三者对系统的要求
net4.0 支持的操作系统 Windows 7, Windows 7 Service Pack 1, Windows Server 2003 Service Pack 2, Windows Serv ...
- Azure ARM (22) 使用Azure PowerShell创建Azure RM VM
<Windows Azure Platform 系列文章目录> 在Azure China获得VM Image,可以执行下面的脚本. Get-AzureRmVMImagePublisher ...
- HTML5 Canvas水波纹动画特效
HTML5的Canvas特性非常实用,我们不仅可以在Canvas画布上绘制各种图形,也可以制作绚丽的动画,比如这次介绍的水波纹动画特效.以前我们也分享过一款基于HTML5 WebGL的水波荡漾动画,让 ...
- LaTex与数学公式
w(t) \longrightarrow \bigg[\frac{\sqrt{2\sigma ^2\beta}}{s+\beta}\bigg] \longrightarrow \bigg[\frac ...