【編程思想】- 解耦

解耦-從MVC和三層架構說到ssh,ssm整合開發

 

  相信很多人都認同JavaWeb開發是遵從MVC開發模式的,遵從三層架構進行開發的,是的,大家都這麼認同。但是相信大家都會有過這樣一個疑問,if(MVC三層模式==三層架構思想)out.println(“請繼續觀看……”)

 

 1.MVC(Model-View-Controller)設計模式:

  首先讓我們瞭解下MVC(Model-View-Controller)的概念:

  MVC全名是Model-View-Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。

  1、Model(模型):數據模型,提供要展示的數據,因此包含數據和行爲,主要提供了模型數據查詢和模型數據的狀態更新等功能,包括數據和業務。主要使用的技術:數據模型:實體類(JavaBean),數據訪問:JDBC,Hibernate等,

  2、View(視圖):負責進行模型的展示,一般就是我們見到的用戶界面,比如JSP,Html等

  3、Controller(控制器):接收用戶請求,委託給模型進行處理(狀態改變),處理完畢後把返回的模型數據返回給視圖,由視圖負責展示。主要使用的技術:servlet,Struts中的Action(StrutsPrepareAndExecuteFilter )類,SpringMVC的Controller (DispatcherServlet分發) 類等。

  MVC是一個框架模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。最典型的MVC就是JSP + servlet + javabean的模式。

 2.三層架構(UI-BLL-DAL)思想介紹:

  三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分爲:表現層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)。區分層次的目的即爲了“高內聚低耦合”的思想。在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟推薦的分層式結構一般分爲三層,從下至上分別爲:數據訪問層、業務邏輯層(又或稱爲領域層)、表示層

  1、表現層(UI):通俗講就是展現給用戶的界面,用於顯示數據和接收用戶輸入的數據,爲用戶提供一種交互式操作的界面。

  2、業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。對於數據訪問層而言,它是調用者;對於表示層而言,它卻是被調用者。也將業務邏輯層稱爲領域層。

  3、數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增、刪、改、查。如果要加入ORM的元素,那麼就會包括對象和數據表之間的mapping,以及對象實體的持久化。也稱爲是持久層。數據訪問層中包含實體層(Model 實體層)

  JavaWeb中典型的三層架構是:Jsp+Struts/Spring+Hibernate/Mybaits的開發模式

 3.MVC和三層架構的區別與轉化:

  MVC與三層架構的概念區別:

  MVC是一種設計模式,我們可以用它來創建在域對象和UI表示層對象之間的區分。它是根據項目的具體需求來決定是否適用於該項目。

  三層架構是一個分層式的軟件體系架構設計,它可適用於任何一個項目。

  三層架構和MVC設計模式側重點不一樣,三層是一種籠統的架構思想,沒有限制具體的設計;而MVC就比較具體的說明它的設計方法。我們從接手一個項目開始,首先,我們需要進行架構設計,一般我們採用的就是分層式的架構設計,即我們的三層架構。然後,在確定了架構以後,我們再根據項目的具體需求去考慮是否需要應用一些設計模式,比如是否應用我們的MVC模式,抽象工廠模式等等。

  三層側重的是整體的一個解耦,而MVC側重的是web系統的解耦,即側重jsp和Servlet的一個解耦。

  MVC與三層架構的劃分層次區別

  三層架構將整個項目劃分爲:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。

 

  MVC :即Model(模型),View(視圖),Controller(控制)。

  下圖可以說明他們的區別與聯繫:通過圖中可以看到不是一 一對應的關係:V是UI,C是BLL,M是DAL的觀點是錯誤的。

  兩者間的轉化:

     在我們項目中選擇了三層架構的基礎上在根據具體需求決定是否需要使用MVC,於是我們常說的MVC中總是伴隨着三層架構,也就造成了兩者的容易混淆。其實,通過上圖我們可以看到MVC將三成架構中的UI分成了控制層和試圖層。將三層架構中的數據訪問層和業務邏輯層整合成了模型層。

 4. 針對三層架構的MVC模式開發講解SSH框架:

  4.1 ssh介紹:

  SSH多個框架(struts2+spring+hibernate)的集成,是目前較流行的一種企業及Web應用程序開源集成框架。

  Struts2:

     Struts2是流行和成熟的基於MVC設計模式的Web應用程序框架。 Struts2不只是Struts1下一個版本,它是一個完全重寫的Struts架構。Struts對Model,View和Controller都提供了對應的組件。但是在ssh開發過程中主要用Struts作爲三層架構中的表現層,也就是MVC中的View和Control層。

  Struts2提供了表單提交參數封裝成POJO類,提交參數的類型轉換,輸入校驗,文件的上傳下載,程序的國際化,Struts2標籤,以及對AJAX的支持。

  Hibernate:

     Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,說的簡單點:就是功能更加強大的JDBC。

     Hibernate實現了對象到數據庫端的封裝。就是常說的ORM(Object Relation Mapping),它的出現使得編程更加的面向對象,在傳統的編程上,我們要將對象存儲到關係數據庫中,需要寫很多代碼來實現,而且需要考慮跨數據庫的平臺的問題。有了Hibernate可以方便的實現從對象轉換到關係數據庫。這就是對象持久化。

  Spring:

     主要包含兩個重要功能:IOC和AOP,也就是常說的依賴注入和麪向切面編程。當然還有Spring的事務功能,不過這一功能是在結合前面兩者的功能實現的。

     IOC:依賴注入(控制反轉),是一種設計模式。一層含義是控制權的轉移:由傳統的在程序中控制依賴轉移到由容器來控制;第二層是依賴注入:將相互依賴的對象分離,在spring配置文件中描述他們的依賴關係。他們的依賴關係只在使用的時候才建立。簡單來說就是不需要NEW一個對象了。

     AOP這是一種面向切面的編程思想,這種思想使得編程思想上得到了歷史性的進步。它將程序的執行過程切割成不同的面,在面之間可以插入我們想執行的邏輯。

  4.2 ssh的層次劃分:

  一進行javaWeb開發很多時候我們按照這樣的層次進行劃分:

  1、在表示層中,首先通過JSP頁面實現交互界面,負責傳送請求(Request)和接收響應(Response),然後Struts根據配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應的Action處理,然後action進行對請求處理並轉發給JSP頁面。

  2、在業務邏輯層中,管理服務組件的Spring IoC容器負責向Struts2提供具體的Action對象,提供業務模型(Model)組件和該組件的協作對象數據處理(DAO)組件完成業務邏輯,並提供事務處理、緩衝池等容器組件以提升系統性能和保證數據的完整性。

  3、在數據訪問層中,則依賴於Hibernate的對象化映射和數據庫交互,處理DAO組件請求的數據,並返回處理結果,給業務邏輯層。

  按照MVC模式時:Jsp對應着表現層,struts2對應控制層,Spring和Hibernate對應模型層。

  分層不是絕對的,每個人的見解是不一樣的,僅供參考;

  從MVC說道ssh整合開發上就介紹到這裏,下部分主要是對ssh框架的整合,會介紹怎麼使用ssh取開發一個簡單的web應用。

============================================華麗分割線=====================================

 

 

從MVC和三層架構說到ssh整合開發(下)

 

  這章主要講整合開發,直接從實戰講起

  詳細請看源代碼註釋:

  全部代碼下載(csdn):鏈接

  Github鏈接:鏈接https://github.com/wpeace1212/javaBlog/tree/master/sshDemo

 1.整合流程

  針對一個簡單項目,讓大家對三層機構和MVC有一個簡單的認識,以及怎樣整合ssh框架;

  1.整合的項目介紹:

  (1) 企業人事管理系統!要求對員工信息進行維護。

  (2) 後臺系統先登陸,才能操作員工: 添加/修改/刪除

  (3) 沒有登陸,只能查看列表,不能操作!

  2.功能分類:

  (1) 管理員模塊:對應AdminAction中實現

  登陸/註冊

  (2) 員工模塊:對應EmployeeAction中實現

  添加一個員工, 指定添加的部門

  對指定的員工信息修改

  刪除選擇員工

  列表展示

  3.需要的技術:

  (1) Struts2:對是否登陸的攔截,對各個功能請求的分別處理,模型驅動。

  (2) Hibernate4:建立多對一關係的數據庫,以及實現增刪改查

  表t_admin:存放管理員信息

  表t_dept:存放部門信息,要用到one-to-many關聯員工表

  表t_employee:存放員工信息,要用到many-to-one關聯部門表

  (3) Spring:實現bean對象的創建管理,整合,事務管理

  (4) 大體按照下面的流程進行介紹:設計數據庫直接在實體存中實現

  - Jar包引入

  - entity層映射

  - Spring配置

  - hibernate配置

  - Dao層

  - Service層

  - web.xml配置

  - struts.xml配置

  - Action層

  - jsp層

  三層架構:其中2,4,5步是數據訪問層,3,6步是業務邏輯層,7,9,10步表現層

  MVC:其中2,3,4,5,6步是模型層,7,9,步是控制層,10步是視圖層

  (5) 工程簡圖:

00

 2.Jar包下載

  第一步當然是建立web項目、引入jar文件、準備環境了,建立就不介紹了,只介紹最小包的引入:

  我的最小包下載地址(ssh最小包):http://download.csdn.net/detail/peace1213/9412092

  1.Struts 2.3.16.1

  下載地址:http://struts.apache.org/download

  Struts中需要引入的包:struts-2.3.16.1/apps/struts2-blank/WEB-INF/lib:該lib下面的包都可以引入;

01

  2.spring-framework-4.2.3.RELEASE-dist.zip

  下載地址:http://repo.springsource.org/libs-release-local/org/springframework/spring/

  需要引入的包:

03

  3.Hibernate 4.1.6

  下載地址:http://sourceforge.net/projects/hibernate/files/hibernate4

  需要引入的包:

02

  4.Aopalliance 1.0

  該包在struts的lib中有

  下載地址:http://sourceforge.net/projects/aopalliance

<code class="hljs avrasm has-numbering">aopalliance<span class="hljs-preprocessor">.jar</span></code>

  5.Aspectj 1.7.0

  下載地址:http://www.eclipse.org/aspectj/downloads.php

<code class="hljs avrasm has-numbering">aspectjrt<span class="hljs-preprocessor">.jar</span>  

aspectjweaver<span class="hljs-preprocessor">.jar</span></code>

  6.Cglib 2.2.3

  下載地址:http://sourceforge.net/projects/cglib/files

<code class="hljs avrasm has-numbering">cglib-<span class="hljs-number">2.2</span><span class="hljs-number">.3</span><span class="hljs-preprocessor">.jar</span></code>

  7.Asm 3.3

  該包在struts的lib中有

  下載地址:http://forge.ow2.org/projects/asm

<code class="hljs d has-numbering"><span class="hljs-keyword">asm</span>-<span class="hljs-number">3.3</span>.jar
</code>

  8.Log4j 1.2.17

  該包在struts的lib中有

  下載地址:http://logging.apache.org/log4j/1.2/download.html

<code class="hljs avrasm has-numbering">log4j-<span class="hljs-number">1.2</span><span class="hljs-number">.17</span><span class="hljs-preprocessor">.jar</span></code>

  9.mysql-connector-java-5.1.37-bin.jar

  下載地址:http://dev.mysql.com/downloads/connector/j

<code class="hljs lasso has-numbering">mysql<span class="hljs-attribute">-connector</span><span class="hljs-attribute">-java</span><span class="hljs-subst">-</span><span class="hljs-number">5.1</span><span class="hljs-number">.37</span><span class="hljs-attribute">-bin</span><span class="hljs-built_in">.</span>jar</code>

  10.Commons Logging 1.1.1

  該包在struts的lib中有

  下載地址:http://commons.apache.org/logging

<code class="hljs avrasm has-numbering">commons-logging-<span class="hljs-number">1.1</span><span class="hljs-number">.1</span><span class="hljs-preprocessor">.jar</span>
</code>

  其他需要引入的jar:

04

 3.entity層映射

  1.需要建立三個實體類:Admin.java,Dept.java,Employee.java,如下:

<code class="hljs cs has-numbering">此處都省略<span class="hljs-keyword">get</span>和<span class="hljs-keyword">set</span>方法:

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Admin {

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> id;

    <span class="hljs-keyword">private</span> String adminName;

    <span class="hljs-keyword">private</span> String pwd;

......

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Dept {

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> id;

    <span class="hljs-keyword">private</span> String name;

    <span class="hljs-keyword">private</span> Set<Employee> emps=<span class="hljs-keyword">new</span> LinkedHashSet<>();

......



<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Employee {

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> id;

    <span class="hljs-keyword">private</span> String empName;

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">double</span> salary;

    <span class="hljs-keyword">private</span> Dept dept;

......</code>

  2.建立對應的映射文件:×.hbm.xml

<code class="hljs applescript has-numbering"><span class="hljs-number">  1.</span>Admin.hbm.xml:

<<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"Admin"</span> table=<span class="hljs-string">"t_admin"</span>>

        <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"id"</span>>

            <generator <span class="hljs-type">class</span>=<span class="hljs-string">"native"</span>></generator>

        </<span class="hljs-property">id</span>>

        <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"adminName"</span> <span class="hljs-property">length</span>=<span class="hljs-string">"20"</span>></<span class="hljs-keyword">property</span>>

        <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"pwd"</span> <span class="hljs-property">length</span>=<span class="hljs-string">"20"</span>></<span class="hljs-keyword">property</span>>

    </<span class="hljs-type">class</span>>

<span class="hljs-number">  2.</span>Dept.hbm.xml:

   <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"Dept"</span> table=<span class="hljs-string">"t_dept"</span>>

       <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"id"</span> >

          <generator <span class="hljs-type">class</span>=<span class="hljs-string">"native"</span>></generator>

       </<span class="hljs-property">id</span>>

       <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"name"</span> column=<span class="hljs-string">"Dname"</span>></<span class="hljs-keyword">property</span>>

       <<span class="hljs-keyword">set</span> <span class="hljs-property">name</span>=<span class="hljs-string">"emps"</span> cascade=<span class="hljs-string">"save-update,delete"</span> table=<span class="hljs-string">"t_employee"</span> >

           <key column=<span class="hljs-string">"dept_id"</span>></key>

           <one-<span class="hljs-keyword">to</span>-many <span class="hljs-type">class</span>=<span class="hljs-string">"Employee"</span>></one-<span class="hljs-keyword">to</span>-many>

       </<span class="hljs-keyword">set</span>>

<span class="hljs-number">  3.</span>Employee.hbm.xml:

 <<span class="hljs-type">class</span> <span class="hljs-property">name</span>=<span class="hljs-string">"Employee"</span> table=<span class="hljs-string">"t_employee"</span>>

       <<span class="hljs-property">id</span> <span class="hljs-property">name</span>=<span class="hljs-string">"id"</span>>

        <generator <span class="hljs-type">class</span>=<span class="hljs-string">"native"</span>></generator>

       </<span class="hljs-property">id</span>>

      <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"empName"</span>  <span class="hljs-property">length</span>=<span class="hljs-string">"20"</span>></<span class="hljs-keyword">property</span>>

        <<span class="hljs-keyword">property</span> <span class="hljs-property">name</span>=<span class="hljs-string">"salary"</span> type=<span class="hljs-string">"double"</span>></<span class="hljs-keyword">property</span>> 

        <many-<span class="hljs-keyword">to</span>-one <span class="hljs-property">name</span>=<span class="hljs-string">"dept"</span> column=<span class="hljs-string">"dept_id"</span> <span class="hljs-type">class</span>=<span class="hljs-string">"Dept"</span>></many-<span class="hljs-keyword">to</span>-one>

   </<span class="hljs-type">class</span>></code>

 4.Spring配置 :

  Spring分爲:bean-base.xml,bean-dao.xml,bean-service.xml,bean-action.xml,以及整合成一個的bean.xml

  辭去暫時介紹bean-base.xml基礎功能文件和bean.xml,其他文件到相應的介紹地方再進行介紹;

  1.bean-base.xml:主要配置Hibernate的工廠sessionFactory和事務,連接池

<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="UTF-8"?></span>

<span class="hljs-tag"><<span class="hljs-title">beans</span> <span class="hljs-attribute">xmlns</span>=<span class="hljs-value">"http://www.springframework.org/schema/beans"</span>

    <span class="hljs-attribute">xmlns:xsi</span>=<span class="hljs-value">"http://www.w3.org/2001/XMLSchema-instance"</span> 

    <span class="hljs-attribute">xmlns:p</span>=<span class="hljs-value">"http://www.springframework.org/schema/p"</span>

    <span class="hljs-attribute">xmlns:context</span>=<span class="hljs-value">"http://www.springframework.org/schema/context"</span>

    <span class="hljs-attribute">xmlns:aop</span>=<span class="hljs-value">"http://www.springframework.org/schema/aop"</span>

    <span class="hljs-attribute">xmlns:tx</span>=<span class="hljs-value">"http://www.springframework.org/schema/tx"</span>

    <span class="hljs-attribute">xsi:schemaLocation</span>=<span class="hljs-value">"http://www.springframework.org/schema/beans

         http://www.springframework.org/schema/beans/spring-beans.xsd

         http://www.springframework.org/schema/context

         http://www.springframework.org/schema/context/spring-context.xsd

         http://www.springframework.org/schema/aop

         http://www.springframework.org/schema/aop/spring-aop.xsd

         http://www.springframework.org/schema/tx

         http://www.springframework.org/schema/tx/spring-tx.xsd"</span>></span>

         <span class="hljs-comment"><!-- 1. 數據源對象: C3P0連接池 --></span>

        <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"dataSource"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.mchange.v2.c3p0.ComboPooledDataSource"</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"driverClass"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"com.mysql.jdbc.Driver"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"jdbcUrl"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"jdbc:mysql://localhost:3306/day01?useUnicode=true&amp;characterEncoding=UTF8"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"user"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"root"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"password"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"123456"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"initialPoolSize"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"3"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"maxPoolSize"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"10"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"maxStatements"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"100"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"acquireIncrement"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"2"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

                <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

                <span class="hljs-comment"><!-- ###########Spring與Hibernate整合  start########### --></span>

    <span class="hljs-comment"><!-- 【推薦】方式所有的配置全部都在Spring配置文件中完成 --></span>

    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"sessionFactory"</span>

        <span class="hljs-attribute">class</span>=<span class="hljs-value">"org.springframework.orm.hibernate4.LocalSessionFactoryBean"</span>></span>

        <span class="hljs-comment"><!-- 注入連接池對象 --></span>

        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"dataSource"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"dataSource"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

        <span class="hljs-comment"><!-- Hibernate常用配置 --></span>

        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"hibernateProperties"</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">props</span>></span>

                <span class="hljs-tag"><<span class="hljs-title">prop</span> <span class="hljs-attribute">key</span>=<span class="hljs-value">"hibernate.dialect"</span>></span>org.hibernate.dialect.MySQLDialect<span class="hljs-tag"></<span class="hljs-title">prop</span>></span>

                <span class="hljs-tag"><<span class="hljs-title">prop</span> <span class="hljs-attribute">key</span>=<span class="hljs-value">"hibernate.show_sql"</span>></span>true<span class="hljs-tag"></<span class="hljs-title">prop</span>></span>

                <span class="hljs-tag"><<span class="hljs-title">prop</span> <span class="hljs-attribute">key</span>=<span class="hljs-value">"hibernate.hbm2ddl.auto"</span>></span>update<span class="hljs-tag"></<span class="hljs-title">prop</span>></span>

            <span class="hljs-tag"></<span class="hljs-title">props</span>></span>

        <span class="hljs-tag"></<span class="hljs-title">property</span>></span>

     <span class="hljs-comment"><!-- hibernate映射配置--></span> 

        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"mappingLocations"</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">list</span>></span>

                <span class="hljs-tag"><<span class="hljs-title">value</span>></span>classpath:com/rlovep/entity/*.hbm.xml<span class="hljs-tag"></<span class="hljs-title">value</span>></span>

            <span class="hljs-tag"></<span class="hljs-title">list</span>></span>

        <span class="hljs-tag"></<span class="hljs-title">property</span>></span>

        <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

<span class="hljs-comment"><!-- ###########Spring與Hibernate整合  end########### --></span>

        <span class="hljs-comment"><!-- 事務配置 --></span>

    <span class="hljs-comment"><!-- a. 配置事務管理器類 --></span>

    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"txManager"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"org.springframework.orm.hibernate4.HibernateTransactionManager"</span>></span>

        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"sessionFactory"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"sessionFactory"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

    <span class="hljs-comment"><!-- b. 配置事務增強(攔截到方法後如果管理事務?) --></span>

    <span class="hljs-tag"><<span class="hljs-title">tx:advice</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"txAdvice"</span> <span class="hljs-attribute">transaction-manager</span>=<span class="hljs-value">"txManager"</span>></span>

        <span class="hljs-tag"><<span class="hljs-title">tx:attributes</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">tx:method</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"*"</span> <span class="hljs-attribute">read-only</span>=<span class="hljs-value">"false"</span>/></span>

        <span class="hljs-tag"></<span class="hljs-title">tx:attributes</span>></span>

    <span class="hljs-tag"></<span class="hljs-title">tx:advice</span>></span>

    <span class="hljs-comment"><!-- c. Aop配置 --></span>

    <span class="hljs-tag"><<span class="hljs-title">aop:config</span>></span>

         <span class="hljs-tag"><<span class="hljs-title">aop:pointcut</span> <span class="hljs-attribute">expression</span>=<span class="hljs-value">"execution(* com.rlovep.service.impl.*.*(..))"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"pt"</span>/></span>

         <span class="hljs-tag"><<span class="hljs-title">aop:advisor</span> <span class="hljs-attribute">advice-ref</span>=<span class="hljs-value">"txAdvice"</span> <span class="hljs-attribute">pointcut-ref</span>=<span class="hljs-value">"pt"</span>/></span>

    <span class="hljs-tag"></<span class="hljs-title">aop:config</span>></span>

         <span class="hljs-comment"><!-- 用於建表 --></span>

      <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"appDao"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.entity.AppDao"</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"sessionFactory"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"sessionFactory"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

 <span class="hljs-tag"></<span class="hljs-title">beans</span>></span></code>

  2.bean.xml:

<code class="hljs xml has-numbering">....省略.....

    <span class="hljs-comment"><!-- 引入其他配置文件 --></span>

    <span class="hljs-tag"><<span class="hljs-title">import</span> <span class="hljs-attribute">resource</span>=<span class="hljs-value">"config/bean-base.xml"</span>/></span>

    <span class="hljs-tag"><<span class="hljs-title">import</span> <span class="hljs-attribute">resource</span>=<span class="hljs-value">"config/bean-dao.xml"</span>/></span>

    <span class="hljs-tag"><<span class="hljs-title">import</span> <span class="hljs-attribute">resource</span>=<span class="hljs-value">"config/bean-service.xml"</span>/></span>

    <span class="hljs-tag"><<span class="hljs-title">import</span> <span class="hljs-attribute">resource</span>=<span class="hljs-value">"config/bean-action.xml"</span>/></span>

<span class="hljs-tag"></<span class="hljs-title">beans</span>></span>   </code>

 5.Hibernate配置:

  Spring中已經配置好了Hibernate,此處主要講解建立數據庫中的三個表;

  1、建立AppDao類文件:bean已經在bean.hbm.xml中配置了

<code class="hljs cs has-numbering"><span class="hljs-comment">/*

 * 用來創建數據庫中的表

 */</span>

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> AppDao {

    <span class="hljs-comment">//工廠通過spring注入</span>

    <span class="hljs-keyword">private</span> SessionFactory sessionFactory;

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setSessionFactory</span>(SessionFactory sessionFactory) {

        <span class="hljs-keyword">this</span>.sessionFactory = sessionFactory;

    }

    <span class="hljs-comment">//@Test</span>

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">test</span>(){

        <span class="hljs-comment">//sessionFactory=(SessionFactory)ac.getBean("sessionFactory");</span>

        Session session = sessionFactory.openSession();

        Transaction tx = session.beginTransaction();

        <span class="hljs-comment">//保存管理員,並創建表</span>

        Admin admin=<span class="hljs-keyword">new</span> Admin();

        admin.setAdminName(<span class="hljs-string">"admin"</span>);

        admin.setPwd(<span class="hljs-string">"123456"</span>);

        session.save(admin);

        <span class="hljs-comment">//保存部門和僱員,並創建表</span>

        Dept dept1=<span class="hljs-keyword">new</span> Dept();

        Dept dept2=<span class="hljs-keyword">new</span> Dept();

....省略.....

<span class="hljs-comment">//持久化</span>

        session.save(dept1);

....省略.....

        session.save(employee4);

        tx.commit();

        session.close();

    }</code>

  2.建立類App類創建數據庫和存數據:

<code class="hljs cs has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> App {

    <span class="hljs-keyword">private</span> ApplicationContext ac=<span class="hljs-keyword">new</span> ClassPathXmlApplicationContext(<span class="hljs-string">"config/bean-base.xml"</span>);

    @Test

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">test</span>(){

        <span class="hljs-comment">//ac.getBean("deptDao");</span>

        AppDao appDao = (AppDao)ac.getBean(<span class="hljs-string">"appDao"</span>);

        appDao.test();

    }

}</code>

  3.點擊運行App的test方法就可以完成數據庫的創建;

 6.Dao層:實現數據增刪改查;

  1.先建立接口: IAdminDao,IDepDao,IEmployee,IBaseDao(所有Dao的通用操作接口定義)

  此處只貼出IBaseDao接口的定義:

<code class="hljs scala has-numbering"><span class="hljs-comment">/*

 * * 所有dao的通用操作接口定義

 */</span>

public interface IBaseDao<T> {

    <span class="hljs-javadoc">/**

     * 保存

     * <span class="hljs-javadoctag">@param</span> obj

     */</span>

    void save(T obj);



....省略.....

}</code>

  2.接口的實現:AdminDao,DepDao,Employee,BaseDao(所有Dao的通用操作,希望所有的dao都繼承此類)

  BaseDao實現:

<code class="hljs cs has-numbering"><span class="hljs-comment">/*

 * 所有dao的通用操作,希望所有的dao都繼承此類

 */</span>

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> BaseDao<T> implements IBaseDao<T>{

    <span class="hljs-comment">//當前操作實際的bean類型</span>

    <span class="hljs-keyword">private</span> Class<T>clazz;

    <span class="hljs-comment">//獲取類名稱</span>

    <span class="hljs-keyword">private</span> String className;

    <span class="hljs-comment">// IOC容器(依賴)注入SessionFactory對象</span>

    <span class="hljs-keyword">private</span> SessionFactory sessionFactory;

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setSessionFactory</span>(SessionFactory sessionFactory) {

        <span class="hljs-keyword">this</span>.sessionFactory = sessionFactory;

    }

     <span class="hljs-keyword">public</span> <span class="hljs-title">BaseDao</span>() {

        Type type=<span class="hljs-keyword">this</span>.getClass().getGenericSuperclass();

        <span class="hljs-comment">//轉換爲參數化類型</span>

        ParameterizedType pt=(ParameterizedType)type;<span class="hljs-comment">// BaseDao<Employee></span>

        <span class="hljs-comment">//得到實際類型</span>

        Type types[]=pt.getActualTypeArguments();

        <span class="hljs-comment">//獲取實際類型</span>

        clazz=(Class<T>)types[<span class="hljs-number">0</span>];

        className = clazz.getSimpleName();<span class="hljs-comment">//例如:Employee</span>

    }

....省略.....

    @Override

    <span class="hljs-keyword">public</span> List<T> <span class="hljs-title">getAll</span>() {

        Query query = sessionFactory.getCurrentSession().createQuery(<span class="hljs-string">"from "</span>+className);

        List<T> list = query.list();

        <span class="hljs-keyword">return</span> list;

    }

}</code>

  其他接口實現:

<code class="hljs http has-numbering"><span class="php"><span class="hljs-comment">//只需要繼承通用操作,和特點接口就行:這裏接口中沒有方法,可以加方法</span>

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DeptDao</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">BaseDao</span><<span class="hljs-title">Dept</span>> <span class="hljs-keyword">implements</span> <span class="hljs-title">IDepDao</span>{</span>

}</span></code>

 7.Service層:

  同樣先建立接口再建立類,此處不貼出代碼,介紹bean-dao.xml,bean-service.xml的建立,以及對剛剛建立的Dao和service進行測試

  1.bean-dao.xml

<code class="hljs http has-numbering"><span class="xml"> <span class="hljs-comment"><!-- dao實例 --></span>

         <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"adminDao"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.dao.impl.AdminDao"</span>></span>

             <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"sessionFactory"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"sessionFactory"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

          <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"deptDao"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.dao.impl.DeptDao"</span>></span>

             <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"sessionFactory"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"sessionFactory"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

          <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"employeeDao"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.dao.impl.EmployeeDao"</span>></span>

             <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"sessionFactory"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"sessionFactory"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">bean</span>></span></span></code>

  2.bean-service.xml

<code class="hljs http has-numbering"><span class="xml"> <span class="hljs-comment"><!-- service 實例 --></span>

          <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"adminService"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.service.impl.AdminService"</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"adminDao"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"adminDao"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

           <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"deptService"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.service.impl.DeptService"</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"deptDao"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"deptDao"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

           <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"employeeService"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.service.impl.EmployeeService"</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"employeeDao"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"employeeDao"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">bean</span>></span></span></code>

  3.測試剛剛建立的dao和service:

  在包service中建立App測試類:

publicclass App {

    //加載spring的配置文件

   private ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");

   //測試Admin的操作

   @Test

   public voidtestAdmin(){

       //獲得bean

     IAdminService adminService=(IAdminService)ac.getBean("adminService");

     Admin admin=new Admin();

     admin.setAdminName("admin");

     admin.setPwd("123456");

    System.out.println( adminService.login(admin));

   }

   //測試Dept的操作

   @Test

   public voidtestDept(){

     IDeptService service=( IDeptService)ac.getBean("deptService");

    System.out.println( service.findById(1));

   }

   //測試Employee的操作

   @Test

   public voidtestEmployee(){

     IEmployeeService service=( IEmployeeService)ac.getBean("employeeService");

     List<Employee> list = service.getAll();

    System.out.println( service.findById(9));

   }

}

 8.web.xml配置:

  1、需要配置Spring

  2、需要配置Struts2

  3、配置文件如下:

<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="UTF-8"?></span>

<span class="hljs-tag"><<span class="hljs-title">web-app</span> <span class="hljs-attribute">xmlns:xsi</span>=<span class="hljs-value">"http://www.w3.org/2001/XMLSchema-instance"</span> <span class="hljs-attribute">xmlns</span>=<span class="hljs-value">"http://java.sun.com/xml/ns/javaee"</span> <span class="hljs-attribute">xsi:schemaLocation</span>=<span class="hljs-value">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"WebApp_ID"</span> <span class="hljs-attribute">version</span>=<span class="hljs-value">"3.0"</span>></span>

  <span class="hljs-tag"><<span class="hljs-title">display-name</span>></span>sshDemo<span class="hljs-tag"></<span class="hljs-title">display-name</span>></span>

  <span class="hljs-comment"><!-- 配置spring的OpenSessionInView模式 【目的:JSp頁面訪問懶加載數據】 --></span>

        <span class="hljs-comment"><!-- 注意:訪問struts時候需要帶上*.action後綴 --></span>

        <span class="hljs-tag"><<span class="hljs-title">filter</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>OpenSessionInView<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">filter-class</span>></span>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter<span class="hljs-tag"></<span class="hljs-title">filter-class</span>></span>

        <span class="hljs-tag"></<span class="hljs-title">filter</span>></span>

        <span class="hljs-tag"><<span class="hljs-title">filter-mapping</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>OpenSessionInView<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">url-pattern</span>></span>*.action<span class="hljs-tag"></<span class="hljs-title">url-pattern</span>></span>

        <span class="hljs-tag"></<span class="hljs-title">filter-mapping</span>></span>

              <span class="hljs-comment"><!-- Struts2的配置 --></span>

          <span class="hljs-tag"><<span class="hljs-title">filter</span>></span>

          <span class="hljs-comment"><!-- 配置過濾器的名字 --></span>

            <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>struts2<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span>

          <span class="hljs-comment"><!--  配置核心過濾器類 --></span>

            <span class="hljs-tag"><<span class="hljs-title">filter-class</span>></span>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<span class="hljs-tag"></<span class="hljs-title">filter-class</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">filter</span>></span>

        <span class="hljs-comment"><!--配置要攔截的URL,辭去配置全部攔截 --></span>

          <span class="hljs-tag"><<span class="hljs-title">filter-mapping</span>></span>

              <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>struts2<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span>

              <span class="hljs-tag"><<span class="hljs-title">url-pattern</span>></span>/*<span class="hljs-tag"></<span class="hljs-title">url-pattern</span>></span>

          <span class="hljs-tag"></<span class="hljs-title">filter-mapping</span>></span>

            <span class="hljs-comment"><!--在web.xml中加入如下代碼令服務器自動加載Spring   --></span> 

        <span class="hljs-tag"><<span class="hljs-title">context-param</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">param-name</span>></span>contextConfigLocation<span class="hljs-tag"></<span class="hljs-title">param-name</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">param-value</span>></span>classpath:bean.xml<span class="hljs-tag"></<span class="hljs-title">param-value</span>></span>

        <span class="hljs-tag"></<span class="hljs-title">context-param</span>></span>

        <span class="hljs-tag"><<span class="hljs-title">listener</span>></span>

            <span class="hljs-tag"><<span class="hljs-title">listener-class</span>></span>org.springframework.web.context.ContextLoaderListener<span class="hljs-tag"></<span class="hljs-title">listener-class</span>></span>

        <span class="hljs-tag"></<span class="hljs-title">listener</span>></span>

         <span class="hljs-comment"><!-- 首頁配置 --></span>

    <span class="hljs-tag"><<span class="hljs-title">welcome-file-list</span>></span>

        <span class="hljs-tag"><<span class="hljs-title">welcome-file</span>></span>index.jsp<span class="hljs-tag"></<span class="hljs-title">welcome-file</span>></span>

    <span class="hljs-tag"></<span class="hljs-title">welcome-file-list</span>></span>

<span class="hljs-tag"></<span class="hljs-title">web-app</span>></span></code>

 9.struts.xml配置 :

  1.由於spring的整合,在 struts.xml配置文件中的class屬性直接使用:spring的配置文件bean-action.xml中定義的bean

  2.struts.xml文件:

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">package</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts2"</span> <span class="hljs-attribute">extends</span>=<span class="hljs-value">"struts-default"</span>></span>

<span class="hljs-comment"><!-- 配置action,class屬性使用Spring中定義的bean->

      <action name="admin_*" class="adminAction" method="{1}">

       <!-- 登陸失敗 --></span>

            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"loginFaild"</span>></span>/login.jsp<span class="hljs-tag"></<span class="hljs-title">result</span>></span>

            <span class="hljs-comment"><!-- 登陸成功 --></span>

            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"index"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"redirectAction"</span>></span>emp_list<span class="hljs-tag"></<span class="hljs-title">result</span>></span>

      <span class="hljs-tag"></<span class="hljs-title">action</span>></span>

       <span class="hljs-tag"><<span class="hljs-title">action</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"emp_*"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"employeeAction"</span> <span class="hljs-attribute">method</span>=<span class="hljs-value">"{1}"</span>></span>

           <span class="hljs-comment"><!-- 列表展示 --></span>

            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"list"</span>></span>/WEB-INF/list.jsp<span class="hljs-tag"></<span class="hljs-title">result</span>></span>

            <span class="hljs-comment"><!-- 進入添加頁面視圖 --></span>

            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"add"</span>></span>/WEB-INF/add.jsp<span class="hljs-tag"></<span class="hljs-title">result</span>></span>

            <span class="hljs-comment"><!-- 添加成功,進入列表 (防止刷新就多一條記錄問題,所以用重定向) --></span>

            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"listAction"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"redirectAction"</span>></span>emp_list<span class="hljs-tag"></<span class="hljs-title">result</span>></span>       

            <span class="hljs-comment"><!-- 進入修改頁面 --></span>

            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"edit"</span>></span>/WEB-INF/edit.jsp<span class="hljs-tag"></<span class="hljs-title">result</span>></span>

      <span class="hljs-tag"></<span class="hljs-title">action</span>></span></code>

  3.bean-action.xml文件:

<code class="hljs xml has-numbering">    <span class="hljs-comment"><!-- 指定action多例 --></span>

    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"adminAction"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.action.AdminAction"</span> <span class="hljs-attribute">scope</span>=<span class="hljs-value">"prototype"</span>></span>

        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"adminService"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"adminService"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"employeeAction"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.rlovep.action.EmployeeAction"</span> <span class="hljs-attribute">scope</span>=<span class="hljs-value">"prototype"</span>></span>

        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"deptService"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"deptService"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"employeeService"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"employeeService"</span>></span><span class="hljs-tag"></<span class="hljs-title">property</span>></span>

    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span></code>

 10.Action層 :

  1、建立AdminAction文件:繼承ActionSupport類,和實現ModelDriver接口

  2、建立EmployeeAction文件:繼承ActionSupport類,和實現ModelDriver接口

  3、建立攔截器類:AdminInterceptor類用於判斷是否登陸;繼承AbstractInterceptor

<code class="hljs java has-numbering"><span class="hljs-annotation">@Override</span>

    <span class="hljs-keyword">public</span> String <span class="hljs-title">intercept</span>(ActionInvocation invocation) <span class="hljs-keyword">throws</span> Exception {

        <span class="hljs-comment">//得到當前執行的方法</span>

        String method = invocation.getProxy().getMethod();

        <span class="hljs-comment">//判斷:當不爲登陸方法和list方法時</span>

        <span class="hljs-keyword">if</span>(!<span class="hljs-string">"login"</span>.equals(method)&&!<span class="hljs-string">"list"</span>.equals(method)){

            Object obj= ActionContext.getContext().getSession().get(<span class="hljs-string">"adminInfo"</span>);

            <span class="hljs-keyword">if</span>(obj==<span class="hljs-keyword">null</span>){

                <span class="hljs-comment">//沒有登陸</span>

                <span class="hljs-keyword">return</span> <span class="hljs-string">"login"</span>;

            }<span class="hljs-keyword">else</span>{

                <span class="hljs-comment">//放行</span>

                <span class="hljs-keyword">return</span> invocation.invoke();

            }

        }

        <span class="hljs-comment">//放行</span>

        <span class="hljs-keyword">return</span> invocation.invoke();

    }</code>

  建立相應的jsp文件:

  主要有:index,login,edit,add,list等jsp文件;詳情見工程源代碼;

 11.測試圖:部署動態工程

  測試登陸

4

  測試添加

5

  測試刪除

6

  測試修改

7

 

發佈了22 篇原創文章 · 獲贊 25 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章