`
hngmduyi
  • 浏览: 330464 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

访问资源文件

阅读更多
//获得相对于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");

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics