999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Struts2框架在信息發布系統中的應用研究*

2014-06-13 11:32:36歐陽宏基
微處理機 2014年2期
關鍵詞:頁面信息

葛 萌,歐陽宏基

(咸陽師范學院信息工程學院,咸陽712000)

1 引言

Struts作為Apache組織的一個開源項目,是一種基于MVC設計模式的Java Web開發框架[1],其第一代產品Struts1在Java Web開發領域具有非常高的市場占有率。隨著時間的推移,Struts1的一些弊端逐漸顯露出來,例如表現層所支持的技術單一、Action組件與Servlet API緊密耦合并且是單例實現、存在線程安全性問題、侵入式框架、嚴重依賴于Struts1 API等。因此Struts2在Struts1和WebWork的技術基礎上進行了整合。它以WebWork為核心,采用攔截器的機制來處理用戶請求,目的是為了使業務邏輯控制器能夠與Servlet API完全脫離開,便于開發與測試[2]。分析了Struts2的體系結構,詳細描述了Struts2各組件在響應客戶端請求時的調用過程。按照MVC設計模式,依據一個Web站點的信息發布系統,詳細描述了表現層、控制層和模型層的實現過程,對于利用Struts2開發Java Web應用具有一定的借鑒意義。

2 Struts2體系結構

Struts2的體系結構(如圖1所示)與Struts1差別非常大,因為Struts2使用了WebWork的設計核心,而不是Struts1的設計核心。Struts2框架的基本執行流程如下描述:

(1)客戶端向Servlet容器(例如 Tomcat)發送HttpServletRequest請求。

(2)該請求經過一系列的過濾器(Filter)進行過濾,其中ActionContextCleanUp是一個可選過濾器,該過濾器對于Struts2和其他框架的集成起作用(例如:SiteMesh Plugin)。

(3)FilterDispatcher是Struts2的核心過濾器,擔當MVC模式中控制層的核心功能。FilterDispatcher根據ActionMapper來決定當前用戶請求是否需要調用某個Action。

(4)如果 ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給 Action-Proxy。

(5)ActionProxy通過Configuration Manager讀取框架的配置文件(struts.xml),找到需要調用的Action類,并創建一個ActionInvocation實例。

(6)ActionInvocation實例使用命名模式來調用,在調用 Action的過程前后,涉及到相關攔截器(Intercepter)的調用。

(7)默認情況下,Action調用execute()方法執行相應的業務邏輯(也可以是Action中其它的方法,但這些方法在調用時需要顯示聲明)。

(8)當 Action執行完畢,ActionInvocation實例根據配置文件(查找響應的是什么信息如:SUCCESS、ERROR,INPUT等)找到對應的返回結果。返回結果通常是(也可能是另外的一個Action)JSP頁面或者FreeMarker的模版來響應用戶請求,在表示過程中可以使用Struts2提供的標簽。

圖1 Struts2體系結構

3 信息發布系統的實現

目前幾乎所有Web站點都具備信息的動態維護功能。管理人員合法登錄到站點的后臺模塊就可以對最新信息、文檔、圖片等資源進行添加、上傳等操作,使得前臺頁面顯示的內容呈現出動態變化的過程。本節以咸陽師范學院國際交流學院的Web站點為例,依據MVC模式結合Struts2和FCKEditor框架,詳細描述信息發布系統的實現過程。

3.1 表示層的實現

表示層主要由JSP頁面、FCKEditor和Struts2標簽構成。FCKeditor是目前最優秀的可見即可得網頁文檔編輯器之一,它采用JavaScript編寫,具備功能強大、配置容易、跨瀏覽器、支持多種編程語言(可以和 PHP、JavaScript、ASP、ASP.NET、Java 等不同的編程語言相結合)、開源等特點[3]。本系統選用的是Java版本的FCKEditor2.6,首先將fckeditorjava-core-2.6.jar包導入到 WEB -INF/lib目錄中,然后在需要FCKEditor的JSP頁面頭部加入以下聲明代碼。

< %@taglib uri="http://java.fckeditor.net"prefix="FCK"%>

< %@page import="net.fckeditor.*"% >在頁面需要顯示文檔編輯器的位置,加入如下Java代碼段:

//以JSP內置對象request為實參創建FCKEditor對象并命名

FCKeditor fckEditor=new FCKeditor(request,"EditorDefault");

//FCKEditor一些簡單屬性的設置,并通過out內置對象將文檔編輯器顯示在JSP頁面上fckEditor.setValue("");

fckEditor.setHeight("500");

out.println(fckEditor);

Struts2提供了功能強大的標簽庫,這些標簽不依賴于任何的表現層技術,同時支持用戶自定義標簽以滿足頁面復雜多變的需求[4]。Struts2提供的標簽主要包括:UI類標簽、控制類標簽和支持Ajax的標簽等。使用Struts2標簽前需要添加導入標簽庫的語句:<%@taglib uri="/struts-tags"prefix="s"%>

下面是前臺JSP頁面顯示最新信息標題和發布日期的Struts2控制類標簽-iterator的使用代碼。

<s:iterator value="list_news"var="infos">

<tr width="100%"height="20">

<td width="85%">

<a class="t1"href="content.jsp?id= < s:property value="#infos.id"/>"target="blank"> <s:property value="#infos.title"/> < /a>

</td>

<td width="15%"><s:property value="#in-fos.publishDate"/>

</td>

</tr>

</s:iterator>

其中value屬性的值list_news為相應Action中的一個集合,這個集合里封裝的是與數據庫表對應的信息實體的JavaBean對象,再通過property標簽將需要的屬性顯示在頁面中。

3.2 控制層的實現

控制層主要完成Action和配置文件的定義。Struts2框架有兩個核心配置文件,其中struts.xml是整個Struts2應用程序的核心配置文件(存放在項目的src目錄下),其中主要包括包配置、命名空間配置、攔截器配置、Action映射及Action處理結果和物理資源之間的映射配置及異常處理配置等。另一個struts.properties配置文件中主要定義了Struts2框架的大量常量屬性。但通常推薦也是在struts.xml文件中來配置這些常量屬性。以下是本系統中struts.xml配置文件的部分代碼。

<struts>

<constant name="struts.i18n.encoding"value="UTF-8"/>

< constant name="struts.multipart.maxSize"value="10701096"/>

<package name="lhy-default"namespace="/bgm"extends="struts-default">

<global-results>

<result name="error" > /bgm/error.jsp < /result>

< /global-results>

<global-exception-mappings>

<exception-mappingresult="error"exception="java.lang.Exception" > < /exception -mapping>

</global-exception-mappings>

</package>

<package name="backgroud"namespace="/bgm"extends="lhy-default">

<action name="InformationManage"class="lhy.action.InformationAction" >

<result name="success">${destinationPage}</result>

<resultname ="error" >/bgm/Information Manage-Result.jsp < /result>

</action>

</package>

</struts>

其中constant標簽用于配置相應常量屬性。package標簽用于定義包配置,name為必填屬性,用來指定包的名字,extends為可選屬性,用來指定該包繼承其他包。如果繼承其它包,可以繼承其它包中的Action、攔截器等。namespace為可選屬性,用來指定該包的命名空間。global-results和globalexception-mapping兩個標簽結合起來完成異常的聲明式處理方式,exception屬性指明了處理異常的類型,result屬性指明了產生該異常時的返回類型,從而在global-results標簽中找到對應的顯示頁面。由于異常的聲明式處理方式配置在一個package標簽中,那么其他的package可以進行繼承,從而共享這個異常處理方式。action標簽用來配置Action對象,name為必填屬性(在一個 package中Action的name值唯一),class為必填屬性用來指定Action字節碼的位置。result為action的子標簽,name為可選屬性,其值默認是SUCCESS(可選值為SUCCESS、NONE、ERROR、INPUT、LOGIN)表示Action執行的結果,不同的結果定位到不同的資源。

除了配置文件外,控制層最主要的任務是根據用戶請求定義相應的Action來進行處理。Struts2的Action采用了低侵入式設計,即Action可以是一個POJO,不與任何Struts2的基類和接口打交道。但實際上為了方便實現Action,大多數情況下都會繼承com.opensymphony.xwork2.ActionSupport類,并重寫此類的execute()方法。因為此類中實現了很多的實用接口,提供了很多默認方法,這些默認方法包括獲取國際化信息的方法、數據校驗的方法、默認的處理用戶請求的方法等,這樣可以大大簡化Action的開發。以下是信息發布業務所對應的Action核心代碼。

import com.opensymphony.xwork2.ActionSupport;

public class InformationAction extends ActionSupport{

privateInformationBean infoBean;//HTTP 向Action傳遞參數采取域模型的方式

public String execute(){

String tag=ERROR;

int opResult=0;

if(opType.equals("add"))//當前執行添加操作

{

//調用模型層組件,執行持久化操作

InfoDAO infoDAO=DAOFactory.getDAOInstance(InfoBean.class);

opResult=infoDAO.addInformation(infoBean);

if(opResult==1)

{

tag=SUCCESS;

destinationPagePath="/lhy/bgm/ShowInfo.jsp";

}

}

r eturn tag;

}}

由于Struts2的Action直接封裝了HTTP請求參數,與Servlet API實現了松耦合。Struts2的Action接收HTTP請求參數一共有三種方式:使用Action的屬性、域模型、實現ModelDriver泛型接口。本系統采用域模型方式來接收請求參數,此方式的優點在于避免Action內部出現大量與實體相關的屬性和實現過多的接口。例如上述代碼中的infoBean,它是一個JavaBean對象,內部封裝了與信息實體相關的屬性。Action類中要提供infoBean的get和set方法。

3.3 模型層的實現

和Struts1一樣,Struts2也沒有在模型方面提供現成的組件,為了達到Java EE分層模型之間的松散耦合,開發人員需要選取JavaBean或者EJB組件來完成業務邏輯和持久化邏輯。本系統選取JavaBan來實現業務邏輯,利用泛型DAO模式結合JDBC來實現持久化邏輯。DAO模式是Java EE數據持久層所使用的最廣泛的模式,它的核心思想是向外部提供一個訪問數據源的統一接口,對外隱藏操作數據源的實現細節,以至于將來更換數據持久化方式時不影響上層的調用者。由于一個系統中可能會存在多個需要持久化操作的實體類,這些實體類對數據源的CRUD操作都具有相同點,因此在DAO模式的基礎上加入泛型機制可以避免大量重復的CRUD代碼并且能夠解決強制類型轉換所可能產生的異常。

控制層通過Action調用持久化層邏輯的過程如圖2所示。DAOFactory通過工廠模式向上層調用者隱藏了具體DAO實現類的創建過程。實體類通常與數據庫表對應,每個實體類都有相應的DAO實現,由于不同的實體類基本上都具有相同的CRUD操作,所以定義了泛型DAO接口提取了所有實體類共有的持久化方法,并在泛型實現類中通過模板模式進行抽象,將不同實體類屬性與表中字段的映射留給具體泛型實現類去完成。JdbcUtil是采用單例模式設計的一個JDBC工具類,提供了通過DataSource獲取Connection對象的方法以及釋放相關JDBC資源的方法。為了實現對Connection對象的復用以提高數據庫訪問的性能,在Tomcat中配置了DBCP連接池。Tomcat Servlet容器將DBCP數據源作為一個JND I數據源,通過配置參數來使用DBCP 連接池[5]。在 DBPool.config 配置文件中定義了連接池的相關參數(初始連接數、最大活動連接數、最小空閑連接數、最大空閑連接數等)。

圖2 Action調用持久化層邏輯

4 結束語

論文詳細分析了Struts2框架的組成部分以及響應用戶請求的執行過程,按照MVC模式的視圖、控制、模型三個部分結合信息發布系統詳細描述了Struts2框架的實現過程。實踐表明:Struts2框架能夠簡化Web應用的開發過程,使得程序具有清晰的結構框架,并且開發人員能夠分工協作,從而提高開發效率和系統的可擴展性和可維護性。

[1]甘文麗,劉為超.基于Struts2和Ajax的企業級Web應用開發[J].工礦自動化,2013,39(2):24 -25.

[2]丁波,晁愛農.基于Struts2框架的 AJAX開發研究[J].計算機工程與設計,2009,30(16):3910 -3911.

[3]董海燕,王衛東.基于JSF、Spring和Hibernate的技術資料綜合管理系統設計[J].計算機應用與軟件,2012,29(5):214 -214.

[4]陸舟.Struts2技術內幕:深入解析Struts架構設計與實現原理[M].機械工業出版社,2012,185-187.

[5]陳潔.DBCP數據庫連接池的自優化配置[J].計算機與現代化,2010(12):112-113.

猜你喜歡
頁面信息
微信群聊總是找不到,打開這個開關就好了
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
同一Word文檔 縱橫頁面并存
淺析ASP.NET頁面導航技術
其實IE也懂Chrome的心
信息
建筑創作(2001年3期)2001-08-22 18:48:14
健康信息
祝您健康(1987年3期)1987-12-30 09:52:32
主站蜘蛛池模板: 波多野结衣亚洲一区| 国产专区综合另类日韩一区| 中国黄色一级视频| 日韩黄色精品| 精品伊人久久久香线蕉| 人人爽人人爽人人片| 亚洲国产天堂久久九九九| 日本午夜影院| 99re免费视频| 77777亚洲午夜久久多人| 欧美三级不卡在线观看视频| 国产精品无码一区二区桃花视频| 91九色国产在线| 色丁丁毛片在线观看| 99久久精品久久久久久婷婷| 亚洲一区二区约美女探花| 欧美成人精品高清在线下载| 婷婷综合亚洲| 国产日韩欧美一区二区三区在线| 日韩中文无码av超清| 一区二区无码在线视频| 高清久久精品亚洲日韩Av| 国产午夜不卡| 亚洲国产成人综合精品2020 | 欧美高清视频一区二区三区| 欧美一区二区丝袜高跟鞋| 91视频99| 国产成人综合日韩精品无码不卡| 成人免费黄色小视频| 亚洲天堂免费在线视频| 亚洲AⅤ永久无码精品毛片| 国产在线视频导航| 国产日韩av在线播放| 欧美激情,国产精品| 日本成人精品视频| 亚洲A∨无码精品午夜在线观看| 青草精品视频| 又粗又硬又大又爽免费视频播放| 成人噜噜噜视频在线观看| 欧美性猛交xxxx乱大交极品| 亚洲丝袜第一页| 免费看美女自慰的网站| 黄色片中文字幕| 好吊妞欧美视频免费| 婷五月综合| 伊人色婷婷| 色综合色国产热无码一| 精品黑人一区二区三区| 久久这里只有精品国产99| 久久精品人人做人人综合试看| 欧美精品伊人久久| 国产又黄又硬又粗| 国产精品女熟高潮视频| 国产69精品久久| 97一区二区在线播放| 99精品国产自在现线观看| 欧美午夜在线视频| 国产免费羞羞视频| 久久精品娱乐亚洲领先| 国产小视频a在线观看| 人妻丰满熟妇AV无码区| 精品国产成人高清在线| 日韩人妻精品一区| 一级不卡毛片| 亚洲天堂成人在线观看| 无码在线激情片| 国产成人免费手机在线观看视频| 国产成人AV综合久久| 99精品热视频这里只有精品7| 91久久天天躁狠狠躁夜夜| 日韩资源站| 欧美成人精品一级在线观看| 国产精品久久久久无码网站| 国产jizzjizz视频| 国产精品亚洲一区二区三区z | 国产在线视频导航| 国产91色在线| jizz亚洲高清在线观看| 大香伊人久久| 国产成人1024精品| 国产另类乱子伦精品免费女| 97在线国产视频|