JSP页面中如何使用相对路径访问文件
2006-12-04 15:58
681 查看
简介
典型情况下,大部分 web 应用程序需要从文件系统的静态文件中读取特定于应用程序的数据。然而,程序员class="paragraph">必须知道这些文件的完整路径
class="paragraph">才能使用 I/O 类的构造函数器访问它们。因为 web 应用程序是作为 WAR 部署在应用程序服务器/servlet 引擎上,所以这些文件的完整路径(它们与应用程序捆绑)对于每个服务器是不同的。程序员不能使用相对路径,因为相对路径是从应用程序服务器/servlet 引擎启动的目录开始的,而这个目录在每个服务器上是不同的。
一个技巧是在 web.xml 文件中使用 标记配置文件路径,并在 servlet/JSP 中获取文件路径。但是这需要在部署之前更改 web.xml 文件以指向实际的路径。
为了解决这些配置问题,程序员可以使用 java.lang.ClassLoader 和 javax.servlet.ServletContext 类的特性。本文档的剩余部分讨论这个办法。
运行示例的前提条件
为了运行这里提供的示例,您需要Oracle9i 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 方法
<% ... //为该文件获取 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())); ... %> |
运行示例
从 Oracle9class="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 执行文件操作。相关文章推荐
- 如何在log4j.properties文件中使用相对路径
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件(转载)
- jsp页面的相对路径访问
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 如何在log4j.properties文件中使用相对路径
- jsp页面相对路径的使用
- jsp页面中引入文件路径问题的解决方案(使用request获取项目路径)【原创】
- JSP中如何使用JQuery及相对路径问题
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 跳过登陆页面直接访问该jsp文件了,这样不好,请问大家如何避免这种问题?
- 解决jsp页面使用网络路径访问图片的乱码问题
- Linux上使用程序相对路径访问文件【转】
- JSP页面如何访问标签中定义的变量-使用实现
- source insight3.5的使用技巧1——sourceinsight下工程文件位置如何显示为相对路径
- 记录-springMVC访问web-inf下文件问题+在jsp页面导入jquery插件路径不对问题
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 跳过登陆页面直接访问该jsp文件了,这样不好,请问大家如何避免这种问题?
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件