群乐圈首页

您是本贴第 1270 名浏览者
 主题: JSP页面中如何使用相对路径访问文件
加为好友 发送短信
 
离线 yangco 发表于 2006-12-14 17:42      资料 家园 相册
楼主
JSP页面中如何使用相对路径访问文件
简介


典型情况下,大部分 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()));
...
%>




运行示例
从 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



    淘宝网购买       免费注册 拿IT大奖   天极网专业免费流量交换
加为好友 发送短信
 
离线 yangco 回复于 2006-12-14 17:42      查看资料 相册 家园
2
使浏览器指向 http://: /file-jsp/selectCurrencies.html






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

TOP
热门主题
相关文章
 回复主题:
温馨提示:您的权限不够,本群乐必须是登陆用户或者加入本群乐的会员才能回贴
天极群乐会员
用户名:
密 码:
自动登录

您还不是天极群乐会员,请
天极群乐服务 | 群乐指南 | 手机玩家社区 | 数码产品社区 | 知本家社区 | 软件社区 | DIY硬件社区 | 休闲娱乐社区 | Archiver
商务联系、网站内容、合作建议:010-82657868 详细联系方式 在线客服 有事您Q我,真诚为您在线服务
渝ICP证B2-20030003号 Powered by 天极内容管理平台CMS4i