劉繼華,郝芳芳,武桂芬
(呂梁學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,山西 離石 033001)
·計(jì)算機(jī)科學(xué)研究·
基于J2EE的大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
劉繼華,郝芳芳,武桂芬
(呂梁學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,山西 離石 033001)
《大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目管理系統(tǒng)》是在校大學(xué)生申報(bào)大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目的信息管理系統(tǒng),該系統(tǒng)采用B/S架構(gòu),MVC模式,方便大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目相關(guān)資料的提交以及主管部門對(duì)這些資料的信息化審核、管理,對(duì)于當(dāng)前高校對(duì)大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目管理具有較強(qiáng)的實(shí)際意義.
J2EE;項(xiàng)目管理;創(chuàng)新創(chuàng)業(yè)
大學(xué)生創(chuàng)新性實(shí)驗(yàn)項(xiàng)目是在校大學(xué)生本人或組織團(tuán)隊(duì),在導(dǎo)師的輔導(dǎo)下,自己選題、自主組織實(shí)施并完成數(shù)據(jù)分析處理和編寫總結(jié)等工作,該項(xiàng)目旨在培養(yǎng)學(xué)生問題提出、問題分析和解決的興趣和能力.遵循“公開立項(xiàng)、自由申報(bào)、擇優(yōu)資助、規(guī)范管理”的規(guī)則,著重資助思路新穎、目標(biāo)明確、具有創(chuàng)新性和探索性、研究方案及技術(shù)路線可行、實(shí)施條件可靠的項(xiàng)目[1].就目前該項(xiàng)目的實(shí)施情況分析,國(guó)內(nèi)大多數(shù)院校在實(shí)施此計(jì)劃時(shí),采用傳統(tǒng)的自上而下的消息傳遞與紙質(zhì)文件的逐級(jí)遞交模式.這種模式中,從項(xiàng)目前期的項(xiàng)目立項(xiàng)到后期的結(jié)題驗(yàn)收,中間需要遞交的紙質(zhì)文件很多,執(zhí)行周期長(zhǎng),效率低.這種文件管理模式不便于項(xiàng)目資料的查詢、存儲(chǔ)、管理,因此,利用互聯(lián)網(wǎng)的交互式管理來(lái)代替以前的以逐級(jí)式呈遞的繁瑣工作流程,建立一套高效的創(chuàng)新創(chuàng)業(yè)實(shí)驗(yàn)計(jì)劃項(xiàng)目管理系統(tǒng)是十分必要的.
架構(gòu)在一定程度上可以理解為替應(yīng)用程序之間共享數(shù)據(jù)提供可重用組件的一種便捷封裝機(jī)制,是一個(gè)應(yīng)用程序的半成品,使用框架技術(shù)能夠提高應(yīng)用程序的開發(fā)效率,本系統(tǒng)的實(shí)現(xiàn)采用基于java web 三層架構(gòu).[2]系統(tǒng)架構(gòu)的本質(zhì)還是傳統(tǒng)的mvc模式,本系統(tǒng)在實(shí)現(xiàn)過(guò)程中對(duì)傳統(tǒng)的mvc模式進(jìn)行了封裝和改進(jìn),改進(jìn)之后使得系統(tǒng)層與層之間耦合度更加低,層與層之間的分工更加明確,下面詳細(xì)闡述各層的功能.
表現(xiàn)層:主要體現(xiàn)在前端的jsp頁(yè)面,jsp頁(yè)面用來(lái)渲染界面,頁(yè)面通過(guò)瀏覽器接收客戶端發(fā)起的各種請(qǐng)求并傳遞給后端控制器servlet,servlet處理該請(qǐng)求數(shù)據(jù),并進(jìn)行數(shù)據(jù)封裝、處理業(yè)務(wù)、響應(yīng)參數(shù)、跳轉(zhuǎn)頁(yè)面.jsp與servlet之間傳遞數(shù)據(jù)用的是jsp技術(shù)的域?qū)ο?request、session、application)傳遞.
業(yè)務(wù)層:業(yè)務(wù)層是表現(xiàn)層和持久化層的一個(gè)中介,它既可以接收servlet中的請(qǐng)求數(shù)據(jù)并傳遞給數(shù)據(jù)持久層dao,也可以從持久層中查詢的數(shù)據(jù)傳遞給servlet,它在中間負(fù)責(zé)請(qǐng)求數(shù)據(jù)的業(yè)務(wù)處理.
持久化層:持久化層接收從業(yè)務(wù)層傳來(lái)的數(shù)據(jù),可以把這些數(shù)據(jù)持久化到硬盤并進(jìn)行分類存儲(chǔ),也可以根據(jù)條件讀取磁盤中的數(shù)據(jù)傳遞到業(yè)務(wù)層.
2.1 系統(tǒng)流程
系統(tǒng)始終圍繞呂梁學(xué)院大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目的線下執(zhí)行過(guò)程而設(shè)計(jì),主要分為學(xué)生用戶的注冊(cè),學(xué)生用戶的登錄,編輯注冊(cè)信息,審核個(gè)人信息,編輯項(xiàng)目信息,查看項(xiàng)目通知,檢索項(xiàng)目,上傳項(xiàng)目附件,項(xiàng)目查詢,博客求助,優(yōu)秀作品瀏覽,審核專家登錄,審核學(xué)生信息,審核項(xiàng)目信息,審核狀態(tài)通知,超級(jí)管理員編輯,指定,修改,刪除審核專家,超級(jí)管理員審核學(xué)生信息,超級(jí)管理員審核項(xiàng)目信息,超級(jí)管理員通知項(xiàng)目審核狀態(tài)等.
學(xué)生用戶管理:學(xué)生必須注冊(cè)成為系統(tǒng)的學(xué)生用戶后才能進(jìn)行后續(xù)操作.學(xué)生利用手機(jī)號(hào)、密碼進(jìn)行登陸后可以進(jìn)行查看和修改個(gè)人信息、查看項(xiàng)目申請(qǐng)流程,申請(qǐng)?zhí)峤豁?xiàng)目信息,上傳項(xiàng)目文件,查詢項(xiàng)目審核狀態(tài),查看項(xiàng)目審核通知信息等[3].
審核專家用戶管理:審核專家可以查看學(xué)生信息,查看學(xué)生提交的項(xiàng)目申請(qǐng)及項(xiàng)目相關(guān)的附件,審核項(xiàng)目,通知項(xiàng)目負(fù)責(zé)人審核信息,并提出相關(guān)意見給項(xiàng)目負(fù)責(zé)人等.
系統(tǒng)管理員管理:數(shù)據(jù)庫(kù)管理員指定系統(tǒng)管理員的重要權(quán)限,該角色的主要功能是查看和修改審核專家信息、查閱學(xué)生提交的項(xiàng)目申請(qǐng)及項(xiàng)目相關(guān)的附件,審核項(xiàng)目,通知項(xiàng)目負(fù)責(zé)人審核信息,針對(duì)項(xiàng)目問題向項(xiàng)目負(fù)責(zé)人提出合理的修改建議等.
系統(tǒng)的數(shù)據(jù)流圖如下:(見圖1)
圖1 數(shù)據(jù)流圖
2.2 系統(tǒng)總體架構(gòu)
整個(gè)系統(tǒng)采用java web[4]三層架構(gòu),持久層,業(yè)務(wù)邏輯層,網(wǎng)絡(luò)層,持久層用來(lái)持久化數(shù)據(jù)記錄,如圖:業(yè)務(wù)邏輯層用來(lái)處理系統(tǒng)相關(guān)的一些業(yè)務(wù),網(wǎng)絡(luò)層用來(lái)處理頁(yè)面請(qǐng)求.由html5,css3,jquery,ajax等流行的web前端開發(fā)技術(shù)[5]開發(fā)的jsp頁(yè)面負(fù)責(zé)系統(tǒng)請(qǐng)求的發(fā)起與響應(yīng)內(nèi)容的展示.頁(yè)面請(qǐng)求的發(fā)起主要由html 標(biāo)記語(yǔ)言配合jstl標(biāo)簽通過(guò)form表單,超鏈接發(fā)起,還有少數(shù)功能使用ajax異步和同步技術(shù)提交請(qǐng)求.當(dāng)請(qǐng)求提交后,網(wǎng)絡(luò)層的控制器調(diào)度業(yè)務(wù)邏輯層的方法處理請(qǐng)求業(yè)務(wù),相關(guān)業(yè)務(wù)所對(duì)應(yīng)的數(shù)據(jù)將在持久層與數(shù)據(jù)庫(kù)交互時(shí)得到[6].
總體架構(gòu)如下圖:(見圖2)
圖2 系統(tǒng)架構(gòu)圖
2.3 創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目流程階段
本團(tuán)隊(duì)人員在調(diào)研,分析數(shù)據(jù),抽象大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃各個(gè)角色的執(zhí)行流程之后,將各個(gè)階段的流程由線下模式發(fā)展為網(wǎng)絡(luò)在線操作.這其中主要分為學(xué)生申請(qǐng)項(xiàng)目,提交項(xiàng)目,查詢項(xiàng)目信息,審核專家查看項(xiàng)目申請(qǐng)以及各個(gè)階段相關(guān)材料,審核項(xiàng)目,管理項(xiàng)目,檢索項(xiàng)目,系統(tǒng)管理員管理審核專家,核實(shí)學(xué)生身份,審核專家身份等三大模塊17項(xiàng)功能.
系統(tǒng)各模塊的業(yè)務(wù)流程如圖:(如圖3)
圖3 業(yè)務(wù)流程圖
2.4 系統(tǒng)實(shí)現(xiàn)
學(xué)生用戶登錄成功后進(jìn)入學(xué)生用戶系統(tǒng),在此系統(tǒng)中學(xué)生可以利用編輯這一功能選項(xiàng)來(lái)修改個(gè)人注冊(cè)的非學(xué)籍信息,同時(shí)也可以查看項(xiàng)目申請(qǐng)流程,編寫項(xiàng)目申請(qǐng).在編寫完項(xiàng)目申請(qǐng)后學(xué)生用戶可以編輯修改項(xiàng)目申請(qǐng),最后將確定修改無(wú)誤后的項(xiàng)目申請(qǐng)?zhí)峤?創(chuàng)新創(chuàng)業(yè)項(xiàng)目訓(xùn)練計(jì)劃過(guò)程中各階段的文件也可以在項(xiàng)目信息中上傳.學(xué)生可以通過(guò)本系統(tǒng)查詢自己申報(bào)過(guò)的各個(gè)項(xiàng)目申報(bào)情況,還有處于中期階段的項(xiàng)目以及處于結(jié)題階段的項(xiàng)目情況.在項(xiàng)目審核的各個(gè)階段時(shí)間內(nèi),學(xué)生用戶可以在本系統(tǒng)中查詢項(xiàng)目的通過(guò)情況.當(dāng)學(xué)生用戶有意向申報(bào)創(chuàng)新創(chuàng)業(yè)項(xiàng)目但沒有任何思路或者需要?jiǎng)e人的意見的時(shí)候,他可以利用該系統(tǒng)進(jìn)行網(wǎng)絡(luò)在線求助,也可以瀏覽往年優(yōu)秀的創(chuàng)新創(chuàng)業(yè)項(xiàng)目,從中吸取經(jīng)驗(yàn).
審核專家進(jìn)入系統(tǒng)后可以查詢學(xué)生用戶提交的項(xiàng)目申請(qǐng),中期進(jìn)展階段,結(jié)題階段的項(xiàng)目記錄,閱讀相關(guān)的項(xiàng)目附件,通過(guò)項(xiàng)目附件以及線下和各位審核專家的商議決定項(xiàng)目通過(guò)與否,在審核結(jié)束后,給項(xiàng)目審核通過(guò)的學(xué)生發(fā)消息通知.
本系統(tǒng)利用java實(shí)現(xiàn)了項(xiàng)目一期的開發(fā),針對(duì)系統(tǒng)特點(diǎn)在權(quán)限控制方面采用RBAC來(lái)控制各角色的權(quán)限,通過(guò)各角色的權(quán)限控制其功能.開發(fā)過(guò)程中具體的權(quán)限控制利用java web中filter組件實(shí)現(xiàn),訪問網(wǎng)站的所有請(qǐng)求都要通過(guò)filter組件詳細(xì)過(guò)濾,該組件在過(guò)濾到請(qǐng)求之后從session中取出用戶的個(gè)人信息,通過(guò)個(gè)人信息的類型來(lái)識(shí)別用戶[7].如果要訪問需要敏感信息例如只有超級(jí)管理員可以執(zhí)行的操作,同樣也需要通過(guò)filter組件來(lái)實(shí)現(xiàn),如果用戶沒有登錄要訪問網(wǎng)站信息,同樣也會(huì)在filter組件中過(guò)濾請(qǐng)求,filter組件識(shí)別到該用戶沒有登錄,就會(huì)采取一定措施攔截該請(qǐng)求.具體實(shí)現(xiàn)如下(部分代碼):
public class AdminFilter implements Filter {
public void destroy() {
System.out.println("====admin過(guò)濾器停止中====");
}
public void doFilter(ServletRequest arg0,ServletResponse arg1,
FilterChain arg2) throws IOException,ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
response.setContentType("html/text;charset=utf-8");//設(shè)置編碼
User user=(User) request.getSession().getAttribute("user");
if(user==null||!user.getUserType().equals("2")){
request.getRequestDispatcher("/default3.jsp").forward(request,
response);
}else{
}
}
public void init(FilterConfig arg0) throws ServletException {
System.out.println("====過(guò)濾器啟動(dòng)中====");
}
}
public class AddFilter implements Filter {
部分應(yīng)用型學(xué)科如土木工程、機(jī)械與動(dòng)力工程、安全科學(xué)與工程等的學(xué)科建設(shè)緊密圍繞行業(yè)發(fā)展與應(yīng)用,因此,用戶提出國(guó)內(nèi)國(guó)際專利文獻(xiàn)與標(biāo)準(zhǔn)文獻(xiàn)的使用需求,并希望獲得原始全文。
public void destroy() {
System.out.println("====add過(guò)濾器停止中====");
}
public void doFilter(ServletRequest arg0,ServletResponse arg1,
FilterChain arg2) throws IOException,ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
response.setContentType("html/text;charset=utf-8");//設(shè)置編碼
User user=(User) request.getSession().getAttribute("user");
if(user==null){
request.getRequestDispatcher("/default2.jsp").forward(request,
response);
}else if(!(user.getUserType().equals("2"))){
request.getRequestDispatcher("/default2.jsp").forward(request,
response);
}else{
arg2.doFilter(request,response);
}
}
public void init(FilterConfig arg0) throws ServletException {
System.out.println("====過(guò)濾器啟動(dòng)中====");
}
}
在數(shù)據(jù)持久層化方面,主要采用了c3p0數(shù)據(jù)庫(kù)連接池來(lái)提高系統(tǒng)的性能,降低系統(tǒng)和各數(shù)據(jù)庫(kù)的耦合,通過(guò)封裝,抽象jdbc的一些基本操作來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)事務(wù)控制,保持?jǐn)?shù)據(jù)的ACID
特性[8],具體實(shí)現(xiàn)核心代碼如下:
public class JdbcUtils {
private static DataSource ds = new ComboPooledDataSource();
private static ThreadLocal
public static DataSource getDataSource() {
return ds;
}
public static Connection getConnection() throws SQLException {
Connection con = tl.get();//獲取當(dāng)前線程的事務(wù)連接
if(con != null) return con;
return ds.getConnection();
}
public static void beginTransaction() throws SQLException {
Connection con = tl.get();//獲取當(dāng)前線程的事務(wù)連接
if(con != null) throw new SQLException("已經(jīng)開啟了事務(wù),不能重復(fù)開啟!");
con = ds.getConnection();//給con賦值,表示開啟了事務(wù)
con.setAutoCommit(false);//設(shè)置為手動(dòng)提交
tl.set(con);//把當(dāng)前事務(wù)連接放到tl中
}
public static void commitTransaction() throws SQLException {
Connection con = tl.get();//獲取當(dāng)前線程的事務(wù)連接
if(con == null) throw new SQLException("沒有事務(wù)不能提交!");
conmmit();//提交事務(wù)
con.close();//關(guān)閉連接
con = null;//表示事務(wù)結(jié)束!
tl.remove();
}
/**
*回滾事務(wù)
* @throwsSQLException
*/
public static void rollbackTransaction() throws SQLException {
Connection con = tl.get();//獲取當(dāng)前線程的事務(wù)連接
if(con == null) throw new SQLException("沒有事務(wù)不能回滾!");
con.rollback();
con.close();
con = null;
tl.remove();
}
public static void releaseConnection(Connection connection) throws SQLException {
Connection con = tl.get();//獲取當(dāng)前線程的事務(wù)連接
if(connection != con) {//如果參數(shù)連接,與當(dāng)前事務(wù)連接不同,說(shuō)明這個(gè)連接不是當(dāng)前事務(wù),可以關(guān)閉!
if(connection != null &&!connection.isClosed()) {//如果參數(shù)連接沒有關(guān)閉,關(guān)閉之!
connection.close();
}
}
}
}……
呂梁學(xué)院大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目管理系統(tǒng)由當(dāng)下流行的java web[9]三層架構(gòu),JavaEE技術(shù)開發(fā)[10],綜合呂梁學(xué)院大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目訓(xùn)練項(xiàng)目實(shí)施流程,通過(guò)拜訪審核專家教師,調(diào)研往年參加創(chuàng)新創(chuàng)業(yè)訓(xùn)練項(xiàng)目的學(xué)生,進(jìn)行了具體詳細(xì)的分析設(shè)計(jì),解決了傳統(tǒng)逐層紙質(zhì)文件提交,逐級(jí)消息通知效率低等問題.但是,在經(jīng)過(guò)無(wú)數(shù)次的測(cè)試后發(fā)現(xiàn),該系統(tǒng)仍有許多不合理的地方有待改進(jìn).比如:系統(tǒng)在提交項(xiàng)目申報(bào)提交時(shí),系統(tǒng)每次提交都得確認(rèn)項(xiàng)目信息然后提交,不能直接一次性提交;系統(tǒng)在博客求助時(shí),沒有建立自己特定的博客數(shù)據(jù)庫(kù),而是鏈接到第三方博客庫(kù),這不利于信息的安全存儲(chǔ);審核專家在審核項(xiàng)目時(shí),審核團(tuán)體各自的意見需要在線下進(jìn)行,不能直接通過(guò)網(wǎng)絡(luò)在線交流.總之,在項(xiàng)目使用的過(guò)程中我們將會(huì)不斷根據(jù)需求升級(jí)系統(tǒng)功能,以達(dá)到進(jìn)一步完善系統(tǒng)的目的.
[1]張偉.濟(jì)寧學(xué)院大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2015.
[2]董婷.國(guó)內(nèi)外大學(xué)生創(chuàng)新創(chuàng)業(yè)教育研究現(xiàn)狀述評(píng)[J]. 社會(huì)科學(xué),2016(2).
[3]冀偉,陳蘊(yùn)智.大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目管理機(jī)制探討[J].大連海洋大學(xué),2016(3).
[4]常建國(guó).Java Web典型模塊與項(xiàng)目實(shí)戰(zhàn)大全[M]. 北京: 清華大學(xué)出版社,2011.
[5]譚浩強(qiáng).網(wǎng)頁(yè)編程技術(shù)與實(shí)例[M]. 北京: 人民郵電出版社,2014.
[6]劉京華.Java Web整合開發(fā)王者歸來(lái)[M]. 北京: 清華大學(xué)出版社,2010.
[7]施偉偉,張蓓.web 2.0 快速入門與項(xiàng)目實(shí)戰(zhàn)[M]. 北京: 人民郵電出版社,2006.
[8]雨陽(yáng)隆春.深入JSP 網(wǎng)絡(luò)編程[M]. 北京: 清華大學(xué)出版社,2015.
[9]克拉恩·帕斯卡 ,雷洛·吉姆斯. Ajax實(shí)戰(zhàn)[M]. 北京: 人民郵電出版社,2006.
[10]Bruce Excel. java 編程思想[M]. 北京: 機(jī)械工業(yè)出版社,2005.
Design and Implementation of Undergraduate Training Programs of innovation and Entrepreneurship System Based on J2EE
LIU Ji-hua,HAO Fang-fang,WU Gui-fen
(School of Computer Science,Lüliang University,Lishi Shanxi 033001,China)
This paper studies the college students’ innovative entrepreneurial project management system is to college students,according to the college students’ innovative entrepreneurial project to deepen their studies and lay a foundation for future employment information management system,the system adopts B/S structure,MVC pattern,convenient for college students’ innovative entrepreneurial project related information submitted and the competent department of information audit and management of these data,the colleges and universities for the current project management on college students’ innovative undertaking has strong practical significance.
J2EE;Project management;Innovative undertaking
2017-02-08
國(guó)家級(jí)大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目(201610812003);校級(jí)教學(xué)改革項(xiàng)目(JYYB201603).
劉繼華(1975-),女,山西運(yùn)城人,副教授,研究方向?yàn)檐浖こ?、軟件測(cè)試及云計(jì)算.
TP311
A
2095-185X(2017)02-0037-06