OA管理系統總結
1.技術選型:
ssh2框架,struts的版本是2.1.8,spring的版本是4.2.4,hibernate的版本是5.0.7。專案中我們還使用到了jquery、jquery-validate校驗框架、ckeditor富文字編輯器、easyUI等技術。
2.功能劃分:
整個專案的功能包含使用者許可權系統、論壇系統、審批流轉系統3部分組成
3.具體內容:
主頁展示實現
主頁的展示是通過frameset框架把整個頁面劃分成四個區域:
Index.jsp:內部定義frameset,劃分成四個區域
Top.jsp:頂部logo、標題展示、使用者資訊的展示
Left.jsp:左側選單的展示,需要被許可權控制
Right.jsp:右側正文的展示
Bottom.jsp:底部資訊的展示
使用者系統:
使用者系統也是整個系統的核心部分,所有的操作都是圍繞使用者建立起來的,無論什麼系統都是在描述什麼時間、什麼地點、什麼事情,貫穿整條線的一般都和使用者有關係。
使用者系統涉及到六張表的關聯
崗位表(角色表)、部門表、使用者表、使用者角色表、角色許可權表、許可權表
角色表(崗位管理功能):
系統中,不同的使用者所具備的功能是不一樣的,所以我們在軟體系統中需要區分不同的使用者不同的操作,所以引入了許可權控制;要使用許可權一定是先分配許可權,考慮到後期專案的擴充套件許可權的增加,也為了分配許可權的方便,所以我們引入了角色表,一個角色對應一個或多個許可權,可以給使用者疊加或移除角色來實現許可權的增加和移除;所以把許可權的分配功能設計在崗位管理模組
部門表:
區分不同的職能部門,比如一級部門->一級子部門->一級孫子部門
使用者表:
記錄所在部門,具有的角色集合(關聯許可權的集合)
許可權表:
Jsp中所有的超連結(直接訪問action的操作)全部入庫,記錄部分路徑
使用者角色表:
使用者和角色是多對多的關係,通過中間表來儲存使用者和角色之間的關係
角色許可權表:
一組許可權打包就是一個角色,角色和許可權也是多對多的關係,此表為中間表
專案中的技術點:
分配許可權:
查詢所有許可權列表,呈現出許可權選單的父子關係,通過jquery-treeview實現層級的展示,並可以許可權、手動勾選多個提交。實現許可權的分配;關於許可權選單的勾選操作,需要有熟練的jquery操作,比如選擇器,查詢兄弟節點、父級節點、上一個節點、兒子節點、從一組物件中過濾,增加、刪除、修改dom物件的屬性來實現頁面動態的變化。
使用許可權:
許可權就是所有請求action方法的操作,大部分都是存在於jsp中;如果有許可權在jsp頁面就顯示相應的左側選單和右側內容的展示;兩側的連結都可以被許可權控制。實現思路:
正常訪問攔截
使用者正常先登入系統,載入index.jsp頁面,頁面中的left.jsp和right.jsp需要被許可權控制,所以index.jsp中的左側和右側對應的是一個action,在action中檢查當前登入使用者的身份;左側的選單不是每一項都有對應的連結(比如一級選單,點選是開啟二級選單),查詢到所有許可權假設為下圖的all,再查詢我的許可權選單列表,下圖的my,all<=all的。
選單的展示分兩步,1、一級選單的展示(沒有url)2、二級選單的展示;登入成功查詢所有選單資訊(包含一級、二級)放置到application域中;在left.jsp直接遍歷選單,每個選單顯示之前判斷自己的許可權列表是否有這個許可權
位址列訪問或模擬工具請求攔截
攔截器攔截所有action請求,檢查是否有許可權,如果有直接放行、未登入直接跳轉到登入頁面,登入沒許可權顯示無權訪問頁面。
右側增刪改查操作許可權問題,通過自定義標籤完成,因為自定義標籤最終也會被翻譯成html標籤,所以可以通過攔截這個翻譯的過程,自定義標籤被解析的過程中判斷這個操作是否有許可權執行。有許可權就顯示這個標籤,沒許可權直接跳過標籤翻譯的過程,忽略即可。
論壇系統:
論壇功能相對比較簡單,涉及到版塊、主貼、回帖、文章四個概念
版塊:帖子管理的大分類
主貼:板塊下發的帖
回帖:主貼下評論
文章:主貼+回帖
功能:
版塊增刪改查
主貼增刪改查
發帖的內容應該是包含文字和圖片的,所以這裡需要用到富文字編輯器來編輯發帖正文,它的原理是把編輯的內容轉換成html標籤的形式,直接入庫即可,回顯直接讀取出來放置到jsp頁面就能正常展示。發帖需要修改板塊中的帖子數量,最後回帖時間等內容
版塊下的主貼展示需要安裝一定的規則來展示,主要是考察sql的寫法,比如置頂帖在最前面->精華帖和普通帖混排;這裡主要使用CASE THEN給所有精華帖虛擬列進行降序排列。
回帖
回帖需要修改文章數、回覆數等相關資訊。
技術點:
樓層的展示:通過迭代標籤的state屬性可以實現樓層的展示,注意,回帖內容可能被管理員刪除(偽刪除,只標識這行記錄被刪除,顯示的時候判斷標識狀態),是不應該出現跳樓的情況的,所以發現被刪除,在頁面上展示灰色文字,此帖被管理員刪除提示即可。
分頁功能:
分頁功能就是在jsp頁面上顯示分頁相關的快捷操作圖示,比如上一頁、下一頁、跳轉到指定頁等操作;這裡需要很多變數的顯示,我們是使用pageBean物件在後臺封裝資料,所有的值全部計算好再傳遞到頁面直接顯示。
技術點:
頁碼的展示:通過演算法確定jsp頁面應該顯示哪幾個頁碼,分頁碼不足10頁和大於10頁的情況,還有其他情況。
審批流轉
系統中涉及到公文流轉,比如請假、加薪、報銷,這些都是公司常見的辦公流程,這裡主要是通過jbpm定義工作流的方式來實現;jbpm繪製流程圖指定每個步驟有那個使用者來完成具體的操作。在這個模組中學習到提交帶檔案的表單(檔案上傳),檔案下載功能
審批流程管理:
這裡主要是工作流文件的提交入庫
表單模版管理
定義請假、加薪、報銷等操作的表單,和對應的流程定義繫結;定義好之後就可以在起草申請頁面看到相應的功能
起草申請
使用者選擇相應的模版進行請假、加薪、報銷等操作,起草完申通過jbpm引擎載入工作流資訊,通過登入的使用者資訊直接提交task到下一個流程
專案總結
一個web專案不外乎就是增刪改查操作,所以紮實的sql基礎還是非常重要的;不管使用什麼持久層框架,將來執行都需要轉換成sql語句的形式傳遞到資料庫,所以我對持久層的理解就是“拼接sql”的框架。
增加:
需要提交表單,直接儲存資料回到列表頁面即可
修改:
點選修改超連結一定會傳遞id到後臺查詢資料,把查詢結果傳遞到修改頁面進行回顯,同時需要在修改頁面設定一個隱藏域來放置修改的這條資料的id值,在提交修改的時候使用id為條件更新資料。
如果修改的過程中涉及到關聯資料的回顯資訊,也需要傳遞到修改頁面,常見的回顯要求有【radio的回顯】【checkbox的回顯】【select下拉框的回顯】【input的回顯】,在回顯的過程中。後面會學習到jquery非同步請求回顯資料
查詢:
在專案中有各種查詢操作
1.列表的查詢,一般是查詢所有
select * from table
2.列表查詢帶多條件
select * from table where 1=1 and 條件1=值1 and 條件2=值2…
3.列表查詢帶分頁
select * from table limit m,n
4.根據部分id查詢部分資料
select * from table where id in(1,2,3,4)
5.根據id查詢一條記錄
Select * from table where id=?
6.統計查詢數量
Select count(*) from table;
7.查詢的過程中去掉重複的記錄distinct,比如查詢所有的許可權url的時候,就有多個選單是使用的同一個許可權url,我們在查詢的時候就可以使用它去掉重複的資料
專案收穫:
F12除錯技巧:檢視network查詢請求提交的具體引數,檢視request請求頭和respones響應頭資訊。
加深了對介面和抽象類的理解:隨著專案的模組功能遞增,抽象父類是簡化開發的必備技巧,可以封裝BaseAction、BaseDao、BaseService等具體的工具類
常量類:系統中會用到大量的常量,可以把它們都抽取到一個類中定義為常量,下次使用的時候直接通過常量獲取需要的資料,防止字串寫錯。
密碼問題:註冊的時候應該把密碼通過MD5加密,把密文儲存到資料庫,登入的時候獲取到密碼再通過MD5加密和資料庫的密文比較確定是否登入成功;防止資料庫被入侵賬號安全的問題
理解攔截器:系統的安全性是每個程式設計師的責任,我們的action方法都是用來處理我們前端請求的,一般我們都是現在jsp頁面的超連結中的,這些請求我們都能掌控;但是一個請求的核心不外乎就是傳送一個GET/POST請求,所以這樣就會有問題,在位址列直接輸入action的地址也是可以直接訪問的,通過http模擬工具(HttpTools)也是可以模擬出GET和POST的請求的,而且網路上傳遞的資料包都是可以被抓取和看到的;我們要避免不法分子通過以上的方式故意搞事情,比如非系統使用者攔截到了我某個核心資料塊的刪除連結,他通過模擬GET、POST方式刪除我的資料,這個我們是不允許出現的;所以可以使用Interceptor攔截所有的Action請求,判斷此人有沒有登入,如果登入此人的許可權是否具備刪除這條資料的能力;即使它有刪除資料的權利,為了保全程式的安全,我們也對每個操作寫入日誌,在出現重大問題的時候可以穩妥的渡過難關。
遞迴的場景:在專案中,有大量的操作是自關聯查詢,比如部門的層級、許可權的層級
Eclipse的問題:eclipse在開發過程中,有時候修改內容不一定會同步到tomcat的釋出目錄中去(比如新增jar包),這個目錄可以在tomcat啟動的時候列印,如果沒修改過一般在工作空間中。這時候需要到釋出目錄中去對比。
瀏覽器快取:瀏覽器一般會自動儲存靜態資源,比如css和js檔案,修改過專案中的靜態資源,一般需要清空瀏覽器的快取;F12看到304表示資源已經被快取。