ItcastOA_總體說明_準備環境

1. 總體說明

1.1. 項目說明

1.1.1. OA概述

OA是Office Automation的縮寫,本意爲利用技術的手段提升辦公的效率,進而實現辦公的自動化處理。實現信息化、無紙化辦公,可方便的生成統計報表等。css

OA是OFFICE AUTOMATION的縮寫,本意爲利用技術的手段提升辦公的效率,進而實現辦公的自動化處理。採用Internet/Intranet技術,基於工做流的概念,使企業內部人員方便快捷地共享信息,高效地協同工做;改變過去複雜、低效的手工辦公方式,實現迅速、全方位的信息採集、信息處理,爲企業的管理和決策提供科學的依據。java

OA軟件解決企業的平常管理規範化、增長企業的可控性、提升企業運轉的效率的基本問題。範圍涉及平常行政管理、各類事項的審批、辦公資源的管理、多人多部門的協同辦公、以及各類信息的溝通與傳遞。能夠歸納的說,OA軟件跨越了生產、銷售、財務等具體的業務範疇,更集中關注於企業平常辦公的效率和可控性,是企業提升總體運轉能力不可缺乏的軟件工具。node

1.1.2. 本系統做用

組織的核心競爭力源自單位對內外部資源的有效利用。對它們之間的關係進行協調,最大限度的發揮全部資源的做用,並用系統的觀點,在整個系統價值最大化的基礎上來發揮各個資源的做用,使資源的運做產生協同效用。所以可經過協同辦公系統打造單位的核心競爭力。本協同辦公系統的主要做用爲:mysql

一、 創建內部的通訊平臺。程序員

二、 創建信息發佈的平臺。web

三、 文檔管理的自動化。spring

四、 工做流程的自動化。sql

五、 行政平常事務處理。數據庫

六、 安全機制的可靠性。apache

 

本系統旨在加速單位信息化進程,充分利用計算機和現代通信手段面向單位服務。創建單位內部信息交流的快速通道,以共享信息資源。強化部門業務管理,增強各業務部門之間的交流。實現單位信息的快速上傳下達,促進協同辦公。提升辦公效率,爲各級領導及業務人員提供輔助辦公和決策服務。

一、 本系統將最大限度地提升辦公效率和辦公質量,下降管理和辦公成本,改善辦公環境和條件,提升辦公管理和決策的自動化和科學化水平。

二、 以人爲中心,致力於幫助用戶實現共享資源、規範流程、推進執行的目的。幫助用戶節省辦公費用,減小中間環節,優化業務流程,提升總體效率,促進管理進步。

 

簡單的說,有如下兩點:

1,利用技術的手段提升辦公的效率

2,信息化,可方便的生成統計報表等。

 

1.1.3. 設計原則

以應用爲核心,要突出「實用、易用、簡潔、穩定」。既注重實效,知足用戶的現實須要,又爲系統的後續升級和擴展留有餘地。在技術實現上,要突出結構清晰、實現合理、通俗易懂(簡單)

1. 實用:知足用戶現實須要,解決實際問題,作細核心功能。

2. 易用:使用方便,各項功能一目瞭然。知足用戶的使用習慣,易使用、易維護、易升級。實現傻瓜式的操做,將實施、培訓成本和週期降到最低。

3. 簡潔:頁面簡潔,功能簡潔,每個元素都有存在的意義。

4. 穩定:從底層數據庫到功能層通過嚴格測試,能在不一樣的硬件環境中長期平穩運行。

1.1.4. 功能說明

OA是輔助辦公的軟件,使用OA與不使用OA相對比的好處是:能夠用計算機管理全部的數據,並能夠方便的實現統計與報表的功能。提升辦公效率。(實現信息化)。

如下是一個OA系統的所有功能列表:

 

說明:不是全部的OA都有所有的功能,而是根據需求肯定的。

1.2. 項目實現說明

1.2.1. 軟件開發的步驟說明

需求確認—概要設計—詳細設計—編碼—單元測試—集成測試—系統測試—維護。

 

單元測試是由程序員本身來完成,最終受益的也是程序員本身。能夠這麼說,程序員有責任編寫功能代碼,同時也就有責任爲本身的代碼編寫單元測試。執行單元測試,就是爲了證實這段代碼的行爲和咱們指望的一致。

集成測試,也叫組裝測試或聯合測試。在單元測試的基礎上,將全部模塊按照設計要求(如根據結構圖〕組裝成爲子系統或系統,進行集成測試。實踐代表,一些模塊雖然可以單獨地工做,但並不能保證鏈接起來也能正常的工做。程序在某些局部反映不出來的問題,在全局上極可能暴露出來,影響功能的實現。

系統測試是將已經確認的軟件、計算機硬件、外設、網絡等其餘元素結合在一塊兒,進行信息系統的各類組裝測試和確認測試,其目的是經過與系統的需求相比較,發現所開發的系統與用戶需求不符或矛盾的地方,從而提出更加完善的方案。

 

1.2.2. 在項目開發中,咱們處於什麼位置,要作哪些事情?

編碼及簡單測試等

1.2.3. 在課堂上,咱們要完成哪些功能,具體需求是什麼?

模塊

功能

說明

組織與用戶管理

崗位管理

 

部門管理

 

用戶管理

 

系統權限

初始化權限

 

分配權限

 

驗證權限

 

網上交流--論壇

版塊管理

 

看帖、發帖、回帖

 

文章管理

 

審批流轉(工做流)

表單模板管理

 

審批流程管理

 

審批流轉

 

表單查詢

 

 

說明:按列出的順序實現功能。效果以靜態頁面爲準(需求)

 

按靜態頁面作

1.3. ItcastOA的總體設計

1.3.1. 分層

1、JavaEE的三層架構

 

 

2、關於分層的說明

1,上面調用下面,即View調用Service,Service調用Dao。

2,層與層之間用接口。除定義的接口外,不能使用其它層的特有類或接口

3,使用實體做爲DTOData Transfer Object,數據傳輸對象)

 

要作到任一層換掉後,其餘層不受影響。咱們在此項目中使用兩層:View+Service即在Service中直接操做Hibernate.Session。由於若是使用三層,在Service中就會有一部分方法只是直接調用DAO中的方法。通常狀況下只有在多個數據源的場合下適合引入DAO層。

 

3、有關分層的幾個問題

1,必定要分層嗎?

不必定。假如公司要求你寫一個能夠給指定員工發送短信的小程序,用於開會通知與自動發送生日祝福短信。這個程序很小,沒有多少行代碼,並且不變,這時不分層能夠嗎?徹底能夠呀。但咱們在寫程序時,仍是要分層的,分層的程序結構清晰,可維護性高。

2,必定要3層嗎?

不必定。分3層是推薦的,而不是必須的,應根據本身的具體狀況進行安排。咱們若是使用3層的結構,用起來就麻煩,由於在Service中會有一部分方法只是直接調用Dao中的方法,而Dao中的方法只是調用Session完成某操做。此時分2層更好,即在Service中可直接操做Session,以簡化結構。其實Hibernate已經能夠支持多種數據庫。

3,必定要使用接口嗎?

不必定。之前就有同窗問我:「在設計程序時肯定的技術在開發完成後通常不會更換的,實現類通常也不會更換,這種狀況還用接口嗎,通常的小項目是否是能夠不使用接口?」。是的,若是不會變(通常也不會變),這是徹底能夠的。

 

咱們所學習的框架、技術都是解決問題的推薦方案,而不是必需要用的。遇到問題後優先使用成熟的技術與方案,以免不少潛在的問題,避免走沒必要要的彎路。

1.3.2. 所用框架、技術

編號

工具

版本

說明

1. 

Struts 2

2.1.8.1

 

2. 

Hibernate

3.6.0

實現持久化操做

3. 

Spring

2.5

 

4. 

jBPM

4.4

工做流支持

5. 

Junit

4

單元測試

6. 

jQuery

1.4

 

 

說明:還有jQuery.validate與jQuery.treeview等小插件

1.3.3. 開發環境

操做系統

Windows

 

開發工具

MyEclipse 8.6

Eclipse

數據庫

MySql 5.0.22

 

Web容器

Tomcat 6.0

 

瀏覽器

IE 6

 

 

說明:

1, 推薦使用MyEclipse,這樣出現工具問題能夠一塊兒解決固然也可使用自已熟悉的工具,如Eclipse、NetBeans、IntelliJ idea如今的重點是代碼實現,不是工具。應使用有效的工具。

2, 要注意使用的MySql與JDBC驅動的版本要兼容。

3, 顯示的技術(js, css)有兼容的問題,寫出的代碼可能在某些瀏覽器中不能正常運行,這就須要在寫代碼時多使用JS框架,讓框架幫咱們解決兼容的問題。

 

1.3.4. 代碼規範

1, 命名:使用駝峯命名法。

a) 類、接口:每一個單詞的首字母大寫。例:MyDateConverter

b) 變量、方法:第一個單詞的首字母小寫,其餘單詞的首字母都大寫。例:myDateConverter

c) 常量:所有字母都大寫,單詞之間使用_隔開。例,DEFAULT_PAGE_SIZE

2, 使用有意義的名稱,慎用縮寫。

3, 註釋:在代碼中加入適當的註釋:說明步驟,與說明非簡單邏輯。

4, 空行:在代碼中加入適當的空行,就像寫文章時要分段同樣(加強可讀性)。

5, 要格式化代碼、一個java文件中的代碼不要過多、一個方法中的代碼不要過多。

 

總之,要保證代碼的有效、清晰、簡潔(à可讀)。

1, 有效:這是第一目標,代碼要是能夠解決問題的。

2, 清晰:在有效的前提下,讓代碼結構與思路清晰。

3, 簡潔:代碼與邏輯應儘可能的簡單,不要是給別人講別人都聽不明白。

 

 

 

1.3.5. 約定

1, 工程中全部的文件都採用utf-8編碼。全部的頁面都是使用utf-8編碼,這樣方便解決表單內容的亂碼問題。亂碼通常狀況下是亂用編碼產生的。

2, 實體主鍵屬性的類型使用Long型。

1.3.6. 項目計劃

功能

知識點

預計時間

1. 搭建環境 + 基礎功能

a) Dao設計

1. Struts基礎

2. Hibernate基礎

1天

2. 組織用戶管理

a) 崗位管理

b) 部門管理

c) 用戶管理

1. 通常的實體設計

2. 實體映射(映射文件)

3. 增刪改查功能

4. 樹狀顯示

5. 使用jQuery.validate進行表單驗證

2天

3. 系統權限

a) 建立權限

b) 分配權限

c) 使用權限

1. jQuery的通常使用

2. 權限控制方案

2天

4. 論壇

a) 論壇管理

b) 論壇基本功能

c) 文章管理

1. 分頁

2. 在線編輯器FCKeditor

3天

5. jBPM + 審批流轉

a) 工做流框架jBPM

b) 審批流轉功能

1. 工做流框架jBPM

2. 工做流的通常應用

4天

 

2. 準備環境

2.1. 建立數據庫,要注意編碼

1,使用MySql數據庫。

2,建立數據庫時,要注意編碼要支持中文。

3,建表語句以下:

create database itcastoa default character set utf8;
show create database itcastoa;

 

說明:須要先運行Mysql的配置嚮導,把編碼配爲GBK或UTF8。若是配成UTF8,在mysql命令行客戶端中就有亂碼,因此最好用GBK。

 

2.2. 新建Web程並進行配置

2.2.1. 配置工具

2.2.1.1. 配置快捷鍵

1, 把Content Assist設爲Alt+/

2, 把Word Completion 設爲Alt+.

3,其餘經常使用快捷鍵說明:

Alt+/

Content Assist代碼提示

Ctrl+T

顯示類的繼承結構

Ctrl+O

列出類中的成員(成員變量、方法等)

Ctrl+/

註釋/取消註釋

Ctrl+Shift+O

導入要使用的包、並去除不使用的包

Ctrl+Shift+F

格式化當前文件中的代碼/格式化選中的代碼

Ctrl+Alt+Up

複製當前行到下面

Ctrl+Alt+Down

複製當前行到上面

Ctrl+D

刪除當前行/刪除選中文本佔的全部行

Shift+Enter

至關於按End後再按Enter

Alt+Left

 

Alt+Right

 

Ctrl+Shift+X

變爲大寫

Ctrl+Shift+Y

變爲小寫

 

 

 

2.2.1.2. 配置文件的默認編碼

1, 設置工程的默認編碼爲UTF-8。

2, 配置JSP的默認編碼爲utf-8

2.2.1.3. 配置格式化的代碼樣式

1, 使用Ctrl+Shift+F能夠格式化代碼。

2, 在WindowàPreferencesàJavaàCode StyleàFormatter中能夠設置代碼樣式。 要把Java代碼與註釋的行寬設爲130。(其餘使用默認樣式)

3, 搜索XML Sources,修改xml的行寬爲130。(不考慮打印的狀況)

2.2.1.4. MyEclipse工具使用說明

1, 導入工程時能夠直接選擇一個zip文檔:FileàImportàExisting Projects into Workspace-->Select archive file。

2, 工程更名後,發果發佈到Tomcat下,對應的應用的名稱不必定改變。這個名稱是在MyEclipseà Web中的Web Context-root中配置的。

新建一個Web Project,並設置工程的編碼爲UTF-8。

 

 

2.2.2. 添加框架環境

 

    Junit

      

 

    Struts2

      jar

 

      struts.xml, web.xml

 

struts.xml

把擴展名配置爲action

 把主題設置爲simple本身來控制樣式

約束文件提示,知道這寫什麼那寫什麼            

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- 配置爲開發模式,不用從新發布 -->
    <constant name="struts.devMode" value="true"/>
    <!-- 把擴展名配置爲action -->
    <constant name="struts.action.extension" value="action"/>
    <!-- 把主題設置爲simple,本身來控制樣式 -->
    <constant name="struts.ui.theme" value="simple"/>
    
    <package name="default" namespace="/" extends="struts-default">
    
    </package>
</struts>

 

 web.xml

   <!-- 配置Struts2的核心過濾器 -->
   <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

 

    Hibernate

      jar包:核心包, 必須包, jpa, c3p0, jdbc

 

      hibernate.cfg.xml, *.hbm.xml

或者在裏面搜hibernate.cfg.xml找一個多點配置的粘過來就好了

*.hbm.xml映射文件也是在裏面搜,隨便拷個過來

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- 1.數據庫鏈接信息-->
        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <property name="connection.driver_class">com.jdbc.mysql.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/itcastoa</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>


        <!-- 2.其餘配置 -->
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>

        <!-- 3.導入映射文件 -->
        <mapping resource="cn/User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

 

    Spring

      jar(核心包,依賴包[aopaspectjrt.jaraspectjweaver.jarcglib-nodep-2.1_3.jar],日誌commons-logging.jar)5

 

 

      appicationContext.xml/beans.xml

      去示例代碼中搜隨便拷一個

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

    <!-- 自動掃描與裝配bean -->
    <context:component-scan base-package="cn.itcast.oa" ></context:component-scan>
    <bean></bean>
</beans>

 

 測試struts

測試類

 配置文件

 

Test.jsp

 

訪問結果得知,Struts測試成功

測試spring

 SpringTest.java

 

設置bean

掃描

測試成功控制檯顯示

 

聲明一個bean,用下面哪個均可以,括號裏寫bean的名字或不寫均可以

  @Component("beanName")

  @Controller

  @Service

  @Repository

配置beanscope

  @Scope("prototype")

注入bean

  @Resource

 

  整合SSH

    Struts2Spring整合

  爲何要整合:讓struts2Action交給容器管理

  SpringStruts2整合

    1,在web.xml中配置Spring的監聽器

web.xml中添加

 

    <!-- 配置Spring的用於初始化容器對象的監聽器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext*.xml</param-value>
    </context-param>

 

     2,加一個jar

struts-2.1.8.1\lib下找到struts2-spring-plugin-2.1.8.1.jar

測試是否整合成功

訪問結果看出整合成功了

 

    HibernateSpring整合

       1,管理SessionFactory實例(只須要一個)

 

    <!-- 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <!-- 指定hibernate的配置文件位置 -->
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
        <!-- 配置c3p0數據庫鏈接池 -->
        <property name="dataSource">
            <bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <property name="jdbcUrl" value="${jdbcUrl}"></property>
                <property name="driverClass" value="${driverClass}"></property>
                <property name="user" value="${user}"></property>
                <property name="password" value="${password}"></property>
                
                <!-- 其餘配置 -->
                <!--初始化時獲取三個鏈接,取值應在minPoolSize與maxPoolSize之間。Default: 3 -->
                <property name="initialPoolSize" value="3"></property>
                <!--鏈接池中保留的最小鏈接數。Default: 3 -->
                <property name="minPoolSize" value="3"></property>
                <!--鏈接池中保留的最大鏈接數。Default: 15 -->
                <property name="maxPoolSize" value="5"></property>
                <!--當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數。Default: 3 -->
                <property name="acquireIncrement" value="3"></property>
                <!-- 控制數據源內加載的PreparedStatements數量。若是maxStatements與maxStatementsPerConnection均爲0,則緩存被關閉。Default: 0 -->
                <property name="maxStatements" value="8"></property>
                <!--maxStatementsPerConnection定義了鏈接池內單個鏈接所擁有的最大緩存statements數。Default: 0 -->
                <property name="maxStatementsPerConnection" value="5"></property>
                <!--最大空閒時間,1800秒內未使用則鏈接被丟棄。若爲0則永不丟棄。Default: 0 -->
                <property name="maxIdleTime" value="1800"></property>
            </bean>
        </property>
    </bean>

 

Jdbc.properties

jdbcUrl     = jdbc:mysql:///itcastoa
driverClass = com.mysql.jdbc.Driver
user        = root
password    =root

測試

    //測試SessionFactory
    @Test
    public void testSessionFactory() throws Exception {
        SessionFactory sessionFactory = (SessionFactory)ac.getBean("sessionFactory");
        System.out.println(sessionFactory);
    } 

從結果當作功了

 

    2,聲明式事務管理

 

    <!-- 配置聲明式事務管理(採用註解方式) -->
    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <tx:annotation-driven transaction-manager="txManager"/>

測試

控制檯

 

建立了一個表,但裏面沒有數據

再把這行註釋://int e = 1 / 0; //這行會拋異常

再運行測試類

控制檯

表中成功插入兩行數據,說明聲明式事務管理配置成功

 

完整測試

這就是Action裏面調用ServiceService裏面還保存了用戶操做數據庫,三大框架都用了,spring管理事務,Action處理請求,Hibernate處理對象的存儲

 

說明:

1, 不要引用外面的Jar包,應所有拷貝到工程中。

 

 

 

  配置日誌

 

加入jar

log4j.properties文件中默認:

 

若是把warn改成error,啓動的時候若是沒有任何錯誤則沒打印出任何警告信息

 

日誌有5種級別

  debug 調試信息

  info 通常信息

  warn 警告

  error 錯誤

  fatal 嚴重錯誤

 

2.2.3. 配置數據庫

修改Hibernate.cfg.xml中的數據庫鏈接信息。並在hibernate.cfg.xml中作以下配置:

 

<!-- 顯示sql語句 -->
<property name="show_sql">true</property>
<!-- 自動更新表結構 -->
<property name="hbm2ddl.auto">update</property>

 

2.3. 工程中的資源分類(目錄與包結構)

2.3.1. 目錄結構

源碼文件夾

   src項目源代碼

    conf配置文件

    test單元測試

WebRoot文件夾下

    scriptJavaScript腳本文件

    styleCSS樣式文件

    WEB-INF/jspjsp頁面文件(再建立子文件夾分類存放)

 

 

2.3.2. 包結構

使用三層:顯示層(View),業務層(Service),數據訪問層(Dao)

(部分)

包名

說明

cn.itcast.oa.domain

實體(Domain)

cn.itcast.oa.dao

Dao接口

cn.itcast.oa.dao.impl

Dao的實現類

cn.itcast.oa.service

Service接口

cn.itcast.oa.service.impl

Service的實現類

cn.itcast.oa.struts2.action

Struts的Action

cn.itcast.oa.util

一些工具類

cn.itcast.oa.cfg

 

cn.itcast.oa.filter

 

 

 

View顯示Jsp + JSTL + Struts + jQuery

Service業務邏輯JBPM

Dao數據訪問Hibernate

相關文章
相關標籤/搜索