乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      2.7 從數(shù)據(jù)庫中訪問信息資源文件 - Jakarta Commons Cookbook中...

       Long_way 2007-12-07
      從數(shù)據(jù)庫中訪問信息資源文件


      問題

      想在數(shù)據(jù)庫而不是屬性文件中存儲(chǔ)所有標(biāo)簽、信息和其他靜態(tài)文本,同時(shí)還要使用bean:message標(biāo)簽來訪問值。

      解決方案

      (1)    下載OJBMessageResources 的發(fā)布包,網(wǎng)址為http://urceforge. net/struts/ojb-message-resources.zip?download。

      (2)    將ZIP 文件解壓縮到計(jì)算機(jī)目錄中。

      (3)    從ojb-message-resources/dist 文件夾中復(fù)制ojb-msg-res.jar 文件到您的應(yīng)用的WEB-INF/lib 文件夾下。

      (4)    從ojb-message-resources/config 文件夾中復(fù)制屬性、XML 和DTD 文件到您的應(yīng)用程序的src 文件夾下。在構(gòu)建應(yīng)用程序時(shí),這些文件必須復(fù)制到WEB-INF/classes 文件夾中。

      (5)    建立表用于存儲(chǔ)Objec Relational Bridge (OJB)元數(shù)據(jù)表。OJB 使用這些表來存儲(chǔ)內(nèi)部映射信息。例2.12顯示了為MySQL 數(shù)據(jù)庫創(chuàng)建的這些表(即數(shù)據(jù)定義的SQL)。其他數(shù)據(jù)庫的有關(guān)語句包含在OJB中。

      例2.12:OJB 元數(shù)據(jù) DDL (MySQL)

      CREATE TABLE ojb_dlist (

        ID int NOT NULL default '0',

        SIZE_ int default NULL,

        PRIMARY KEY  (ID)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_dlist_entries (

        ID int NOT NULL default '0',

        DLIST_ID int NOT NULL default '0',

        POSITION_ int default NULL,

        OID_ longblob,

        PRIMARY KEY  (ID)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_dmap (

        ID int NOT NULL default '0',

        SIZE_ int default NULL,

        PRIMARY KEY  (ID)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_dmap_entries (

        ID int NOT NULL default '0',

        DMAP_ID int NOT NULL default '0',

        KEY_OID longblob,

        VALUE_OID longblob,

        PRIMARY KEY  (ID)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_dset (

        ID int NOT NULL default '0',

        SIZE_ int default NULL,

        PRIMARY KEY  (ID)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_dset_entries (

        ID int NOT NULL default '0',

        DLIST_ID int NOT NULL default '0',

        POSITION_ int default NULL,

        OID_ longblob,

        PRIMARY KEY  (ID)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_hl_seq (

        TABLENAME varchar(175) NOT NULL default '',

        FIELDNAME varchar(70) NOT NULL default '',

        MAX_KEY int default NULL,

        GRAB_SIZE int default NULL,

        PRIMARY KEY  (TABLENAME,FIELDNAME)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_lockentry (

        OID_ varchar(250) NOT NULL default '',

        TX_ID varchar(50) NOT NULL default '',

        TIMESTAMP_ decimal(10,0) default NULL,

        ISOLATIONLEVEL int default NULL,

        LOCKTYPE int default NULL,

        PRIMARY KEY  (OID_,TX_ID)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_nrm (

        NAME varchar(250) NOT NULL default '',

        OID_ longblob,

        PRIMARY KEY  (NAME)

      ) TYPE=MyISAM;

      CREATE TABLE ojb_seq (

        TABLENAME varchar(175) NOT NULL default '',

        FIELDNAME varchar(70) NOT NULL default '',

        LAST_NUM int default NULL,

        PRIMARY KEY  (TABLENAME,FIELDNAME)

      ) TYPE=MyISAM;

      (6)    創(chuàng)建表,使用例2.13顯示的SQL DDL存儲(chǔ)信息資源數(shù)據(jù)。

      例2.13:MessageResources DDL

      create table application_resources (

        subApp            varchar(100)     not null,

        bundleKey         varchar(100)     not null,

        locale            varchar(10)      not null,

        msgKey            varchar(255)     not null,

        val               varchar(255),

        Primary Key(

          subApp,

          bundleKey,

          locale,

          msgKey

        )

      );

      (7)    根據(jù)信息資源構(gòu)建表。例2.14顯示了一個(gè)簡單的用SQL加載表的方法。

      例2.14:使用SQL 加載消息資源表

      insert into application_resources (

          subApp, bundleKey, locale, msgKey, val )

        values ('', '', '', 'label.index.title',

                'Struts Cookbook');

      insert into application_resources (

          subApp, bundleKey, locale, msgKey, val )

        values ('', '', 'fr', 'label.index.title',

                'Struts Livre de Cuisine');

      (8)    修改Struts 配置文件,以便使用OJBMessageResources Factory。

      <message-resources

         factory="org.apache.struts.util.OJBMessageResourcesFactory"

         parameter="."

      />

      (9)    修改WEB-INF/classes 文件夾中的repository.xml(前三步相同),并對(duì)數(shù)據(jù)庫使用數(shù)據(jù)庫鏈接屬性。例2.15 顯示了MySQL 數(shù)據(jù)庫的配置文件。

      例2.15:MySQL的OJB連接描述符

      <jdbc-connection-descriptor

           platform="MySQL"

           jdbc-level="2.0"

           driver="com.mysql.jdbc.Driver"

           protocol="jdbc"

           subprotocol="mysql"

           dbalias="http://localhost:3306/test"

           username="user"

           password="pass"

      />

      討論

      Struts MessageResources 的職能是管理靜態(tài)文本,如錯(cuò)誤信息、字段標(biāo)簽、表題以及窗口標(biāo)題。利用這種功能,文本以name/value 對(duì)的形式存儲(chǔ)在一個(gè)或多個(gè).properities文件中。這個(gè)文件就是信息資源,名稱是邏輯鍵,值則是要顯示的文本。如果應(yīng)用程序需要針對(duì)某種語言和國家,可以創(chuàng)建新的屬性文件。增加語言和國家編碼所組成的前綴將文件與其特定范圍(語言和國家)聯(lián)系起來。例如,法裔加拿大用戶的 MessageResources.properties 文件為MessageResources_fr_CA.properties。在本地文件中,屬性具體包含到某個(gè)地區(qū)的值。這種本地化資源的方法由 Java本身定義。

      注意:有關(guān)語言和國家編碼的更多細(xì)節(jié),可以參見http://java./j2se/1.4.2/ docs/guide/intl/locale.doc.html。

      這樣的職能適用于大多數(shù)中小型應(yīng)用程序。您或許想用更便于管理的、持久的方式來存儲(chǔ)文本,例如數(shù)據(jù)庫。但Struts 不支持這種直接操作,而是通過擴(kuò)展來支持。實(shí)際上,Struts 運(yùn)用MessageResourcesFactory來創(chuàng)建MessageResources 對(duì)象,并在運(yùn)行時(shí)存儲(chǔ)在servlet 上下文中??梢蕴峁┮粋€(gè)MessageResourcesFactory 的自定義實(shí)現(xiàn),然后在配置文件中聲明這個(gè)實(shí)現(xiàn):

      <message-resources

        factory="com.foo.CustomMessageResourcesFactory"

        parameter="moduleName.bundleKey"

      />

      參數(shù)屬性定義了Struts 的模塊名稱以及bundle鍵(bundle名),信息資源庫為它創(chuàng)建了信息。由此,可以創(chuàng)建自己的信息資源庫,從數(shù)據(jù)庫中讀取消息。謝天謝地,這種想法已經(jīng)得以實(shí)現(xiàn)!James Mitchell,一個(gè)長期設(shè)計(jì)Struts的人,已經(jīng)實(shí)現(xiàn)了OJBMessageResources,這個(gè)類集合調(diào)整了對(duì)象相關(guān)型映射框架OBJ,提供了一個(gè)使用簡便的數(shù)據(jù)庫驅(qū)動(dòng)MessageResource的實(shí)現(xiàn)方法。

      如果對(duì)OJB不熟悉,不要因此而放棄使用這種方法。不需要了解OJB 就能使用OJBMessageResources。使用OJB將關(guān)系數(shù)據(jù)映射到對(duì)象數(shù)據(jù)非常簡單。如果使用解決方案中的表架構(gòu),不需要做任何修改就可以映射數(shù)據(jù)。但如果想使用不同的架構(gòu),可以修改OJB基于XML中配置文件的映射來滿足需要。不需要修改Java編碼就能實(shí)現(xiàn)MessageResourcesFactory。OJBMessageResources文檔健全并且配有安裝向?qū)Ш蚏EADME文件。上述解決方案來自于這些說明。

      為了更有效地使用OJBMessageResources,了解數(shù)據(jù)庫架構(gòu)如何映射到目標(biāo)數(shù)據(jù)是很有幫助的。首先,架構(gòu)僅需要?jiǎng)?chuàng)建一個(gè)表來存儲(chǔ)信息資源,使用單獨(dú)的表就簡化了數(shù)據(jù)映射。表2.2描述了表的組成及其在struts中的用法。

      表2.2:OJBMessageResources架構(gòu)

      列名稱

      相關(guān)的Struts概念

      說明

      subApp

      模塊前綴

      非空。用空字符串 ("") 來代表默認(rèn)模塊

      bundleKey

      使用多個(gè)集合時(shí)定位信息資源集合的鍵。它的值必須與Struts配置文件中message-resource元素key屬性的值匹配。該值與Struts標(biāo)簽bundle屬性的值相關(guān)(例如,bean:message bundle="labels")

      非空。用空字符串 ("") 來代表默認(rèn)鍵。其他的名稱分別為邏輯名"labels","headers"和"errors"

      Locale

      本地編碼代表本地信息。它的值是雙字母語言編碼和雙字母國家編碼的結(jié)合

      非空。U用空字符串("")來代表默認(rèn)區(qū)域。例如,"en_US" 表示English/United States,"fr" 表示 French

      msgKey

      用于查找信息的信息名稱。對(duì)于所有的區(qū)域均相同. 它等于屬性文件中屬性左邊的值。該值與Struts 標(biāo)簽中從MessageResources獲得的值的key屬性值相關(guān)

      非空,任何時(shí)候都不為空。例如"title.hello.world"

      val

      與msgKey相關(guān)的值。它是本地文本,與屬性的右邊值相關(guān),由Struts標(biāo)簽獲取和顯示

      可為空。這是頁面上顯示的文本。例如, "Hello, World!"

      注意,當(dāng)OJBMessageResources使用單獨(dú)的數(shù)據(jù)庫表來存儲(chǔ)所有的信息資源時(shí),每個(gè)信息資源必須在struts-config.xml文件中使用message-resources元素進(jìn)行配置。換句話說,就是需要用bundleKey和 subApp為每一個(gè)信息資源配置一個(gè)message-resource加以標(biāo)識(shí)。2.6節(jié)敘述了更多細(xì)節(jié)。

      相關(guān)鏈接

      2.6節(jié)敘述了如何使用多個(gè)信息資源配置Struts。第14章介紹了Struts應(yīng)用程序國                       際化。

      OJB 是Apache下的項(xiàng)目。關(guān)于OJB的完整信息可參見http://db./ojb

      人們正在努力將Struts 信息資源分解為可重新利用的通用類。關(guān)于Commons Resources 項(xiàng)目,http://jakarta./commons/sandbox/resources/提供一個(gè)由屬性文件和其他持久化機(jī)制組成的信息資源的實(shí)現(xiàn),這些機(jī)制包括OBJ、Hibernate、Torque和直接使用JDBC。希望在Struts的下一個(gè)版本能夠?qū)崿F(xiàn)封裝Commons Resources的內(nèi)部信息資源

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多