| 導購 | 订阅 | 在线投稿
分享
 
 
 

在 Bean 中獲得 Access 文件的絕對路徑

來源:互聯網  2007-03-16 04:21:43  評論

在以下例子中,使用 Eclipse+MyEclipse 開發環境中,Access 數據庫文件 (blogData.mdb) 被放置在了 WebRoot 目錄下的 data 子目錄中,部署到 Tomcat 後仍與 WEB-INF 目錄同級,如下示意圖:

==============================================

Tomcat

|-webapps

|-你的應用目錄

|-data

|-blogData.mdb

|-WEB-INF

==============================================

由于采用了 Access 數據庫,數據庫文件的絕對路徑是獲取數據庫連接時的關鍵參數,而本例中又同時采用了 JSF 框架,JSF 頁面調用 JavaBean 中的方法時與普通 JSP 頁面不同,要想將 request 對象直接傳遞到 JavaBean 的相關方法中來獲取站點路徑是比較麻煩的。前後思索想到一個笨方法,可以直接在獲取連接的方法中獲得路徑,無需從 JSF 頁面獲取參數。代碼如下:

王朝网络
王朝网络
public static Connection getConnection() ...{
王朝网络
// 獲得當前 JSF 上下文環境
王朝网络
FacesContext context = FacesContext.getCurrentInstance();
王朝网络
// 獲得 FacesContext 的 Application 對象
王朝网络
Application application = context.getApplication();
王朝网络
// 獲得 classes 目錄的絕對路徑
王朝网络
URL classesUrl = application.getClass().getResource("/");
王朝网络
// 獲得數據庫文件的絕對路徑
王朝网络
String dbpath = classesUrl.toString() + "../../data/blogData.mdb";
王朝网络
// 截去 URL 前端文件訪問協議 file:// 字符串
王朝网络
dbpath = dbpath.substring(6);
王朝网络
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="
王朝网络
+ dbpath;
王朝网络
Connection conn = null;
王朝网络
王朝网络
try ...{
王朝网络
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
王朝网络
conn = DriverManager.getConnection(url, "", "");
王朝网络
王朝网络
}catch(Exception ex) ...{
王朝网络
ex.printStackTrace();
王朝网络
}
王朝网络
return conn;
王朝网络
}

代碼中的 URL classesUrl = application.getClass().getResource("/"); 獲得的是類的根 URL,即 WEB-INF\classes 的 URL,所以根據本例中 blogData.mdb 的位置,需要加上 "../../data/blogData.mdb" 來定位數據庫文件,然後截取子字符串,去掉 URL 中的協議頭。最終得到 Access 數據庫文件在服務器上的絕對路徑。

在以下例子中,使用 Eclipse+MyEclipse 開發環境中,Access 數據庫文件 (blogData.mdb) 被放置在了 WebRoot 目錄下的 data 子目錄中,部署到 Tomcat 後仍與 WEB-INF 目錄同級,如下示意圖: ============================================== Tomcat |-webapps |-你的應用目錄 |-data |-blogData.mdb |-WEB-INF ============================================== 由于采用了 Access 數據庫,數據庫文件的絕對路徑是獲取數據庫連接時的關鍵參數,而本例中又同時采用了 JSF 框架,JSF 頁面調用 JavaBean 中的方法時與普通 JSP 頁面不同,要想將 request 對象直接傳遞到 JavaBean 的相關方法中來獲取站點路徑是比較麻煩的。前後思索想到一個笨方法,可以直接在獲取連接的方法中獲得路徑,無需從 JSF 頁面獲取參數。代碼如下: [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990098937.png[/img][/url][url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990099093.png[/img][/url]public static Connection getConnection() ...{ [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990099234.png[/img][/url] // 獲得當前 JSF 上下文環境 [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990099500.png[/img][/url] FacesContext context = FacesContext.getCurrentInstance(); [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990099718.png[/img][/url] // 獲得 FacesContext 的 Application 對象 [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990099968.png[/img][/url] Application application = context.getApplication(); [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990100078.png[/img][/url] // 獲得 classes 目錄的絕對路徑 [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990100265.png[/img][/url] URL classesUrl = application.getClass().getResource("/"); [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990100625.png[/img][/url] // 獲得數據庫文件的絕對路徑 [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990100812.png[/img][/url] String dbpath = classesUrl.toString() + "../../data/blogData.mdb"; [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990100937.png[/img][/url] // 截去 URL 前端文件訪問協議 file:// 字符串 [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990101046.png[/img][/url] dbpath = dbpath.substring(6); [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990101328.png[/img][/url] String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=" [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990101546.png[/img][/url] + dbpath; [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990101765.png[/img][/url] Connection conn = null; [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990101875.png[/img][/url][url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990102031.png[/img][/url] try ...{ [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990102359.png[/img][/url] Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990102500.png[/img][/url] conn = DriverManager.getConnection(url, "", ""); [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990102687.png[/img][/url][url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990102890.png[/img][/url] }catch(Exception ex) ...{ [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990103015.png[/img][/url] ex.printStackTrace(); [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990103109.png[/img][/url] } [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990103203.png[/img][/url] return conn; [url=/bbs/detail_853955.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1173990103359.png[/img][/url]} 代碼中的 URL classesUrl = application.getClass().getResource("/"); 獲得的是類的根 URL,即 WEB-INF\classes 的 URL,所以根據本例中 blogData.mdb 的位置,需要加上 "../../data/blogData.mdb" 來定位數據庫文件,然後截取子字符串,去掉 URL 中的協議頭。最終得到 Access 數據庫文件在服務器上的絕對路徑。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有