亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

StrutsHOW-TO系列之?dāng)?shù)據(jù)庫(kù)訪問(wèn)

2019-11-18 13:53:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  訪問(wèn)一個(gè)數(shù)據(jù)庫(kù)
  在一個(gè)其于Struts的應(yīng)用系統(tǒng)的設(shè)計(jì)過(guò)程中,最好能在web/表示層(PResentation layer)和你的商務(wù)邏輯類(lèi)(包含所有數(shù)據(jù)訪問(wèn)操作的層)的中間,定義一個(gè)Action類(lèi),作為小型的適配器(thin adapter)。
  
  所以,你可以先定義一些商務(wù)API(business API),這些API就是簡(jiǎn)單的java類(lèi)。你可以傳遞一些參數(shù)給這些對(duì)象,并從這些對(duì)象返回一個(gè)Java Bean或者Java Bean的集合。這個(gè)Action類(lèi)負(fù)責(zé)調(diào)用這些對(duì)象,并把它們返回的值傳遞給web/表示層。
  
  通常,你可以為每一個(gè)你需要調(diào)用的商務(wù)方法/商務(wù)類(lèi)API創(chuàng)建一個(gè)Action類(lèi)。理想情況下,所有的數(shù)據(jù)庫(kù)訪問(wèn)代碼都被封裝進(jìn)了這些商務(wù)API類(lèi)里,所以Struts并不知道你正在使用的持久層(persistent layer)(甚至都不知道你使用了持久層)。它只需要傳遞一個(gè)主鍵(Key)或者一個(gè)查詢參數(shù),然后處理返回的結(jié)果bean或者bean集合。這樣,你就可以在其他的應(yīng)用環(huán)境里復(fù)用這些商務(wù)API類(lèi),你還可以對(duì)這些獨(dú)立于Struts或HTTP環(huán)境的商務(wù)API進(jìn)行單體測(cè)試。
  
  開(kāi)始的時(shí)候,最簡(jiǎn)單的方法就是設(shè)計(jì)一個(gè)1:1的方案,為你的每一個(gè)商務(wù)API入口(entry-point)定義一個(gè)Action類(lèi)。當(dāng)你的經(jīng)驗(yàn)豐富了以后,你也可以使用DispatchAction組合這些Action類(lèi)。你甚至可以定義一個(gè)簡(jiǎn)單的"框架"Action,用來(lái)調(diào)用所有的這些商務(wù)類(lèi)。你可以在contrib目錄里找到Scaffold設(shè)計(jì)的ProcessAction,這是一個(gè)"框架"Action的完整實(shí)現(xiàn)。使用這種方案可以使用更少的Action類(lèi),但你必須對(duì)Struts和MVC框架的底層實(shí)現(xiàn)有較深的理解。不要害怕在開(kāi)始的時(shí)候定義過(guò)多的Action,Struts的配置方案可以給予你充分的自由在以后重構(gòu)你的設(shè)計(jì),因?yàn)槟憧梢造`活的改變你的Action類(lèi),而不會(huì)對(duì)應(yīng)用程序造成影響。
  
  在理想情況下,商務(wù)邏輯層(business logic layer)應(yīng)該封裝所有的數(shù)據(jù)訪問(wèn)細(xì)節(jié),包括數(shù)據(jù)庫(kù)連接的獲得。但是,一些應(yīng)用程序的設(shè)計(jì)要求調(diào)用者可以從一個(gè)DataSource對(duì)象來(lái)獲得數(shù)據(jù)庫(kù)連接。碰到這種情況時(shí),Struts DataSource治理器可以使你在需要的時(shí)候配置這些DataSource資源。
  
  Struts DataSource治理器在Struts配置文件(Struts-config.xml)里定義。這個(gè)治理器可以用來(lái)分發(fā)和配置任何實(shí)現(xiàn)了javax.sql.DataSource接口的數(shù)據(jù)庫(kù)連接池(connection pool)。假如你的DBMS或者容器內(nèi)置了符合這些要求的連接池,你可以優(yōu)先選用它。
  
  Jakarta的公共連接池實(shí)現(xiàn) - BasicDataSource
  假如你的手頭沒(méi)有連接池的本地(native)實(shí)現(xiàn),你可以使用Jakarta提供的公共連接池實(shí)現(xiàn)[org.apache.commons.dbcp.BasicDataSource],它可以和DataSource治理器"合作"的很好。另外,Struts還在它的util包里包含了一個(gè)GenericDataSource類(lèi),這也是一個(gè)連接池實(shí)現(xiàn)。但是這只是一個(gè)非常簡(jiǎn)單的實(shí)現(xiàn)方案,不推薦使用,因?yàn)樗赡茉赟truts的以后版本中被BasicDataSource或其它的數(shù)據(jù)源實(shí)現(xiàn)替換掉。
  
  下面是一段Struts-config.xml配置文件中的數(shù)據(jù)源配置(使用GenericDataSource數(shù)據(jù)源實(shí)現(xiàn)),你可以更改相應(yīng)的設(shè)置以適合你自己的系統(tǒng)。
  
  <!-- configuration for GenericDataSource wrapper -->
  <data-sources>
  <data-source>
  <set-property
  property="autoCommit"
  value="false"/>
  <set-property
  property="descr  value="Example Data Source Configuration"/>
  <set-property
  property="driverClass"
  value="org.postgresql.Driver"/>
  <set-property
  property="maxCount"
  value="4"/>
  <set-property
  property="minCount"
  value="2"/>
  <set-property
  property="pass
Word"
  value="mypassword"/>
  <set-property
  property="url"
  value="jdbc:postgresql://localhost/mydatabase"/>
  <set-property
  property="user"
  value="myusername"/>
  </data-source>
  </data-sources>
  
  使用BasicDataSource數(shù)據(jù)源實(shí)現(xiàn)的配置方案如下:
  <data-sources>
  <!-- configuration for commons BasicDataSource -->
  <data-source type="org.apache.commons.dbcp.BasicDataSource">
  <set-property
  property="driverClassName"
  value="org.postgresql.Driver" />
  <set-property
  property="url"
  value="jdbc:postgresql://localhost/mydatabase" />
  <set-property
  property="username"
  value="me" />
  <set-property
  property="password"
  value="test" />
  <set-property
  property="maxActive"
  value="10" />
  <set-property
  property="maxWait"
  value="5000" />
  <set-property
  property="defaultAutoCommit"
  value="false" />
  <set-property
  property="defaultReadOnly"
  value="false" />
  <set-property
  property="validationQuery"
  value="SELECT COUNT(*) FROM market" />
  </data-source>
  </data-sources>
  
  注重,你可以在你的應(yīng)用系統(tǒng)中定義不止一個(gè)數(shù)據(jù)源,你可以根據(jù)需要定義多個(gè)數(shù)據(jù)源,并為它們分別起一個(gè)邏輯名(logical name)。這樣做可以給你的應(yīng)用系統(tǒng)提供更好的安全性和可測(cè)量性(scalability),你還可以定義一個(gè)專(zhuān)用于測(cè)試的數(shù)據(jù)源。
  
  配置好DataSource以后,你就可以在你的應(yīng)用系統(tǒng)中使用這些數(shù)據(jù)源了。下面這段代碼演示了怎樣在Action類(lèi)的execute方法中通過(guò)這些數(shù)據(jù)源來(lái)生成數(shù)據(jù)庫(kù)連接。
  
  public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
  throws Exception
  {
  DataSource dataSource;
  Connection cnn;
  
  try
  {
  dataSource = getDataSource(request);
  cnn = dataSource.getConnection();
  // 數(shù)據(jù)連接已經(jīng)建立了,你可以做你想做的事情了
  }
  catch (SQLException e)
  {
  getServlet().log("處理數(shù)據(jù)庫(kù)連接", e);
  }
  finally
  {
  // 在finally塊里包含這些代碼
  // 用以保證連接最后會(huì)被關(guān)閉
  try
  {
  cnn.close();
  }
  catch (SQLException e)
  {
  getServlet().log("關(guān)閉數(shù)據(jù)庫(kù)連接", e);
  }
  }
  }
  
  注重:假如你使用公共的BasicDataSource,你提供給pingQuery屬性的查詢語(yǔ)句(假如你設(shè)置了話)必須至少要能返回一行記錄。
  
  例子:SELECT COUNT(*) FROM VALIDTABLE
  
  你可以把VALIDTABLE替換成你的數(shù)據(jù)庫(kù)中包含的任何有效的表。
  
  使用多個(gè)數(shù)據(jù)源
  假如你需要在模塊(Module)中使用多于一個(gè)的數(shù)據(jù)源,你可以在配置文件的<data-source>元素里包含一個(gè)key屬性。
  
  <data-source>
  <data-source key="A" type="org.apache.commons.dbcp.BasicDataSource">
  …屬性配置略, 同上…
  </data-source>
  <data-source key="B" type="org.apache.commons.dbcp.BasicDataSource">
  …屬性配置略, 同上…
  </data-source>
  </data-source>
  
  你代碼里,你可以通過(guò)這些key獲得不同的數(shù)據(jù)源。代碼如下:
  
  …
  try
  {
  dataSourceA = getDataSource(request, "A");
  dataSourceB = getDataSource(request, "B");
  …
  
  你可以根據(jù)需要為每一個(gè)模塊設(shè)置多個(gè)數(shù)據(jù)源。但同一模塊里每個(gè)數(shù)據(jù)源的key屬性必須唯一,因?yàn)镾truts模塊系統(tǒng)是以每一個(gè)模塊為單位治理命名空間的。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
91高清免费视频| 婷婷六月国产精品久久不卡| 激情五月播播久久久精品| 日本一区二区三区视频在线| 国产高清在线一区二区| 在线综合+亚洲+欧美中文字幕| 国产一级不卡毛片| 91久久免费视频| 毛片在线看片| 欧美精品小视频| 青青草国产精品亚洲专区无| 国内自拍视频在线观看| 中文字幕精品—区二区| 亚洲熟妇av一区二区三区漫画| 国产精品久久久久久久小唯西川| 美女福利视频一区二区| 久久久久久久久亚洲| 久久伦理中文字幕| 3d蒂法精品啪啪一区二区免费| 国产精品毛片一区视频| 亚洲人成绝费网站色www| 亚洲成人手机在线| 国产成人精品一区二区三区视频| ririsao久久精品一区| 欧美一区二区性放荡片| 18禁免费无码无遮挡不卡网站| 免费成人在线观看av| 精品一区二区三区四区五区六区| 欧美xxxxx牲另类人与| 天天天综合网| 久久精品一区二区国产| 亚洲精品一区在线| 荡女精品导航| 久久99精品这里精品3| 在线观看中文字幕| 偷偷操不一样的久久| 在线精品视频视频中文字幕| 中文字幕日本乱码精品影院| 国产视频福利一区| www.五月婷婷| 亚洲人成人99网站| 久久久久久亚洲精品不卡4k岛国| 欧美黑人一区二区| 美女网站视频黄色| 国产三级aaa| www.xxx亚洲| 国产成人av一区二区三区| rebdb初裸写真在线观看| 国产成人高清激情视频在线观看| www中文字幕在线观看| 国产精品久久久久久久久免费桃花| 99久久精品无码一区二区毛片| 桃色av一区二区| 亚洲一区在线视频| 日韩女优av电影在线观看| 91久久精品国产91久久| 欧美视频你懂的| 日韩欧美国产小视频| 97久久超碰福利国产精品…| 久草福利资源在线观看| 400部精品国偷自产在线观看| 国产精品视频免费播放| 免费成人在线网站| 麻豆91精品91久久久| 色哟哟一区二区在线观看| 免费能直接在线观看黄的视频| 日本va欧美va欧美va精品| 国产伦精品一区二区三| 久久综合久中文字幕青草| 国产91成人video| 久久一卡二卡| 国产精品入口麻豆免费| 椎名由奈jux491在线播放| 国产大奶视频| 日韩精品水蜜桃| 久热在线观看视频| 人妻精品无码一区二区三区| 天天摸天天碰天天添| 在线播放免费av| 精品国产伦理网| 精品中文字幕一区二区| 国产亚洲一区在线播放| 亚洲成人久久电影| 国产精品爱啪在线线免费观看| 成人黄色免费电影| 丝袜美腿av在线| 亚洲精品天堂成人片av在线播放| 日本免费视频www| 国产视频一二| 俺来俺也去www色在线观看| 国产精品影视天天线| 超碰91人人草人人干| 性欧美videoshd高清| 中文字幕毛片| 日本欧美精品久久久| 欧美一级日韩免费不卡| 国产福利一区二区精品秒拍| 欧美在线导航| 大地资源高清播放在线观看| 可以免费看黄色的网站| 波多野结衣视频网址| 国产精品久久久久久久岛一牛影视| 国产精品sss| 亚洲网址在线| 欧美成人一级视频| 99porn视频在线| 豆花视频一区二区| av免费在线免费观看| 日本加勒比高清在线| 国内精品久久久久久久久电影网| 黄色三级视频片| 97视频热人人精品免费| 美国精品一区二区| 国产视频一区二区三区在线播放| 不卡在线一区| 亚洲一区二区自拍| 日韩视频免费中文字幕| 亚洲无线看天堂av| 久久中文字幕在线观看| 欧美精品久久| 亚洲欧美国产va在线影院| 久久久久久久香蕉| 亚洲午夜福利在线观看| 精品成人一区二区| 亚洲摸摸操操av| 国产乱精品一区二区三区| 国产亚洲一区二区手机在线观看| 日韩电影二区| 欧美一级特黄aaa| 涩涩av在线| 国产成人aaaa| 性生活视频网站| 免费免费啪视频在线观看| 亚洲精品自拍区在线观看| 精品在线不卡| 91精品国产综合久久婷婷香蕉| 91在线观看入口| 亚洲二区自拍| 精品人妻一区二区三区香蕉| 欧美日韩国产精品一区二区不卡中文| av网站导航在线观看免费| 欧美a级黄色大片| 免费日韩一区二区| 一级做a爰片久久毛片16| 丰腴饱满的极品熟妇| 日韩av中文字幕一区二区| 国产不卡免费视频| 欧美激情综合亚洲一二区| 蜜臂av日日欢夜夜爽一区| 亚洲资源网你懂的| 精品亚洲一区二区三区四区五区高| www.99在线| 大桥未久在线视频| 欧美,日韩,国产在线| 伦理一区二区三区| 久久久婷婷一区二区三区不卡| 欧美性猛交xxxx乱大交| 羞羞视频网站在线免费观看| 国产成人久久精品77777| 精品视频在线你懂得| 欧美丰满少妇xxxxx高潮对白| 午夜精品久久久久久99热软件| 国产成人精品久久亚洲高清不卡| 国产青草视频在线观看视频| 九色国产蝌蚪| 午夜一区二区三区不卡视频| 国产精品久久久久久影院8一贰佰| 欧美另类videoxo高潮| 国产激情一区| 日本成人在线不卡视频| 99久久精品国产亚洲| 久久精品人人做人人爽电影蜜月| 国产精品丝袜一区二区三区| 亚洲国产精品久久久久| 亚洲精品菠萝久久久久久久| 中文字幕第一页在线视频| 强制捆绑调教一区二区| 久久九九全国免费精品观看| 色一区av在线| 在线观看免费小视频| 亚洲三级在线免费观看| 亚洲成a人片77777精品| 小小影院久久| 国产精品色在线| 天天免费综合色| 国产精品久久久久久久成人午夜| 国产熟人av一二三区| 亚洲一区二区在线免费| 亚洲精品一区二三区| 欧美精品福利视频| 精品伦一区二区三区| 怡红院男人的天堂| 国产一区二区在线观看免费播放| 2023av在线| 黑人一区二区三区| 久久夜色精品| 免费精品国产自产拍在| 久久不射热爱视频精品| 久久九九国产精品| 成人做爰69片免网站| 精品国内亚洲在观看18黄| 亚洲手机成人高清视频| av在线免费观看不卡| 亚洲小视频在线观看| 激情亚洲综合在线| 日本不卡一区二区三区| 国产综合在线观看视频| 奇米色在线视频| 日本午夜免费一区二区| 久久男人资源站| 在线观看亚洲国产| 中文字幕欧美日韩| 亚洲欧洲在线一区| 狠狠色丁香久久婷婷综合丁香| 国产精品嫩草影院8vv8| 无码人妻一区二区三区在线视频| 国产免费一区二区三区网站免费| 91极品尤物在线播放国产| 韩国国内大量揄拍精品视频| 蜜臀久久99精品久久久久久| 亚洲一二区视频| 高清一区二区三区四区五区| 九七伦理97伦理| 久久久久久久久久网| 国产成人av自拍| 国产成人亚洲精品无码h在线| 欧美成人观看免费全部完小说| 久久一日本道色综合久久| 国内一区二区三区精品视频| 狠狠色狠狠色综合婷婷tag| 国产手机在线视频| 国产黄色录像视频| 日本不卡视频一区| 国产成人97精品免费看片| 视频一区欧美日韩| 亚洲在线国产日韩欧美| 免费在线看黄色| 日本一区视频在线观看| 羞羞的视频在线看| 奇米影视首页 狠狠色丁香婷婷久久综合| 26uuu另类欧美亚洲曰本| 国产亚洲成aⅴ人片在线观看| 一级二级在线观看| 在线中文字幕资源| 91蝌蚪视频在线| 暗呦丨小u女国产精品| 日韩手机在线观看| 午夜不卡av在线| 日韩欧美一区二区在线| 青青国产在线视频| 日本中文字幕视频一区| 日韩高清成人| 91黄页在线观看| 久久综合一区二区三区| 亚洲综合中文| 嫩草嫩草嫩草嫩草嫩草| 日韩毛片一二三区| 日韩免费中文专区| 欧美精品麻豆| 青娱乐国产精品| 日韩一区电影| 99视频有精品高清视频| 成人免费淫片视频软件| 亚欧激情乱码久久久久久久久| 狠狠干天天爱| 日本一区二区综合亚洲| 成人黄色a级片| 欧美性大战久久久久xxx| 日韩av在线免费观看不卡| 日韩高清国产一区在线观看| 精品欧美日韩精品| 天天色综合4| 九九热视频在线免费观看| 亚洲图色在线| 美女久久精品| 性色视频在线观看| 亚洲国产欧美国产第一区| 精品人妻一区二区三区日产乱码| 精品一区二区三区久久| 这里有精品可以观看| 色乱码一区二区三区熟女| 欧美视频第一| 在线精品亚洲| 91av成人在线| 午夜先锋成人动漫在线| 一区二区三区不卡在线观看| 国产区亚洲区欧美区| 忘忧草精品久久久久久久高清| 国产成人夜色高潮福利影视| 欧美成人全部免费| 成人国产精品久久久网站| 91欧美激情一区二区三区成人| 三级网在线观看| 久久精品国产亚洲精品2020| 日韩高清中文字幕一区二区| 成人免费网址在线| www.91av视频.com| 欧美日韩国产中文精品字幕自在自线| 无码国产69精品久久久久同性| 美丽的小蜜桃4春潮| 成人网免费视频| 久草视频手机在线| 免费福利视频网站| 日韩少妇内射免费播放| 97se国产在线视频| 免费在线视频欧美| 69亚洲乱人伦| 久久视频www| 公肉吊粗大爽色翁浪妇视频| 搡老岳熟女国产熟妇| 亚洲精品国产一区二区| 亚洲欧美强伦一区二区| 亚洲综合自拍偷拍| 国产精品裸体瑜伽视频| 欧美三级在线| 一夜七次郎国产精品亚洲| 欧美日韩精品在线视频| 国产成人综合一区二区三区| 羞羞的视频在线看| 国产三级精品在线观看| 伊人国产在线看一| 久久久久久国产| avtt在线播放| 国产视频在线观看网站| 亚洲男女一区二区三区| 国产精品日本欧美一区二区三区| 日本激情一区二区| 国产精品国三级国产av|