综合
首页 > > 正文

访问资源文件


2014-03-18

//获得相对于web应用根目录的相对路径在文件系统中的真实路径假如javawebnew发布目录为:D:\javatool\apache-tomcat-6.0.18\webapps\javawebnew\ 。
ServletContext a=this.getServletContext();
 String path=a.getRealPath("/"); 返回  
D:\javatool\apache-tomcat-6.0.18\webapps\javawebnew\
getRealPath(“/WEB-INF/”)  返回 
D:\javatool\apache-tomcat-6.0.18\webapps\javawebnew\WEB-INF
需要注意的是传给getRealPath饭方法的参数必须以“/”开头。

Set getResourcePaths(String path) 
返回某个资源目录下直接子目录和文件列表。所有返回目录和文件路径都是相对于应用根目录而言,以‘/’为前缀。所有返回目录都以‘/’为后缀
例如,一个web应用包含如下路径:
/welcome.html
/catalog/index.html
/catalog/products.html
/catalog/offers/books.html
/catalog/offers/music.html
/customer/login.jsp
/WEB-INF/web.xml
/WEB-INF/classes/com.acme.OrderServlet.class
getResourcePaths(“/”) 返回的Set集合中包括哪些目录和文件路径呢?
{"/welcome.html", "/catalog/", "/customer/", "/WEB-INF/"}

URL getResource(String path) throws MalformedURLException
参数是以‘/’为前缀的资源路径字符串,返回映射到该资源的URL对象。‘/’ 表示web应用根路径。

InputStream getResourceAsStream(String path) 
参数是以‘/’为前缀的资源路径字符串,返回连接到该资源的InputStream对象。(实际上打开了getResource(String path)返回的URL对象的输入流 )

编程经验:在web应用中,虽然我们可以用FileInputStream这样的标准I/O库来访问资源文件,但是有两个缺点:
一个web应用在服务器本地文件系统中的位置可能会发生变化,不同的公司或个人可能会把它安装在不同位置上。所以使用绝对路径来访问web应用中的某个文件是不灵活的。
在某个java类中使用的相对路径是相对于工作目录的。工作目录通常是执行java命令的目录,而不是当前正在执行的类的目录。这导致在java中很难直接使用相对路径。
解决方案:
我们可以通过ClassLoader和Class的getResource和getResourceAsStream方法以相对于类路径的相对路径来获取资源(以“/web-inf/classes/”作为当前路径)。但是它们不能在类路径之外的目录下查找资源。 (如:/web-inf/下就不可以)
InputStream is = ClassLoader.getResourceAsStream(“com/servlet/database.property");
在web应用中,ServletContext的getResource和getResourceAsStream方法是通过容器来获取资源的,我们可以获得应用中任何目录和文件。
InputStream is = getServletContext().getResourceAsStream("/ch1/image/AA.jpg");

系统分类:编程语言 >> Java

本站为纯公益性文化知识交流分享网站,旨在促进文化知识学习、交流与传播。
此文章资料由本站转载于互联网,转载目的在于分享、传播文化知识。仅供学习、研究使用。版权归作者本人所有, 如果侵犯了您的版权和隐私权,请您将文章资料的网址发送到邮箱xuehuile@126.com,本站将马上删除。
违法、违规与不良信息投诉举报邮箱xuehuile@126.com,如果您发现不良信息,请您将文章资料的网址发送到邮箱,本站将马上删除。
此文章资料网址:http://m.xuehuile.com/blog/3213174302b8441f8ea3eb64f3a41875.html