OA是Office Automation的縮寫,本意爲利用技術的手段提升辦公的效率,進而實現辦公的自動化處理。實現信息化、無紙化辦公,可方便的生成統計報表等。css
OA是OFFICE AUTOMATION的縮寫,本意爲利用技術的手段提升辦公的效率,進而實現辦公的自動化處理。採用Internet/Intranet技術,基於工做流的概念,使企業內部人員方便快捷地共享信息,高效地協同工做;改變過去複雜、低效的手工辦公方式,實現迅速、全方位的信息採集、信息處理,爲企業的管理和決策提供科學的依據。java
OA軟件解決企業的平常管理規範化、增長企業的可控性、提升企業運轉的效率的基本問題。範圍涉及平常行政管理、各類事項的審批、辦公資源的管理、多人多部門的協同辦公、以及各類信息的溝通與傳遞。能夠歸納的說,OA軟件跨越了生產、銷售、財務等具體的業務範疇,更集中關注於企業平常辦公的效率和可控性,是企業提升總體運轉能力不可缺乏的軟件工具。node
組織的核心競爭力源自單位對內外部資源的有效利用。對它們之間的關係進行協調,最大限度的發揮全部資源的做用,並用系統的觀點,在整個系統價值最大化的基礎上來發揮各個資源的做用,使資源的運做產生協同效用。所以可經過協同辦公系統打造單位的核心競爭力。本協同辦公系統的主要做用爲:mysql
一、 創建內部的通訊平臺。程序員
二、 創建信息發佈的平臺。web
三、 文檔管理的自動化。spring
四、 工做流程的自動化。sql
五、 行政平常事務處理。數據庫
六、 安全機制的可靠性。apache
本系統旨在加速單位信息化進程,充分利用計算機和現代通信手段面向單位服務。創建單位內部信息交流的快速通道,以共享信息資源。強化部門業務管理,增強各業務部門之間的交流。實現單位信息的快速上傳下達,促進協同辦公。提升辦公效率,爲各級領導及業務人員提供輔助辦公和決策服務。
一、 本系統將最大限度地提升辦公效率和辦公質量,下降管理和辦公成本,改善辦公環境和條件,提升辦公管理和決策的自動化和科學化水平。
二、 以人爲中心,致力於幫助用戶實現共享資源、規範流程、推進執行的目的。幫助用戶節省辦公費用,減小中間環節,優化業務流程,提升總體效率,促進管理進步。
簡單的說,有如下兩點:
1,利用技術的手段提升辦公的效率
2,信息化,可方便的生成統計報表等。
以應用爲核心,要突出「實用、易用、簡潔、穩定」。既注重實效,知足用戶的現實須要,又爲系統的後續升級和擴展留有餘地。在技術實現上,要突出「結構清晰、實現合理、通俗易懂(簡單)」。
1. 實用:知足用戶現實須要,解決實際問題,作細核心功能。
2. 易用:使用方便,各項功能一目瞭然。知足用戶的使用習慣,易使用、易維護、易升級。實現「傻瓜」式的操做,將實施、培訓成本和週期降到最低。
3. 簡潔:頁面簡潔,功能簡潔,每個元素都有存在的意義。
4. 穩定:從底層數據庫到功能層通過嚴格測試,能在不一樣的硬件環境中長期平穩運行。
OA是輔助辦公的軟件,使用OA與不使用OA相對比的好處是:能夠用計算機管理全部的數據,並能夠方便的實現統計與報表的功能。提升辦公效率。(實現信息化)。
如下是一個OA系統的所有功能列表:
說明:不是全部的OA都有所有的功能,而是根據需求肯定的。
需求確認—概要設計—詳細設計—編碼—單元測試—集成測試—系統測試—維護。
單元測試是由程序員本身來完成,最終受益的也是程序員本身。能夠這麼說,程序員有責任編寫功能代碼,同時也就有責任爲本身的代碼編寫單元測試。執行單元測試,就是爲了證實這段代碼的行爲和咱們指望的一致。
集成測試,也叫組裝測試或聯合測試。在單元測試的基礎上,將全部模塊按照設計要求(如根據結構圖〕組裝成爲子系統或系統,進行集成測試。實踐代表,一些模塊雖然可以單獨地工做,但並不能保證鏈接起來也能正常的工做。程序在某些局部反映不出來的問題,在全局上極可能暴露出來,影響功能的實現。
系統測試是將已經確認的軟件、計算機硬件、外設、網絡等其餘元素結合在一塊兒,進行信息系統的各類組裝測試和確認測試,其目的是經過與系統的需求相比較,發現所開發的系統與用戶需求不符或矛盾的地方,從而提出更加完善的方案。
編碼及簡單測試等
模塊 |
功能 |
說明 |
組織與用戶管理 |
崗位管理 |
|
部門管理 |
|
|
用戶管理 |
|
|
系統權限 |
初始化權限 |
|
分配權限 |
|
|
驗證權限 |
|
|
網上交流--論壇 |
版塊管理 |
|
看帖、發帖、回帖 |
|
|
文章管理 |
|
|
審批流轉(工做流) |
表單模板管理 |
|
審批流程管理 |
|
|
審批流轉 |
|
|
表單查詢 |
|
說明:按列出的順序實現功能。效果以靜態頁面爲準(需求)。
按靜態頁面作
1、JavaEE的三層架構
2、關於分層的說明
1,上面調用下面,即View調用Service,Service調用Dao。
2,層與層之間用接口。除定義的接口外,不能使用其它層的特有類或接口。
3,使用實體做爲DTO(Data 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. |
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等小插件
操做系統 |
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, 命名:使用駝峯命名法。
a) 類、接口:每一個單詞的首字母大寫。例:MyDateConverter
b) 變量、方法:第一個單詞的首字母小寫,其餘單詞的首字母都大寫。例:myDateConverter
c) 常量:所有字母都大寫,單詞之間使用’_’隔開。例,DEFAULT_PAGE_SIZE
2, 使用有意義的名稱,慎用縮寫。
3, 註釋:在代碼中加入適當的註釋:說明步驟,與說明非簡單邏輯。
4, 空行:在代碼中加入適當的空行,就像寫文章時要分段同樣(加強可讀性)。
5, 要格式化代碼、一個java文件中的代碼不要過多、一個方法中的代碼不要過多。
總之,要保證代碼的有效、清晰、簡潔(à可讀)。
1, 有效:這是第一目標,代碼要是能夠解決問題的。
2, 清晰:在有效的前提下,讓代碼結構與思路清晰。
3, 簡潔:代碼與邏輯應儘可能的簡單,不要是給別人講別人都聽不明白。
1, 工程中全部的文件都採用utf-8編碼。全部的頁面都是使用utf-8編碼,這樣方便解決表單內容的亂碼問題。亂碼通常狀況下是亂用編碼產生的。
2, 實體的主鍵屬性的類型使用Long型。
功能 |
知識點 |
預計時間 |
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天 |
1,使用MySql數據庫。
2,建立數據庫時,要注意編碼要支持中文。
3,建表語句以下:
create database itcastoa default character set utf8;
show create database itcastoa;
說明:須要先運行Mysql的配置嚮導,把編碼配爲GBK或UTF8。若是配成UTF8,在mysql命令行客戶端中就有亂碼,因此最好用GBK。
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 |
變爲小寫 |
|
|
1, 設置工程的默認編碼爲UTF-8。
2, 配置JSP的默認編碼爲utf-8
1, 使用Ctrl+Shift+F能夠格式化代碼。
2, 在WindowàPreferencesàJavaàCode StyleàFormatter中能夠設置代碼樣式。 要把Java代碼與註釋的行寬設爲130。(其餘使用默認樣式)
3, 搜索XML Sources,修改xml的行寬爲130。(不考慮打印的狀況)
1, 導入工程時能夠直接選擇一個zip文檔:FileàImportàExisting Projects into Workspace-->Select archive file。
2, 工程更名後,發果發佈到Tomcat下,對應的應用的名稱不必定改變。這個名稱是在MyEclipseà Web中的Web Context-root中配置的。
新建一個Web Project,並設置工程的編碼爲UTF-8。
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包(核心包,依賴包[aop:aspectjrt.jar、aspectjweaver.jar、cglib-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
配置bean的scope
@Scope("prototype")
注入bean
@Resource
整合SSH
Struts2與Spring整合
爲何要整合:讓struts2的Action交給容器管理
Spring與Struts2整合
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
測試是否整合成功
訪問結果看出整合成功了
Hibernate與Spring整合
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裏面調用Service,Service裏面還保存了用戶操做數據庫,三大框架都用了,spring管理事務,Action處理請求,Hibernate處理對象的存儲
說明:
1, 不要引用外面的Jar包,應所有拷貝到工程中。
配置日誌
加入jar包
log4j.properties文件中默認:
若是把warn改成error,啓動的時候若是沒有任何錯誤則沒打印出任何警告信息
日誌有5種級別
debug 調試信息
info 通常信息
warn 警告
error 錯誤
fatal 嚴重錯誤
修改Hibernate.cfg.xml中的數據庫鏈接信息。並在hibernate.cfg.xml中作以下配置:
<!-- 顯示sql語句 -->
<property name="show_sql">true</property>
<!-- 自動更新表結構 -->
<property name="hbm2ddl.auto">update</property>
源碼文件夾
src項目源代碼
conf配置文件
test單元測試
WebRoot文件夾下
scriptJavaScript腳本文件
styleCSS樣式文件
WEB-INF/jspjsp頁面文件(再建立子文件夾分類存放)
使用三層:顯示層(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