欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb項(xiàng)目中dll文件動(dòng)態(tài)加載方法解析(詳細(xì)步驟)

 更新時(shí)間:2017年09月19日 11:01:41   作者:liuyazhuang  
這篇文章主要介紹了JavaWeb項(xiàng)目中dll文件動(dòng)態(tài)加載方法,步驟詳細(xì),在這里分享給大家,需要的朋友可以了解下。

相信很多做Java的朋友都有過用Java調(diào)用JNI實(shí)現(xiàn)調(diào)用C或C++方法的經(jīng)歷,那么Java Web中又如何實(shí)現(xiàn)DLL/SO文件的動(dòng)態(tài)加載方法呢。今天就給大家?guī)硪黄狫AVA Web項(xiàng)目中DLL/SO文件動(dòng)態(tài)加載方法的文章。

在Java Web項(xiàng)目中,我們經(jīng)常會(huì)用到通過JNI調(diào)用dll動(dòng)態(tài)庫文件來實(shí)現(xiàn)一些JAVA不能實(shí)現(xiàn)的功能,或者是一些第三方dll插件。通常的做法是將這些dll文件復(fù)制到 %JAVA_HOME%\jre\bin\ 文件夾或者 應(yīng)用中間件(Tomcat|Weblogic)的bin目錄下之后,在程序中才能正常使用。但是這個(gè)步驟在項(xiàng)目實(shí)施或移植時(shí)經(jīng)常會(huì)被忘記,比較麻煩,所以就考慮能否在項(xiàng)目運(yùn)行過程中動(dòng)態(tài)加載,而不需要再手動(dòng)復(fù)制這些文件。在網(wǎng)上找了很多資料,大部分的說法要么是手動(dòng)復(fù)制,要么就是JAVA項(xiàng)目中的解決方法(不適用于JAVA Web項(xiàng)目),所以整理此資料,以供參考。

第一步 建立一個(gè)監(jiān)聽類

建立監(jiān)聽類的作用是在應(yīng)用中間件啟動(dòng)時(shí)自動(dòng)執(zhí)行加載程序。

1)創(chuàng)建一個(gè)類實(shí)現(xiàn)ServletContextListener 接口

2)實(shí)現(xiàn)contextInitialized方法

3)在項(xiàng)目的web.xml 文件中配置此監(jiān)聽類

第二步 將dll文件所在的路徑添加到系統(tǒng)環(huán)境java.library.path 中

添加過程需要使用到反射機(jī)制來進(jìn)行,不能使用System.setProperty()進(jìn)行設(shè)置,設(shè)置了也無效。直接看代碼:

private void addDirToPath(String s){
 try {
  //獲取系統(tǒng)path變量對(duì)象
  Field field=ClassLoader.class.getDeclaredField("sys_paths");
  //設(shè)置此變量對(duì)象可訪問 
  field.setAccessible(true);
  //獲取此變量對(duì)象的值 
  String[] path=(String[])field.get(null);
  //創(chuàng)建字符串?dāng)?shù)組,在原來的數(shù)組長度上增加一個(gè),用于存放增加的目錄
  String[] tem=new String[path.length+1];
  //將原來的path變量復(fù)制到tem中 
  System.arraycopy(path,0,tem,0,path.length);
  //將增加的目錄存入新的變量數(shù)組中 
  tem[path.length]=s;
  //將增加目錄后的數(shù)組賦給path變量對(duì)象
  field.set(null,tem);
 } catch (Exception e) {
  e.printStackTrace();
 }
}

第三步 加載dll文件

接下來就可以寫上下文初始化的方法了:

public void contextInitialized(ServletContextEvent arg0) {
 //獲取存放dll文件的絕對(duì)路徑(假設(shè)將dll文件放在系統(tǒng)根目錄下的WEB-INF文件夾中)
 String path=arg0.getServletContext().getRealPath("WEB-INF");
 //將此目錄添加到系統(tǒng)環(huán)境變量中 
 addDirToPath(path);
 //加載相應(yīng)的dll文件,注意要將'\'替換為'/' 
 System.load(path.replaceAll("\\\\","/")+"/XXXX.dll"); 
 }

第四步 重啟啟動(dòng)應(yīng)用中間件(Tomcat|Weblogic)

至此就可以在你的java程序中使用dll文件的方法了。

以上就是本文關(guān)于JavaWeb項(xiàng)目中dll文件動(dòng)態(tài)加載方法的全部內(nèi)容,希望對(duì)大家有所幫助。

相關(guān)文章

  • springboot讀取application.yaml文件數(shù)據(jù)的方法

    springboot讀取application.yaml文件數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了springboot讀取application.yaml文件數(shù)據(jù)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 老生常談JVM的內(nèi)存溢出說明及參數(shù)調(diào)整

    老生常談JVM的內(nèi)存溢出說明及參數(shù)調(diào)整

    下面小編就為大家?guī)硪黄仙U凧VM的內(nèi)存溢出說明及參數(shù)調(diào)整。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java常用字符串工具類 字符串智能截?。?)

    Java常用字符串工具類 字符串智能截?。?)

    這篇文章主要為大家詳細(xì)介紹了Java常用字符串工具類,字符串的智能截取,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • springmvc分層領(lǐng)域模型概念詳解

    springmvc分層領(lǐng)域模型概念詳解

    本文核心為分層領(lǐng)域模型(VO , PO , BO, DAO ,POJO等)概念的個(gè)人理解,結(jié)合springmvc淺談分層領(lǐng)域模型的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2021-08-08
  • 使用@ConditionalOnProperty控制是否加載的操作

    使用@ConditionalOnProperty控制是否加載的操作

    這篇文章主要介紹了使用@ConditionalOnProperty控制是否加載的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • @TableField注解之深入理解與應(yīng)用方式

    @TableField注解之深入理解與應(yīng)用方式

    在現(xiàn)代軟件開發(fā)中,@TableField注解作為MyBatis-Plus中的一個(gè)重要特性,用于定義實(shí)體類字段與數(shù)據(jù)庫表字段的映射關(guān)系,本文詳細(xì)介紹了@TableField注解的使用場(chǎng)景、屬性及其在實(shí)際開發(fā)中的應(yīng)用,包括字段名稱映射、非數(shù)據(jù)庫字段標(biāo)識(shí)、字段填充策略
    2024-10-10
  • java web中圖片驗(yàn)證碼功能的簡單實(shí)現(xiàn)方法

    java web中圖片驗(yàn)證碼功能的簡單實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava web 驗(yàn)證碼的簡單實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • 深入淺析Java常用的格式化Json工具類

    深入淺析Java常用的格式化Json工具類

    這篇文章主要介紹了Java常用的格式化Json工具類的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • spring使用xml方式整合Druid數(shù)據(jù)源連接池

    spring使用xml方式整合Druid數(shù)據(jù)源連接池

    傳統(tǒng)的JDBC數(shù)據(jù)庫連接方式,每次連接都需加載Connection到內(nèi)存并驗(yàn)證,使用后再放回,從而重復(fù)利用數(shù)據(jù)庫連接資源,這不僅降低了系統(tǒng)資源消耗,還避免了頻繁連接導(dǎo)致的服務(wù)器崩潰和內(nèi)存泄漏風(fēng)險(xiǎn),數(shù)據(jù)庫連接池在初始化時(shí)創(chuàng)建并保持最小數(shù)量的數(shù)據(jù)庫連接
    2024-10-10
  • 如何動(dòng)態(tài)修改JavaBean中注解的參數(shù)值

    如何動(dòng)態(tài)修改JavaBean中注解的參數(shù)值

    這篇文章主要介紹了如何動(dòng)態(tài)修改JavaBean中注解的參數(shù)值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評(píng)論