亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Spring+Struts+Hibernate的迎評促建網

        2008-07-14 10:05:50楊公義
        電腦知識與技術 2008年18期

        摘要:開發(fā)迎評促建網是高校為迎接教育部本科教學評估需要面對的現實問題。首先,本文給出了迎評促建網的系統(tǒng)分析和模塊設計;其次,從總體上介紹基于Spring+Struts+hibernate的開發(fā)架構的原理和層次結構;其次,以用戶管理模塊為例介紹使用該開發(fā)架構的全部開發(fā)過程;其次,給出該開發(fā)架構的開發(fā)規(guī)范;最后,對該開發(fā)架構的核心配置文件的關鍵技術給予說明。

        關鍵詞:Spring;Struts;Hibernate;Web開發(fā)架構

        中圖分類號:TP393文獻標識碼:A 文章編號:1009-3044(2008)18-20000-00

        A Website for Welcoming Evaluation & Promoting Development Basing on Spring+Struts+Hibernate

        YANG Gong-yi

        (New Technology Research & Development Office, Modern Education Technology Center, Peking University, Peking, 100871, China)

        Abstract:Developing a website for welcoming evaluation & promoting development is currently a practical problem for universities. Firstly, the paper introduces the system analyze & pattern design for the website. Secondly, the paper introduces the frameworks principle and structure. Thirdly, the paper introduces the total developing process basing on the user management module. Fourthly, the paper introduces the developing criterion using the framework. Finally, the paper explains the key config files key technology.

        Key words:Spring; Struts; Hibernate; Web Developing Framework

        1 引言

        迎評促建網在高校迎新教育部本科教學評估的過程中,起了重要的作用。一個優(yōu)秀的技術架構能夠規(guī)范開發(fā)者的行為,保證web系統(tǒng)開發(fā)的安全性、穩(wěn)定性和成功率。目前Open Source社區(qū)的Spring項目、Struts項目、Hibernate項目以及其他開源項目提供了優(yōu)秀的第三方開發(fā)工具包,筆者將這些開發(fā)工具包整合在一起形成一個優(yōu)秀的web開發(fā)架構。筆者開發(fā)的迎評促建網就是基于Spring+Struts+Hibernate(以下簡稱SSH)的web開發(fā)架構。

        2 迎評促建網系統(tǒng)分析與模塊設計

        2.1 迎評促建網系統(tǒng)分析

        迎評促建網是為了迎接教育部本科教學評估工作而建設的集信息發(fā)布、成果展示、審核、管理、用戶瀏覽、文件下載、特定資源授權訪問等功能于一體的專業(yè)網站。要求信息的編輯支持html在線編輯器功能,能夠網上實現類似word的排版、編輯功能、支持圖文匯排、支持多媒體資源的上傳和編輯。要求信息的上傳要經過審核后才能正式發(fā)布。

        2.2 迎評促建網模塊設計

        對迎評促建網的系統(tǒng)分析,可以得出該系統(tǒng)由兩大模塊組成:用戶管理模塊和信息管理模塊。用戶管理模塊的作用主要是用戶信息的增、刪、改、查、用戶類別的管理。通過用戶類別管理實現給不同類別的用戶賦予不同權限。信息管理模塊的作用是信息的增、刪、改、查、信息類別的管理。通過信息類別管理實現讓不同類別的信息屬于不同的欄目。北大的迎評促建網的欄目信息類別分為:評建機構、評建文件、評建動態(tài)、評建簡報、評建知識、教學成果、院系特色、教學改革、教師楷模、燕園學子、北大課堂、社會實踐、友情鏈接。

        完成迎評促建網系統(tǒng)分析與模塊設計之后,接下來將以用戶管理模塊為例介紹基于SSH的輕量級J2EE技術架構,模塊名稱為Demo。因篇幅所限本文不再給出信息管理模塊的詳細細節(jié)。

        3 SSH架構介紹

        3.1 概述

        在SSH架構中,系統(tǒng)結構大致分為三層,即數據持久層、事務邏輯層和WEB表現層。(1)數據持久層主要負責業(yè)務數據的持久化存儲服務,目前我們采用Hibernate O/R Mapping技術實現;(2)事務邏輯層主要負責業(yè)務對象的轉換傳遞、業(yè)務邏輯的組織及事務的控制等服務,同時事務邏輯層也是WEB表現層和數據持久層銜接的橋梁,WEB表現層通過事務邏輯層向持久層請求數據持久服務,目前這一層我們采用Spring Framework實現業(yè)務beans的依賴關系管理和運行時注入以及事務的控制等功能;(3)WEB表現層是所有業(yè)務邏輯的最終展現層,充當事務邏輯層的客戶端,實現人機交互,目前這一層我們采用Struts技術來實現。

        整個架構的系統(tǒng)結構,如圖1所示。系統(tǒng)各層的調用關系,如圖2所示。

        圖1 系統(tǒng)結構

        圖2系統(tǒng)各層的調用關系

        在本系統(tǒng)中,用到的工具類開源項目有:Apache commons-BeanUtil; Apache commons-Lang; Apache commons-Logging; Apache commons-FileUpload;Dom4j;Log4j。用到的框架類開源項目有:Hibernate;Spring Framework;Struts;Junit。關于這些項目的技術細節(jié),不在本文的介紹范圍之內。

        3.2包層次結構

        包層次結構,如圖3所示。

        圖3 包層次結構

        edu.pku.framework.common包:該包是架構提供的一些全局通用程序,例如字符集設定Filter、一些預加載的Listener以及一些全局異常等。edu.pku.framework.util包:該包是架構提供的一些和業(yè)務無關的工具類,例如xml的處理、文件加密、類型轉換等。edu.pku.framework包:該包是架構的基礎組件,存放的是數據持久管理器(PersistenceManager)和Action的基礎抽象類(BaseAction),數據持久管理器是一個數據訪問接口,目前提供了一個針對Hibernate的實現,可以實現基本的單表CRUD操作,同時對服務器端的數據分頁訪問提供了支持;BaseAction對Struts 的DispatchAction進行了擴展,對Web層的數據分頁顯示提供了支持。edu.pku.demo包:該包下存放的是用戶管理模塊的工程。

        4開發(fā)過程

        基于SSH的總體開發(fā)流程,如圖4所示。 下面我們就逐步來實現用戶管理模塊(Demo)。數據表結構,如表1所示。以下我介紹的開發(fā)過程是按照從后臺服務開發(fā)到頁面展現的順序來進行的,在實際的項目開發(fā)過程中,某些開發(fā)環(huán)節(jié)的順序可以按照需要進行調整。

        圖4 基于SSH的總體開發(fā)流程

        表1 Demo的數據表結構

        4.1 準備工作環(huán)境

        首先,先確認自己本地的JDK是否安裝完畢,本架構要求的JDK版本為1.4以上。我們把我們的工程命名為Demo,如果我們本地的工作目錄是E:workspace,首先在工作目錄下,新建一個名為demo的文件夾作為我們工程的工作目錄。

        接著,在demo下準備我們的如下目錄結構src/edu/pku/demo/entity;src/edu/pku/demo/

        service/;src/edu/pku/demo/service/impl;src/edu/pku/demo/web/action;src/edu/pku/demo/web/model;src/edu/pku/demo/test/service;src/edu/pku/demo/test/web。

        再次,準備web工程的目錄結構:demo/jsp;demo/images;demo/css;demo/logs;demo/js;demo/WEB-INF。接著我們把架構中提供的公共css文件、圖片、js文件、架構依賴的第三方jar復制到剛剛建立的相應工作目錄中,到此為止,我們的工作環(huán)境已經準備就緒,下面就可以進行具體的開發(fā)了。我這里的介紹不依賴于任何IDE環(huán)境,所以調試、編譯、打包的過程我就不具體進行介紹了,在開發(fā)過程中,可以選擇任何自己熟悉的IDE工具進行開發(fā),通常采用ant作為build工具。

        4.2 生成Hibernate的PO和.hbm.xml

        這一步我們可以用工具生成,這里我給出一些工具供參考:tanghan plugin for eclipse;middlegen+hbm2java;MyEclipse;Xdoclet這些工具具體的用法不在本文介紹范圍之內,在這一步我們生成的文件是:User.java和User.hbm.xml 這兩個文件位于src/edu/pku/demo/

        entity下。某些工具可能處理不了BLOB類型的字段,如果實體中存在這樣的屬性,在文件生成后,需要手工稍作修改。有些開發(fā)人員可能喜歡先寫.hbm.xml,然后通過Schema Export來生成數據庫DDL,這可根據開發(fā)人員的習慣恰當調整。

        4.3 分析業(yè)務邏輯,編寫UserService接口

        在這一步的工作中,我們的工作成果是生成UserService.java接口文件,放在edu.pku.demo.service下,在接口中,聲明了以下幾個業(yè)務方法:

        public interface UserService {

        public void save(User user) throws ServiceException; //保存用戶信息

        因篇幅所限,這里省略其他的接口方法,包括:remove(long userid) //刪除單個用戶, remove(Long[] userid) //刪除多個用戶, load(long userid) //獲取單個用戶數據, uploadPhoto(long userid,InputStream is) //上傳用戶照片, byte[] getPhoto(long userid) //獲取用戶照片數據, getUserList()//獲取全部用戶列表, getUserList(String sKeyWord) //按照關鍵字查找用戶, getUserList(String sKeyWord,int iPageNo,int iPageSize) //按照關鍵字返回用戶列表,并分頁。}

        4.4 編寫UserService接口的實現類

        到此我們就該編寫UserService接口的實現類了,在這個實現類中,主要完成以下功能:(1)組織業(yè)務邏輯;(2)調用FrameWork中的PersistenceManager接口進行數據存儲訪問。在實際開發(fā)過程中,大部分的業(yè)務邏輯將在此實現,也是本架構中代碼量比較集中的地方。這一步的工作成果是生成了UserServiceImpl.java文件,該文件位于edu.pku.demo.service.impl下。到此為止,后端服務部分的開發(fā)工作已經全部完成。

        4.5 在Spring的applicationContext-*.xml中進行相關注冊

        完成了后臺服務的編寫后,我們就可以在Spring中對這些組件進行注冊了。在這一步中,我們要完成以下工作:(1)注冊Hibernate的.hbm.xml Mapping文件(2)注冊PersistenceManager接口和實現類(3)注冊UserService接口和實現類(4)組件的依賴關系注入(5)配置聲明式事務。目前架構中有3個spring的配置文件,分別是:(1)/WEB-INF/config/applicationContext-resource.xml,(2)/WEB-INF/config/applicationConte

        xt-service-demo.xml,(3)/WEB-INF/config/applicationContext-dao.xml。其中,一些基礎公共資源配置在/WEB-INF/config/applicationContext-resource.xml中,例如,dataSource,sessionFactory等;service層的組件配置在/WEB-INF/config/applicationContext-service-demo.xml中,這里放demo模塊的service和action;數據持久層的組件配置在/WEB-INF/config/applicationContext-dao.xml中,這里放PersistenceManager。

        4.6 界面原型設計

        這一步可以作為需求分析階段的一個工作成果,在這一步里我們生成了以下的系統(tǒng)界面原型,如圖5、圖6、圖7所示。

        圖5 用戶列表、查詢和刪除

        圖6 編輯用戶

        圖7新增用戶

        4.7 分析對象展現模型,編寫VO

        根據前面的分析,我們確定了用戶VO對象有以下幾個屬性:

        protected String userid; //用戶ID;

        protected String username;//用戶名稱;因篇幅所限,這里省略了其他的屬性:包括password(密碼), email(用戶email),hasphoto(是否上傳照片)。有了這些屬性,就可以直接在IDE工具中生成getter和setter方法,我們這里的VO是一個純粹的POJO,不需要從任何類繼承,只需實現Serializable接口即可,這個VO對象的用途主要是作為web端的頁面展現模型。在這一步我們的工作成果是生成了UserModel.java文件,該文件位于edu.pku.demo.web.mode下。

        4.8Struts的Action類編寫

        在我們這個模塊中,只有一個Action類,即UserAction.java文件,struts可以幫助我們優(yōu)雅的實現command模式,透明的完成和頁面表單的交互,此Action需要擴展framework中的BaseAction基礎類,這個基礎類擴展了struts的DispatchAction基類,實現了默認的execute方法,對客戶端的數據分頁顯示也提供了必要的支持。在這一步我們的工作成果是生成了UserAction.java,該文件位于edu.pku.demo.web.action下。

        4.9配置struts-config.xml

        struts的請求轉發(fā)機制是通過ServletDispatcher進行的,需要在struts的核心配置文件struts-config.xml進行相應的配置。為滿足團隊開發(fā)的需要,我們把配置文件分割成多個。在WEB-INF/CONFIG下能看到struts-config-common.xml和struts-config-demo.xml。在struts-config-demo.xml中可以看到:

        <!--用戶form的配置如下:-->

        <form-bean name="userForm"

        type="org.apache.struts.validator.DynaValidatorForm">

        <form-property name="id" type="java.lang.String" />因篇幅所限,這里省略了一些form-bean的屬性,包括userid, username, password, email

        </form-bean>

        <!--用戶action的配置如下:-->

        <action name="userForm" parameter="dispatch"

        path="/userAction" scope="request" type="org.springframework.web.struts.DelegatingActionProxy"

        validate="false">

        <forward name="redirectList"

        path="userAction.do?dispatch=getList" redirect="true"/>

        這里省略了一些forward,包括editObjectSuccess, getListSuccess

        </action>

        這樣,在瀏覽器中就可以通過userAction.do?dispatch=getList進行訪問了,ServletDispatcher 接收到請求后,會根據配置文件轉發(fā)到edu.pku.demo.web.action.UserAction的getList方法進行處理,處理結束后,返回到/jsp/userlist.jsp進行數據顯示。Struts的view支持多種顯示方式,例如jsp、xslt、velocity、freemarker等,在該架構中,我們采用jsp進行數據顯示,其中在jsp中也包括兩種轉發(fā)機制,即dispatch和redirect,默認采用的是dispatch,這兩種方式的區(qū)別同servlet的forward和sendRedirect。

        4.10 單元測試代碼的編寫

        單元測試代碼的編寫是穿插在整個代碼編寫過程中的,例如在這個demo中,我們可以針對UserServiceImpl.java, UserAction.java分別編寫單元測試代碼,單元測試代碼的編寫時機也是在實現代碼編寫完畢后緊接著進行的,并不是所有的代碼編寫完畢后才去寫測試代碼。單元測試我們可以基于junit進行編寫,基于junit編寫單元測試,需要注意以下幾點:(1)測試類需要擴展junit的TestCase基類;(2)所有的測試方法以test開頭;(3)資源的初試化寫在setUp方法中;(4)資源的銷毀寫在tearDown方法中。

        5 架構要求的開發(fā)規(guī)范

        本架構要求:(1)代碼中不允許出現System.out.println等字樣,需要打印調試信息一定要通過common-logging接口進行;(2)Web層的代碼不允許直接訪問PersistenceManager接口進行數據持久化操作,所有需要對數據進行持久化操作的行為必須通過Service來代理;(3)原則上,不允許在jsp中直接對文字信息進行硬編碼,所有的文字資源信息要放在properties資源文件中,如果項目對國際化要求程度不高,這一點可以不做硬性限制;(4)不允許直接將Hibernate的PO對象直接返回給JSP頁面,PO和VO的轉換通過FrameWork中的BeanUtil.copy方法在Action中進行。

        6 架構中的配置文件說明

        6.1 /WEB-INF/config/applicationContext-*.xml

        在本架構中存在以下3個和spring相關的applicationContext配置文件,分別是:(1)/WEB-INF/config/applicationContext-resource.xml;(2)/WEB-INF/config/applicationContext-service-demo.xml;(3)/WEB-INF/config/applicationContext-dao.xml這三個配置文件的分工有所不同,其中applicationContext-resource.xml主要負責一些基礎公共資源的配置,例如dataSource,transactionManager, sessionFactory等;applicationContext-service-demo.xml主要負責demo模塊的service層組件和action層組件的配置;applicationContext-dao.xml主要負責持久層組件的配置和裝配,目前只有一個PersistenceManager接口。

        其中applicationContext-resource.xml中關于事務控制的配置文件片段如下:

        <bean id="transactionManager" <!--事務管理器-->

        class="org.springframework.orm.hibernate.HibernateTransactionManager">

        <property name="sessionFactory">

        <ref local="sessionFactory"/>

        </property>

        </bean>

        <bean id="baseTxProxy" lazy-init="true" abstract="true" <!--事務管理器傳播屬性-->

        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

        <property name="transactionManager"><ref bean="transactionManager"/></property>

        <property name="transactionAttributes">

        <props>

        <prop key="save*">PROPAGATION_REQUIRED</prop>

        <prop key="remove*">PROPAGATION_REQUIRED</prop>

        <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>

        <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>

        </props>

        </property>

        </bean>

        6.2 /WEB-INF/config/ jdbc.properties

        數據庫連接配置文件,Oracle 10g的配置文件示例:

        hibernate.dialect=net.sf.hibernate.dialect.Oracle9Dialect

        因篇幅所限,這里省略了一些屬性,包括driverClassName, url,username,password,

        maxActive,maxIdle,maxWait,fetch_size,batch_size,show_sql,hibernate.cglib.use_reflection_optimizer

        6.3 /WEB-INF/web.xml

        J2EE Servlet Spec的標準配置文件,其中本架構中要求的配置片段如下:

        因篇幅所限,這里省略<!DOCTYPE 屬性

        <web-app>

        <filter><!—配置中文編輯過濾器-->

        <filter-name>EncodingFilter</filter-name><filter-class>edu.pku.framework.common.EncodingFilter</filter-class>

        因篇幅所限,這里省略ignore, encoding的參數配置

        </filter>

        <filter-mapping>

        <filter-name>EncodingFilter</filter-name>

        <servlet-name>action</servlet-name>

        </filter-mapping>

        <servlet><!—配置struts的servlet-->

        <servlet-name>action</servlet-name>

        <servlet-class>org.apache.struts.action.ActionServlet

        </servlet-class>

        <init-param><!—-配置struts的幾個配置文件-->

        <param-name>config</param-name> <param-value>/WEB-INF/config/struts-config-edumon.xml,/WEB-INF/config/struts-config-demo.xml</param-value>

        </init-param>

        篇幅所限,這里省略debug<init-param>參數配置, 省略<load-on-startup>的屬性設置

        </servlet>

        <servlet-mapping>

        <servlet-name>action</servlet-name>

        <url-pattern>*.do</url-pattern>

        </servlet-mapping>

        <error-page><!—配置出錯跳轉頁面-->

        <error-code>500</error-code>

        <location>/jsp/edumon/error.jsp</location>

        </error-page>篇幅所限,這里省略403,404錯誤頁面</error-page>

        <error-page>

        <taglib>

        <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>

        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

        </taglib>

        <taglib>篇幅所限,這里省略struts-html.tld, struts-logic.tld, struts-template.tld, struts-tiles.tld, struts-nested.tld

        </taglib>

        </web-app>

        6.4 /WEB-INF/classes/ApplicationResources_zh.properties

        該文件的配置片斷如下:

        ui.lable.username=用戶名稱

        ui.lable.password=用戶密碼。因篇幅所限,這里省略其他的資源項目。struts的i18n資源配置文件,如果其中包含有中文字符,則需要用以下命令進行轉碼:native2ascii -encoding GBK ApplicationResources_zh.properties ApplicationResources_zh_CN.properties。

        6.5 /WEB-INF/classes/log4j.properties

        Log4j的配置文件,配置片段如下:

        log4j.rootCategory=INFO, stdout, logfile

        log4j.appender.stdout=org.apache.log4j.ConsoleAppender因篇幅所限,這里省略其他的屬性設置:包括log4j.appender.stdout.layout; log4j.appender.stdout.layout.ConversionPattern; log4j.appender.logfile; log4j.appender.logfile.MaxFileSize; log4j.appender.logfile.MaxBackupIndex; log4j.appender.logfile.layout; log4j.appender.logfile.layout.ConversionPattern。

        6.6 /WEB-INF/classes/struts-config-common.xml

        struts的核心配置文件,該文件是struts請求轉發(fā)的基礎,同時,在本架構中struts和Spring的集成也需要在該文件中做些必要的設置,文件片段如下:

        因篇幅所限,這里省略<?xml屬性和<!DOCTYPE屬性

        <struts-config>

        <form-beans>

        </form-beans>

        <global-exceptions>

        <exception type="java.lang.Exception" key="action.errors.exception" path="/jsp/edumon/error.jsp"/>

        因篇幅所限,這里省略其他類型的exception配置

        </global-exceptions>

        <global-forwards>

        <forward name="error" path="/jsp/edumon/error.jsp" />

        </global-forwards>

        <message-resources null="false" parameter="ApplicationResources" />

        <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

        <set-property property="contextConfigLocation"

        value="/WEB-INF/config/applicationContext-*.xml" />

        </plug-in>

        </struts-config>

        7 結論

        基于SSH的開發(fā)的迎評建網,充分體現了Structs的MVC設計模式,Spring的依賴注入和面向方面編程的思想,Hibernate數據持久化的中間件技術。

        參考文獻:

        [1] Spring - Java/J2EE Application Framework.http://static.springframework.org/spring/

        docs/1.1.5/reference/index.html. 2008-03-03.

        [2] The Apache Struts Web Application Framework. http://struts.apache.org/1.2.4/index.html .2008-03-03.

        [3] hibernate_org - Documentation Overview. http://www.hibernate.org/5.html. 2008-03-03.

        [4] 楊公義.大學生創(chuàng)新能力培養(yǎng)的網絡平臺設計與開發(fā)[J].遠程教育雜志,2008,(01):59-62.

        收稿日期:2008-04-17

        作者簡介:楊公義,男,工程師,北京大學現代教育技術中心新技術研究開發(fā)室。

        精品蜜桃av一区二区三区| 久久久国产一区二区三区四区小说| 国产91中文| 国产精品性一区二区三区| 阴唇两边有点白是怎么回事 | 亚洲av永久久无久之码精| 久久本道久久综合伊人| 久久99热狠狠色精品一区| 国产偷窥熟女精品视频| 操B小视频国产| 亚洲av熟女中文字幕| 久久天堂综合亚洲伊人hd妓女| 这里有精品可以观看| 国产一区二区三区杨幂| 在线国人免费视频播放| 国产 麻豆 日韩 欧美 久久| 久久精品无码鲁网中文电影| 在线观看国产精品自拍| 国产桃色一区二区三区| 亚洲裸男gv网站| 成人动漫久久| 国产成人自拍视频视频| 国产精品亚洲精品日韩已方| 丰满少妇高潮惨叫正在播放| 就国产av一区二区三区天堂| av在线一区二区精品| 99久久免费只有精品国产| 精品国产a∨无码一区二区三区 | 日韩视频第二页| 精品国产乱码久久免费看| 亚洲一区二区在线观看网址 | 久久伊人中文字幕有码久久国产| 97精品一区二区三区| 熟女人妇交换俱乐部| 狠狠狠狠狠综合视频| 粉嫩人妻91精品视色在线看| 亚洲精品国偷拍自产在线观看| 99久久久久国产| 日本人妻三级在线观看| 成人免费无码大片a毛片抽搐色欲| 在线观看av永久免费|