【摘 要】隨著計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,辦公自動(dòng)化已經(jīng)深入到我們工作生活的方法面面,公文管理系統(tǒng)應(yīng)運(yùn)而生。由于無(wú)紙化的操作,公文管理系統(tǒng)大大節(jié)約了公文流轉(zhuǎn)過(guò)程中各個(gè)環(huán)節(jié)的耗時(shí),提高了使用單位和部門(mén)的工作效率。本文使用mvc編程模式,運(yùn)用struts、hibernate、spring三大框架來(lái)實(shí)現(xiàn)公文管理系統(tǒng)中的發(fā)文管理、收文管理、審核管理、個(gè)人信息管理、用戶(hù)信息管理等主要功能。
【關(guān)鍵詞】公文管理;MVC;struts;hibernate;spring
一、引言
辦公自動(dòng)化的產(chǎn)生和發(fā)展催生了許多辦公自動(dòng)化軟件產(chǎn)品,針對(duì)于辦公自動(dòng)化的核心——公文管理的軟件產(chǎn)品也有各種各樣的實(shí)現(xiàn)方式,而其基本功能要求上大致相同,不同的實(shí)現(xiàn)方式有其不同的優(yōu)點(diǎn)。本文采用MVC模式,運(yùn)用J2EE開(kāi)發(fā)中常使用的三大框架struts、hibernate、spring來(lái)實(shí)現(xiàn)公文管理系統(tǒng)功能,提高了系統(tǒng)的開(kāi)發(fā)效率與可重用性,降低的代碼冗余度,代碼具有更好的封裝性,MVC模式中各層之間并不透明,增加了代碼的安全性,各層之間耦合度低,當(dāng)系統(tǒng)需要增減功能時(shí),不用修改已經(jīng)寫(xiě)好的部分的代碼,直接增加該功能的實(shí)現(xiàn)即可,代碼的可擴(kuò)展性良好。
二、需求分析
(一)公文管理系統(tǒng)簡(jiǎn)介
本文實(shí)現(xiàn)公文管理系統(tǒng)的一般功能,公文管理系統(tǒng)的功能是進(jìn)行公文的統(tǒng)一管理,用戶(hù)登錄系統(tǒng)后,可以進(jìn)行發(fā)文操作,具有權(quán)限的用戶(hù)收取這篇文章,對(duì)文章進(jìn)行審核,通過(guò)審核的文章將會(huì)在發(fā)送該公文的用戶(hù)系統(tǒng)的被審公文中顯示,同時(shí)用戶(hù)可以下載公文中包含的附件。
(二)功能分析
1、用戶(hù)信息管理。對(duì)用戶(hù)及用戶(hù)信息的管理即是對(duì)用戶(hù)資料檔案、用戶(hù)的分類(lèi)、用戶(hù)的優(yōu)先級(jí)別等信息的管理,在公文管理系統(tǒng)中,發(fā)文與收文操作都與用戶(hù)信息有關(guān)聯(lián)。
2、個(gè)人信息管理。個(gè)人信息管理即用戶(hù)對(duì)自己信息的維護(hù),實(shí)現(xiàn)修改密碼和用戶(hù)名等,管理員用戶(hù)和普通可以自定義自己的用戶(hù)名及密碼,但是root用戶(hù)不能修改自己信息。
3、公文管理
公文管理包括兩個(gè)子功能:收文管理和發(fā)文管理
發(fā)文管理
發(fā)文管理的主要功能需求如下:
編輯公文:用戶(hù)可以通過(guò)一般的輸入方式錄入公文,也可以通過(guò)上傳文件的方式實(shí)現(xiàn)公文的錄入,普通用戶(hù)可以修改自己發(fā)布的公文,被選作公文接收者的用戶(hù)可以修改自己發(fā)布的公文,審核其收到的公文[2]
公文查詢(xún):系統(tǒng)可實(shí)現(xiàn)對(duì)全部公文按創(chuàng)建公文用戶(hù)查詢(xún),并將查詢(xún)結(jié)果按時(shí)間排序[3]
公文導(dǎo)出:系統(tǒng)實(shí)現(xiàn)了對(duì)公文進(jìn)行附件上傳錄入的模式,同時(shí)也實(shí)現(xiàn)了公文附件下載,用戶(hù)可以通過(guò)將公文附件下載保存到本地機(jī)進(jìn)行查看,打印等操作[3]
(2) 收文管理
收文管理的主要功需求能如下:
收文登記:自動(dòng)完成收文
公文查詢(xún):對(duì)全部公文按條件查詢(xún),并將查詢(xún)結(jié)果按時(shí)間排序[3]
公文導(dǎo)出:可以將公文下載到本地機(jī)上進(jìn)行修改,查看等操作[3]
公文辦理:授權(quán)管理員可對(duì)自己收到的文件進(jìn)行審批工作
(三)系統(tǒng)活動(dòng)圖
三、MVC模式與主要實(shí)現(xiàn)技術(shù)
(一) MVC模式
MVC是一種使用MVC(Model View Controller 模型-視圖-控制器)設(shè)計(jì)創(chuàng)建Web應(yīng)用程序的模式[1]。
Model(模型)表示應(yīng)用程序核心,是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分,通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。
View(視圖)顯示數(shù)據(jù),是應(yīng)用程序中處理數(shù)據(jù)顯示的部分,通常是依據(jù)模型數(shù)據(jù)創(chuàng)建的。
Controller(控制器)處理輸入即寫(xiě)入數(shù)據(jù)庫(kù)記錄,是應(yīng)用程序中處理用戶(hù)交互的部分。通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶(hù)輸入,并向模型發(fā)送數(shù)據(jù)。
MVC分層有助于管理復(fù)雜的應(yīng)用程序,可以在一個(gè)時(shí)間內(nèi)專(zhuān)門(mén)關(guān)注一個(gè)方面。同時(shí)也讓?xiě)?yīng)用程序的測(cè)試更加容易。MVC分層同時(shí)也簡(jiǎn)化了分組開(kāi)發(fā)。不同的開(kāi)發(fā)人員可同時(shí)開(kāi)發(fā)視圖、控制器邏輯和業(yè)務(wù)邏輯。
(二)主要實(shí)現(xiàn)技術(shù)
1、JSP技術(shù)
Java Server Pages(JSP)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)HTML混合編碼的技術(shù)。JSP頁(yè)面由HTML代碼和嵌入其中的JAVA代碼所組成。服務(wù)器在頁(yè)面被客戶(hù)端所請(qǐng)求以后對(duì)這些JAVA代碼進(jìn)行處理,然后將生成的HTML頁(yè)面返回給客戶(hù)端的瀏覽器。
2、Struts
Struts是Apache基金會(huì)的一個(gè)開(kāi)源項(xiàng)目,是應(yīng)有最廣泛的Java Web開(kāi)發(fā)框架。Struts提供通用的MVC體系結(jié)構(gòu),把傳統(tǒng)的Web開(kāi)發(fā)(Servlet+JSP)分成Model(模型層)、View(視圖層)、Control(控制層)三部分,使設(shè)計(jì)思路更加清晰。其中Model層專(zhuān)注于業(yè)務(wù)邏輯(即數(shù)據(jù)的存儲(chǔ)、處理等),View專(zhuān)注于數(shù)據(jù)在瀏覽器端的顯示,Control層連接Model層與View層[4]。Struts有著詳細(xì)的文檔、廣泛的支持。其作用是接收用戶(hù)請(qǐng)求,調(diào)用業(yè)務(wù)邏輯代碼,轉(zhuǎn)發(fā)到正確的頁(yè)面。在struts中,所有的控制邏輯都是利用struts-config.xml文件來(lái)進(jìn)行配置的。
3、Spring
Spring是一個(gè)輕量級(jí)MVC框架,不需要特殊的容器支持,不依賴(lài)于特定的規(guī)范如J2EE規(guī)范等, Spring不提供某種功能,它只是將所有的組件部署到Spring中,管理、維護(hù)、執(zhí)行它們,因此Spring也被稱(chēng)為輕量級(jí)“容器”。Spring最重要的思想是Inversion of Control(控制反轉(zhuǎn)或反向控制),或者稱(chēng)為Dependency Injection(依賴(lài)注入),負(fù)責(zé)根據(jù)配置信息,創(chuàng)建不同的數(shù)據(jù)訪(fǎng)問(wèn)層及業(yè)務(wù)邏輯層的實(shí)例,并將其注入到業(yè)務(wù)邏輯層與表現(xiàn)層中,從而實(shí)現(xiàn)三個(gè)層次的解耦。
4、Hibernate
Hibernate是一種ORM框架,使用簡(jiǎn)單、功能強(qiáng)大、對(duì)所有的數(shù)據(jù)庫(kù)都有良好的支持。Hibernate能直接操作POJO,并且是一種輕量級(jí)的框架,不依賴(lài)于任何容器。在Hibernate中,Hibernate充當(dāng)了Dao層,根據(jù)POJO與實(shí)體類(lèi)的映射配置自動(dòng)生成相應(yīng)的SQL語(yǔ)句。從控制臺(tái)輸出可以看到Hibernate生成的SQL語(yǔ)句。當(dāng)實(shí)體類(lèi)發(fā)生變化時(shí),只需修改實(shí)體類(lèi)配置。
四、公文管理系統(tǒng)的實(shí)現(xiàn)
(一)視圖層的實(shí)現(xiàn)
視圖層采用實(shí)現(xiàn)了MVC模式的struts框架來(lái)實(shí)現(xiàn)
1、Model層實(shí)現(xiàn):作用是向Action對(duì)象提供數(shù)據(jù)
package com.qlzeng.documentManager.model;
public class User {
private int userId;
private int level;
… …
public int getLevel() {
return level; }
public void setLevel(int level) {
this.level = level;}
public int getUserId() {
return userId;}
… …
}
2、View層實(shí)現(xiàn):即頁(yè)面設(shè)計(jì),實(shí)現(xiàn)主要包括 jsp 文件、css 文件
<%@ page language=\"java\" contentType=\"text/html; charset=GB18030\" pageEncoding=\"GB18030\"%>
<%@include file=\"/common/common.jsp\" %>
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
……
3、Controller層實(shí)現(xiàn)
(1) 編寫(xiě)Action類(lèi)實(shí)現(xiàn)對(duì)Jsp頁(yè)面代碼的隱藏
public ActionForward modify(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {UserForm uf = (UserForm)form;
User user = manager4User.findUserById(uf.getUserId());
if (uf.getUsername() != 1 uf.getPassword() != 1 uf.getPassword() != \"\" uf.getUsername() != 1) {
if(uf.getUserId() != 1) {
BeanUtils.copyProperties(user, uf);
manager4User.modifyUser(user);
}
}
request.getSession().setAttribute(\"user\", user);
return mapping.findForward(\"user_modify_success\");
}
(2) 通過(guò)Struts-config.xml文件控制頁(yè)面跳轉(zhuǎn)
name=\"userForm\" scope=\"request\" parameter=\"method\" >
(二)控制器層的實(shí)現(xiàn)
控制器層也稱(chēng)作業(yè)務(wù)邏輯層,通過(guò)Spring框架來(lái)實(shí)現(xiàn),通過(guò)對(duì)Spring的配置,實(shí)現(xiàn)Spring、struts和hibernate的集成。并且提供實(shí)現(xiàn)業(yè)務(wù)邏輯的接口,便于視圖層訪(fǎng)問(wèn)模型層。
package com.qlzeng.documentManager.manager;
import ……
public interface Manager4User {
public User findUserById(int userId);
public PagerModel searchUsers();
public void addUser(User user);
public void deleteUser(int userId);
public void modifyUser(User user);
public User login(String username, String password, HttpServletRequest request);
}
(三)模型層的實(shí)現(xiàn)
模型層也叫數(shù)據(jù)訪(fǎng)問(wèn)層,通過(guò)hibernate框架來(lái)實(shí)現(xiàn),其功能有兩個(gè),其一為配置數(shù)據(jù)庫(kù)服務(wù)器類(lèi)型,實(shí)現(xiàn)與數(shù)據(jù)庫(kù)連接,其二為映射實(shí)體類(lèi)與數(shù)據(jù)表,持久化對(duì)象。
五、結(jié)語(yǔ)
公文管理系統(tǒng)被廣泛運(yùn)用于各種企事業(yè)單位中,本文提供了一種基于MVC模式的公文管理系統(tǒng)的實(shí)現(xiàn)方式,使得一個(gè)實(shí)現(xiàn)了基本公文管理功能的系統(tǒng)可以在加入不同使用部門(mén)所特有的業(yè)務(wù)邏輯功能后適用于不同的單位,具有較高的通用性。
參考文獻(xiàn):
[1]孫福振,李艷,李業(yè)剛,J2EE平臺(tái)上MVC設(shè)計(jì)模式的研究與實(shí)現(xiàn)[J],山東理工大學(xué)學(xué)報(bào),2006, 20(2),P50-51.
[2]劉先偉,基于.NET的政府協(xié)同辦公自動(dòng)化系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D],電子科技大學(xué),2010.
[3]謝瑤,湖南人文科技學(xué)院公文流轉(zhuǎn)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D],山東大學(xué),2011.
[4]王經(jīng)緯,船舶票務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D],大連海事大學(xué),2011.
作者簡(jiǎn)介:曾秋麗(1990.9--)貴州大學(xué),電子信息學(xué)院 ,電子與通信工程專(zhuān)業(yè)。