典型情况下,大部分 web 应用程序需要从文件系统的静态文件中读取特定于应用程序的数据。然而,程序员
class="paragraph">必须知道这些文件的完整路径
class="paragraph">才能使用 I/O 类的构造函数器访问它们。因为 web 应用程序是作为 WAR 部署在应用程序服务器/servlet 引擎上,所以这些文件的完整路径(它们与应用程序捆绑)对于每个服务器是不同的。程序员不能使用相对路径,因为相对路径是从应用程序服务器/servlet 引擎启动的目录开始的,而这个目录在每个服务器上是不同的。
一个技巧是在 web.xml 文件中使用 标记配置文件路径,并在 servlet/JSP 中获取文件路径。但是这需要在部署之前更改 web.xml 文件以指向实际的路径。
为了解决这些配置问题,程序员可以使用 java.lang.ClassLoader 和 javax.servlet.ServletContext 类的特性。本文档的剩余部分讨论这个办法。
为了运行这里提供的示例,您需要
Oracle9 i JDeveloper 9.0.3(从
href="/technology/global/cn/software/index.html">OTN 下载) 或
Oracle9iAS Containers for J2EE (OC4J) 9.0.3 (从
href="/technology/global/cn/software/products/ias/index.html">OTN 下载)。
Apache Ant 1.4.x,如果您准备部署在 OC4J 上(可从 Apache 下载)。 (可选的,只有当不使用 JDeveloper 时才是必需的)源文件可从
href="/technology/sample_code/tech/java/codesnippet/jsps/jspio/Files-JSP.zip">此处下载。
此示例是一个货币转换器程序,它读取存储在一个文件中的货币汇率列表并使用这些数据进行转换。
示例中的文件有
文本文件 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 方法
<% |
从 Oracle9
class="ITALICiBodycopy">i
JDeveloper 运行
在 Oracle9 i 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 执行文件操作。