JSP页面中如何使用相对路径访问文件

简介

典型情况下,大部分 web 应用程序需要从文件系统的静态文件中读取特定于应用程序的数据。然而,程序员

class="paragraph">必须知道这些文件的完整路径

class="paragraph">才能使用 I/O 类的构造函数器访问它们。因为 web 应用程序是作为 WAR 部署在应用程序服务器/servlet 引擎上,所以这些文件的完整路径(它们与应用程序捆绑)对于每个服务器是不同的。程序员不能使用相对路径,因为相对路径是从应用程序服务器/servlet 引擎启动的目录开始的,而这个目录在每个服务器上是不同的。

一个技巧是在 web.xml 文件中使用 标记配置文件路径,并在 servlet/JSP 中获取文件路径。但是这需要在部署之前更改 web.xml 文件以指向实际的路径。

为了解决这些配置问题,程序员可以使用 java.lang.ClassLoader 和 javax.servlet.ServletContext 类的特性。本文档的剩余部分讨论这个办法。

运行示例的前提条件

为了运行这里提供的示例,您需要

说明

此示例是一个货币转换器程序,它读取存储在一个文件中的货币汇率列表并使用这些数据进行转换。
示例中的文件有

  • 文本文件 rates.txt,用于存储汇率。
  • HTML 文件 selectCurrencies.html,它允许用户选择货币和数额。
  • JSP 文件 convert.jsp,它转换货币并打印出结果。

  • JSP 文件 reverseRates.jsp,它逆向转换汇率并写入目录WEB-INF/classes 下的文件 reverserates.txt

有多种方法可以读取文件。javax.servlet.ServletContext API 具有访问一般资源的方法。

getResource(String resource)返回 web 应用程序中的资源的 URL
getResourceAsStream(String resource)返回 web 应用程序中的资源的 InpuStream
getResourcePaths(String path)返回一个类似于目录的列表,列出了 web 应用程序内其所有最长的子路径与提供的路径参数相匹配的资源路径。所以,在 convert.jsp 中,我们使用这些 API 来获取文件



<%
...
//以输入流获取该文件
//其路径与应用程序上下文相关,rates.txt 位于
//应用程序的 WEB-INF 文件夹下
InputStream is = config.getServletContext().getResourceAsStream("/rates.txt");

...
%>

或者我们可以从 ClassLoader 使用 API,它要求资源位于 classpath 之内。在这种情况下,我们应该把文件放在 WEB-INF/classses 目录中,所有的应用程序类都存放于该目录下。

文件 reverseRates.jsp 结合了 ClassLoader 方法和 ServletContext 方法

<%
...
//为该文件获取 URL 并显式地创建流
java.net.URL url =config.getServletContext().getResource("/rates.txt");
BufferedReader breader =new BufferedReader(new InputStreamReader(url.openStream()));


//另一个打开文件的方法是使用 ClassLoader API
//ClassLoader 实例的获得方法如下所示。该实例必须是
//在应用程序中加载类的那一个。这样的实例
//需要通过当前线程对象获取。
//注意,如果文件不存在,url 则为空。我们假定
//在 /WEB-INF/类下存在一个空文件 "reverserates.txt"

url = Thread.currentThread().getContextClassLoader().getResource("reverserates.txt");
//我们将创建一个 BufferedWriter 来编写逆向转换的汇率
BufferedWriter writer = new BufferedWriter(new FileWriter(url.getFile()));
...
%>

运行示例

从 Oracle9

class="ITALICiBodycopy">i

JDeveloper 运行

  • 在 Oracle9i JDeveloper 中打开文件 Files-JSP.jws
  • 选择 Files-JSP.jpr 并选择 Run。这将把应用程序部署到嵌入的 OC4J。您可以看见一列可供交换的货币列表。要想查看相反的汇率,点击 'Reverse rates' 链接。

class="heading4">在 OC4J 上运行,

  • 启动 OC4J。
  • 在命令提示符,设置环境变量 ANT_HOME、JAVA_HOME、OC4J_HOME 和 OC4J_HOST

例如: c:/Files-JSP/set ANT_HOME=d:/ant141
c:/Files-JSP/set JAVA_HOME=d:/jdk1.3.1_01
c:/Files-JSP/set OC4J_HOME=d:/oc4j903
c:/Files-JSP/set OC4J_HOST=localhost:23791

  • 运行 ant

例如: c:/Files-JSP/ant

  • 使浏览器指向 http:// : /file-jsp/selectCurrencies.html

总结

在这篇方法文档中,您已经学习了如何在 JSP 文件中使用 ServletContext 和 ClassLoader API 执行文件操作。

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值