儲雷+張健
摘要:隨著近年來以Internet為核心的計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)交流工具和互動平臺也得到快速發(fā)展,論壇、博客、社區(qū)、空間等成為人們?nèi)粘I畹囊徊糠?。其中,博客以其?nèi)容豐富、操作簡單、開放互動、展示個性和持續(xù)更新的特點(diǎn)備受廣大網(wǎng)民的喜愛。該博客系統(tǒng)的設(shè)計(jì),基于SpringMVC框架技術(shù)和Hibernate數(shù)據(jù)庫訪問技術(shù),后臺數(shù)據(jù)庫采用企業(yè)級大型關(guān)系數(shù)據(jù)庫Oracle進(jìn)行數(shù)據(jù)存儲,網(wǎng)絡(luò)應(yīng)用服務(wù)器采用免費(fèi)開源的Tomcat服務(wù)器,前端頁面采用JSP(Java Server Page)動態(tài)網(wǎng)頁技術(shù)進(jìn)行開發(fā)。系統(tǒng)主要功能有:用戶的登錄注冊,文章的添加、查詢、修改、分享和刪除,相冊的創(chuàng)建、刪除以及圖片的上傳,管理員對文章進(jìn)行管理。主要模塊分為用戶模塊 、博文模塊和相冊模塊。
關(guān)鍵詞:地球村;博客;Spring MVC;Hibernate;JSP
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)28-0117-04
Abstract: With the rapid development in recent years, with Internet as the core of computer network technology, network communication and interaction platform is developing rapidly. Forum, blog, community, space has become part of our daily life. The characteristics of blog to the rich, simple, open and interactive, the display of personality and updating by majority of Internet users. The design of the blog system, based on SpringMVC framework technology and Hibernate database access technology, The backstage database uses Oracle large enterprise relational database for data storage, The network application server using the Apache Software Foundation free open source Tomcat server, The front page using JSP dynamic web technology development. The main functions of the system are: user login registration, the query, modify, delete and share, create albums, upload pictures, delete, administrators to manage. The main module is divided into user module, blog module and photo album module.
Key words: global village; blog; Spring MVC; Hibernate; JSP
在互聯(lián)網(wǎng)高速發(fā)展和網(wǎng)民規(guī)模不斷擴(kuò)大的今天,人們對網(wǎng)絡(luò)交流工具和互動平臺的要求也迅速提高,因此出現(xiàn)了如論壇、微博、博客、社區(qū)、空間等形式多樣的網(wǎng)絡(luò)互動工具[1]。博客技術(shù)的出現(xiàn)進(jìn)一步拉近了網(wǎng)絡(luò)和人們生活之間的距離,人們可以輕松、自由、隨時隨地地創(chuàng)建、維護(hù)自己的網(wǎng)絡(luò)空間,博客也逐漸成為網(wǎng)民進(jìn)行在線溝通交流的開放平臺。博客,僅音譯,英文名為Blogger,為Web Log的混成詞。它的正式名稱為網(wǎng)絡(luò)日志;又音譯為部落格或部落閣等,是一種通常由個人管理、不定期張貼新的文章的網(wǎng)站[2]。Blog站點(diǎn)所形成的網(wǎng)狀結(jié)構(gòu)促成了不同于以往社區(qū)的Blog文化,Blog技術(shù)締造了“博客”文化。個人博客是當(dāng)今網(wǎng)絡(luò)的熱點(diǎn),越來越多的網(wǎng)民開始將自己的想法、感受、心情等以文字、圖片或多媒體的形式發(fā)布到網(wǎng)絡(luò)中,以便于與朋友或其他瀏覽者分享,方便快捷。
在過去開發(fā)的一些網(wǎng)絡(luò)交流工具和互動平臺中,大部分是使用的是ASP.NET + SQL Server + IIS,這種方式存在一個最大的缺點(diǎn)就是無法移植到其他平臺上運(yùn)行,即無跨平臺性。而當(dāng)前流行博客開發(fā)技術(shù)采用的是JSP + Oracle + Tomcat的模式,其最大的特點(diǎn)就是跨平臺。
1 開發(fā)技術(shù)介紹
1.1 JSP動態(tài)網(wǎng)頁技術(shù)
JSP(Java Server Page)即Java服務(wù)器頁面,是由sun公司負(fù)責(zé)開發(fā)的一種動態(tài)網(wǎng)頁開發(fā)技術(shù)[3]。JSP動態(tài)網(wǎng)頁開發(fā)技術(shù)是相對于傳統(tǒng)的HTML靜態(tài)頁面而言,在JSP出現(xiàn)之前,軟件開發(fā)人員如果需要對靜態(tài)的HTML頁面進(jìn)行數(shù)據(jù)更新,必須通過Java Servlet,將要修改的數(shù)據(jù)通過out.write("tag")這種輸出流動態(tài)打印到前端頁面。這是一項(xiàng)非常費(fèi)時費(fèi)力的工作,增加了程序員編程的復(fù)雜程度和枯燥程度。而且,傳統(tǒng)的Servlet開發(fā)會使Servlet文件中存在大量的html標(biāo)簽和多余的靜態(tài)文本,使得此文件結(jié)構(gòu)變得非常復(fù)雜混亂,進(jìn)而導(dǎo)致開發(fā)效率大大降低。JSP動態(tài)網(wǎng)頁技術(shù)繼承了JAVA語言的優(yōu)點(diǎn)[4]。JSP出現(xiàn)之后,大大降低了軟件開發(fā)人員的開發(fā)難度。JSP在傳統(tǒng)的html頁面中添加java程序段和jsp標(biāo)簽,降低了Servlet的開發(fā)難度[5]。
JSP頁面大致由五大部分組成:靜態(tài)的html標(biāo)簽、內(nèi)容注釋、指令元素、腳本元素以及動作元素[6]。其頁面的組成如圖1所示:
1.2 Spring MVC框架技術(shù)
Spring Framework是一個輕量級的、為了降低企業(yè)級應(yīng)用程序開發(fā)的復(fù)雜度的Java/Java EE全功能棧(full-stack)開源框架[7]。
Spring的最大特點(diǎn),方便解耦合,簡化開發(fā)[8]。Spring提供的IoC控制反轉(zhuǎn)容器(Inversion of Control)將各個實(shí)例之間的依賴關(guān)系交給Spring進(jìn)行控制,有效地規(guī)避了硬編碼(Hard-Coding)所帶來的程序過度耦合。通過Spring,開發(fā)人員只需要關(guān)注上層的業(yè)務(wù)邏輯,而不需要對如單例模式類和配置文件解析等底層需求編寫多余的代碼。Spring還提供了對面向方面編程(AOP)編程的支持,AOP編程解決了用傳統(tǒng)的面向?qū)ο螅∣OP)編程所無法解決的問題。除此特性之外,Spring更容易集成各種優(yōu)秀的開發(fā)框架,如Hibernate、Struts、Mybatis和Hessian,Spring都提供了對這些ORM框架的支持[9]。同時,Spring也提供了對Java EE API的進(jìn)一步封裝,大大降低了開發(fā)人員對Java EE API的使用難度[10]。傳統(tǒng)的軟件測試是開發(fā)人員比較頭疼的一個問題,在Spring里,可以通過Junit4,使用注解對程序進(jìn)行更方便的單元測試。
1.3 Hibernate數(shù)據(jù)庫訪問技術(shù)
Hibernate是一個開源的ORM(Object Relational Mapping)數(shù)據(jù)持久層框架,它實(shí)現(xiàn)了Java對象和數(shù)據(jù)庫中數(shù)據(jù)表的一一映射,對傳統(tǒng)的JDBC操作數(shù)據(jù)庫的方法進(jìn)行簡單封裝,使得操作數(shù)據(jù)庫變得簡單。Hibernate不僅實(shí)現(xiàn)Java類和數(shù)據(jù)庫中的數(shù)據(jù)表的映射,還提供了非常容易使用的CRUD方法,大幅度減少開發(fā)時人工使用JDBC和SQL語句處理數(shù)據(jù)的時間,極大地提高了軟件開發(fā)效率。
由圖5所示,Hibernate通過xml或properties配置文件可以實(shí)現(xiàn)java類和數(shù)據(jù)表的映射,這種方式如今依然有人在使用。但是隨著Hibernate更高版本的發(fā)布,傳統(tǒng)的這種通過引入外部配置文件的配置方式顯得復(fù)雜。在Hibernate4之后,可以直接通過注解的方式直接java類中來聲明持久性映射。
2 系統(tǒng)的分析與設(shè)計(jì)
2.1系統(tǒng)需求分析
該博客系統(tǒng)的設(shè)計(jì),主要完成用戶登錄注冊模塊、博客文章的分類、展示、搜索模塊以及個人用戶對博文的發(fā)表、修改、刪除、關(guān)注和收藏、個人相冊和消息處理等模塊。匿名用戶(未注冊)可以選擇注冊、瀏覽博客。匿名用戶注冊之后成為注冊用戶,注冊用戶可以對個人信息進(jìn)行管理、評論管理、文章管理和相冊管理。系統(tǒng)管理員可以進(jìn)行用戶管理和文章管理。
2.2系統(tǒng)流程分析
當(dāng)用戶登錄系統(tǒng)之后,首先進(jìn)入的是博客首頁,用戶可以瀏覽首頁精選博客文章,此時,用戶只有瀏覽的權(quán)限。用戶可以通過單擊導(dǎo)航欄的登錄\注冊按鈕進(jìn)行登陸或者注冊。如果是已經(jīng)注冊的用戶可以直接登陸,否則只能先進(jìn)行注冊。當(dāng)用戶注冊之后,可以進(jìn)入自己的博客空間,對自己的個人信息進(jìn)行管理,可以發(fā)布文章和創(chuàng)建相冊,進(jìn)而上傳照片。
如果是管理員賬戶,登錄之后可以對所有注冊用戶和文章進(jìn)行檢索和刪除操作。
系統(tǒng)流程圖如圖7所示:
2.3數(shù)據(jù)庫設(shè)計(jì)
根據(jù)需求分析,數(shù)據(jù)庫的數(shù)據(jù)表以及E-R關(guān)系模型設(shè)計(jì)如下:
1)用戶表:用戶ID、姓名、密碼、性別、出生日期、現(xiàn)居住地、故鄉(xiāng)、電子郵件、頭像、興趣愛好、注冊時間。
2)文章表:文章ID、標(biāo)題、創(chuàng)建者ID、內(nèi)容、創(chuàng)建時間、最后一次修改時間、是否暫存到草稿箱、類別、閱讀次數(shù)、收藏次數(shù)、轉(zhuǎn)發(fā)次數(shù)、是否被刪除。
3)評論表:評論ID、評論人ID、評論內(nèi)容、評論時間、評論是否被刪除、評論文章ID、評論人姓名。
4)相冊表:相冊ID、相冊名稱、相冊描述、創(chuàng)建時間、創(chuàng)建人、是否加密、是否被刪除。
5)照片表:照片ID、照片名稱、照片描述、上傳時間、所屬相冊、是否加密、保存路徑、是否刪除。
6)轉(zhuǎn)發(fā)表:轉(zhuǎn)發(fā)ID、轉(zhuǎn)發(fā)人、轉(zhuǎn)發(fā)時間、是否取消轉(zhuǎn)發(fā)、文章ID。
7)收藏表:收藏ID、收藏人、收藏文章標(biāo)題、收藏時間、收藏是否被刪除。
8)粉絲表:當(dāng)前用戶ID、粉絲ID、粉絲姓名、成為粉絲的時間、是否刪除。
9)管理員表:管理員ID、姓名、密碼、郵箱。
核心E-R關(guān)系圖如圖8所示:
3 功能核心代碼實(shí)現(xiàn)
3.1 系統(tǒng)框架的搭建
一個系統(tǒng)框架搭建的是否合理,直接影響著該系統(tǒng)的效率。次博客系統(tǒng)采用的是Spring MVC和Hibernate相結(jié)合的方式進(jìn)行開發(fā)。首先搭建SpringMVC環(huán)境:新建applicationContext.xml文件,作為Spring的核心配置文件。在此配置文件中首要的是定義受環(huán)境影響易變的變量,通過org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的locations屬性來加載變量。具體配置如下:
加載變量之后,要進(jìn)行數(shù)據(jù)源的配置,為操作數(shù)據(jù)持久層提供基礎(chǔ)。在此數(shù)據(jù)源的配置中,使用的是阿里巴巴的DruidDataSource數(shù)據(jù)源,Druid適用于大數(shù)據(jù)高并發(fā)的數(shù)據(jù)操作,此系統(tǒng)使用其作為數(shù)據(jù)源,有利于使其性能達(dá)到最優(yōu)狀態(tài)。
3.2系統(tǒng)核心功能實(shí)現(xiàn)
由于使用了SpringMVC并開啟了Spring的注解配置,所以該系統(tǒng)從視圖層到業(yè)務(wù)邏輯層再到最后的數(shù)據(jù)持久層,使用幾乎完全相同的調(diào)用方式?,F(xiàn)已對博客文章的操作為例說明系統(tǒng)流程:
(1)Controller控制層:
@RequestMapping(value = "addEssay")
public void createBlog(HttpServletResponse response, BlogEssayblogEssay, String option, String essayid) throws IOException {
blogEssayService.addEssay(blogEssay);
response.getWriter().write("博文創(chuàng)建成功");}
(2)Service業(yè)務(wù)邏輯層:
public void addEssay(BlogEssayblogEssay) {
blogEssayDao.insert(blogEssay); }
(3)Persistence數(shù)據(jù)持久化層:
public void insert(BlogEssayblogEssay) {
Session session = sessionFactory.getCurrentSession();
session.save(blogEssay); }
4 總結(jié)
本文以JAVA EE為基礎(chǔ),采用SpringMVC + Hibernate + Oracle等技術(shù)來實(shí)現(xiàn)最終的系統(tǒng)開發(fā)與設(shè)計(jì)。在該設(shè)計(jì)中,充分體現(xiàn)了Spring MVC三層架構(gòu)技術(shù)的應(yīng)用,以及Hibernate對數(shù)據(jù)庫操作的方便快捷,采用Oracle數(shù)據(jù)庫可以應(yīng)對未來大數(shù)據(jù)量處理的考驗(yàn)。在大數(shù)據(jù)時代,此系統(tǒng)可做進(jìn)一步的升級開發(fā),例如,站內(nèi)搜索使用Solr作為搜索引擎,采用MongoDB用作索引存儲,加入網(wǎng)頁緩存、后臺數(shù)據(jù)緩存,網(wǎng)站采用Ngix用作負(fù)載均衡。
參考文獻(xiàn):
[1] CNNIC.第37次中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告[EB/OL]. (2016-01-22)/[2016-03-12].http://www.cnnic.cn/hlwfzyj/hlwxzbg/201601/P020160122469130059846.pdf.
[2] 百度百科[EB/OL]. (2016-07-14). http://baike.baidu.com/view/1509.htm.
[3] 林龍.JSP+Servlet+Tomcat應(yīng)用開發(fā)[M]. 北京:清華大學(xué)出版社,2015.
[4] 牛德雄.基于MVC的JSP軟件開發(fā)案例教程[M]. 北京:清華大學(xué)出版社,2014.
[5] 李明欣,林琳.基于BootStrap3的JSP項(xiàng)目實(shí)例教程[M]. 北京:北京航空航天大學(xué)出版社,2015.
[6] 楊誼,喻德曠.JSP網(wǎng)絡(luò)程序設(shè)計(jì)與案例開發(fā)教程[M]. 北京:人民郵電出版社,2014.
[7] Dragos-Paul Pop, Adam Altar. Designing an MVC Model for Rapid Web Application Development[J]. Procedia Engineering,2014(2):4-5.
[8]戴克. Spring MVC學(xué)習(xí)指南[M]. 林儀明,崔毅,譯. 北京:人民郵電出版社,2015.
[9] Xuan Yin, Wei Zheng, Ming Zhang, et al. A modularized operator interface framework for Tokamak based on MVC design pattern[J]. Fusion Engineering and Design,2014(1):3-4.
[10] 舒禮蓮. 基于Spring MVC的Web應(yīng)用開發(fā)[J].計(jì)算機(jī)與現(xiàn)代化,2013(11):2-3.