在java 企業應用領域,ejb的功能強大同ejb的配置復雜,難于學習一樣出名。但在以前我們又有什么辦法呢?只有硬著頭皮來學ejb。真有點“明知山有虎,偏向虎山行”的精神。現在形式有了樂觀的變化,java開源的持續走紅,使得開發java企業級應用不再局限于ejb領域。這里我主要介紹一下怎樣采用開源的 Spring,Hibernate以及Struts構建一個輕量級的架構。

          一、整體架構介紹
              在軟件工程領域,為了降低模塊耦合度,提高模塊的可重用性,分層一直是廣為采納的一個方法。其實分層還可以使開發人員專注于某一層進行開發,使得軟件開發的分工變細,提高生產效率(這一點上堪比福特發明的流水線生產汽車的做法,各個工人負責特定部件的生產,最后組裝)。
             
          一個企業級的java應用,通常分為以下幾層:UI層,業務邏輯層,數據持久層,域對象層。下面對這幾層分別作簡要介紹:
          1.     UI層:負責與用戶交互,包括:接受用戶的請求,把處理結果返回給用戶。這里我們采用struts來UI層,雖然比起Tapestry以及JSF這些事件驅動的表現層技術而言,Struts的設計顯得有些老土,但它目前仍是表現層事實上的標準,所以我們還是選用它。
          2.     業務邏輯層:主要負責具體的業務處理。通過Spring的IOC以及AOP實現各個功能的耦合相連
          3.     數據持久層:主要負責與底層的數據庫打交道。這里我們采用Spring封裝的Hibernate操作來簡化實際的編碼。主要的操作為CRUD(create ,read,update,delete)
          4.     域對象層:具體的實體類,如老師,學生等等這些具體的類(注意:需要與數據庫中的某一標對應)。
          以上只是簡單介紹了各個層的劃分以及各層所對應的開源框架,要詳細了解各層的具層信息,需要訪問 struts,hibernate,spring的官方網站。
          二、實例分析
          實例說明:一個網站登錄的例子,比較簡單,但能說明各層是如何協調工作的。
          工具:jdk1.5,eclipse3.2,myeclipse5.0GA,mysql5.0,tomcat5.5,至于這幾個工具到底該怎么裝這里我就不多說了,大家不清楚的可以到網上搜搜。下面是具體操作步驟:
          預備工作:用mysql創建一個test數據庫,再創建一個user表,再創建兩個字段username和password。腳本如下

          DROP DATABASE IF EXISTS `test`;
          CREATE DATABASE `test`
          USE `test`;

          CREATE TABLE `user` (
          `id` int(11) NOT NULL auto_increment,
          `username` varchar(30) NOT NULL default '',
          `password` varchar(30) default '',
          PRIMARY KEY (`id`)
          ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
          打開myeclipse的database explore透視圖




          右鍵單擊左側的空白區域 ,點擊 new 按鈕



          單擊“configure database driver”來配置數據庫的驅動,你必須有mysql的jdbc驅動 ,沒有的到mysql的官方網站上下載。



          測試數據庫配置是否成功。

          1.     新建一個myeclipse的web工程




          2.     引入Spring包
          右鍵工程名







          注意:這里為了省得以后再添加spring的相關包,所以一次性的選中了所有的包。選中
          Copy選項,它會把這些包拷貝到/WebRoot/WEB-INF/lib目錄下,方便以后的實際部署。

          3.添加hibernate包



          系統會檢測到該工程已經添加了Spring包,選擇使用Spring的配置文件



          點擊 next



          點擊 next



          點擊 next



          最后點擊Finish按鈕即可。
          4切換到database explore視圖,右鍵 點擊 user 表的“Hibrnate Reverse Engineering”



          彈出如下窗口



          點擊 “next”



          再單擊finish
              在包視圖中 可以看到 src下多了一個名為vo的package以及該包下的四個文件



          為了更加直觀地顯示分層,我另建了一個名為dao的package,并把UserDAO.java移到dao中



          同時注意在applicationContext.xml中把對UserDAO的引用部分也作相應修改。
          5.     建立業務邏輯層代碼
          新建一個名為service的包,再在里面建立一個Service類,代碼如下
          package service; import java.util.List; import vo.User; import dao.UserDAO; public class Service { private UserDAO userDao; public UserDAO getUserDao() { return userDao; } public void setUserDao(UserDAO userDao) { this.userDao = userDao; } public boolean isValid(User user) {//判斷用戶是否合法 List result = userDao.findByExample(user); if (result.size() > 0) return true; else return false; } }


          同時在applicationContext.xml中添加如下配置
          <bean id="service" class="service.Service" singleton="false">
                  <property name="userDao">
                        <ref bean="userDao" />
                  </property>
              </bean>


          6.配置UI層
            添加struts包,方法同添加spring一樣



          配置struts-config.xml文件,在空白區域右鍵單擊 new 一個 action ,actionForm ,jsp










          下一步
          對forward作設置,增加succeed轉到welcome.jsp,fail轉到login.jsp

          在WebRoot目錄下建立一個welcome.jsp文件,顯示用戶登錄成功后的歡迎信息。



          6. 把struts和spring連接起來
          6.1修改struts-config.xml注意紅色字體部分
          <action attribute="loginForm" input="/login.jsp" name="loginForm" path="/login" scope="request" type="org.springframework.web.struts.DelegatingActionProxy"> <forward name="fail" path="/login.jsp" /> <forward name="succeed" path="/welcome.jsp" /> </action>



              再在strut-config.xml中添加如下代碼

          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" /> </plug-in>> 6.2修改applicationContext,增加以下內容 <bean name="/login" class="web.action.LoginAction" singleton="false"> <property name="service"> <ref bean="service" /> </property> </bean>

          6.3修改LoginAction.java部分代碼,增加一個service變量,以及其 get/set方法(主要用于Spring IOC)。代碼如下:

          /* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package web.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import web.form.LoginForm; import service.Service; import vo.User; /** * MyEclipse Struts Creation date: 09-27-2006 * * XDoclet definition: * * @struts.action path="/login" name="loginForm" input="/login.jsp" * scope="request" validate="true" * @struts.action-forward name="fail" path="/login.jsp" * @struts.action-forward name="succeed" path="/welcome.jsp" */ public class LoginAction extends Action { /* * Generated Methods */ /** * Method execute * * @param mapping * @param form * @param request * @param response * @return ActionForward */ private Service service; public void setService(Service service) { this.service = service; } public Service getService() { return service; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method // stub User user = new User(); user.setPassword(loginForm.getPassword()); user.setUsername(loginForm.getUserName()); if (service.isValid(user)) return mapping.findForward("succeed"); else return mapping.findForward("fail"); } }

            至此一個簡單的登錄已經做成。剩下的工作就是打包并發布你的應用了。 

            Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1549145


          posted on 2008-05-26 14:32 caihaibo 閱讀(270) 評論(0)  編輯  收藏 所屬分類: 框架
          主站蜘蛛池模板: 广宁县| 交口县| 泽库县| 姚安县| 岑溪市| 新野县| 白玉县| 泸水县| 同江市| 罗山县| 吴川市| 保康县| 灵山县| 讷河市| 日喀则市| 察隅县| 五华县| 如皋市| 墨江| 道孚县| 隆德县| 永春县| 新乐市| 商洛市| 青川县| 漾濞| 诸城市| 兴义市| 东光县| 师宗县| 门源| 成安县| 喀喇沁旗| 盐山县| 承德市| 进贤县| 嘉禾县| 高密市| 西乌珠穆沁旗| 丰镇市| 新巴尔虎右旗|