国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Struts2的隨書(shū)光盤(pán)管理系統(tǒng)文件上傳模塊設(shè)計(jì)

2013-04-29 20:40:07夏宇紅夏文忠
電腦知識(shí)與技術(shù) 2013年9期

夏宇紅 夏文忠

摘要:為有效解決隨書(shū)光盤(pán)文件的上傳,以Struts2框架的Common-FileUpload組件為基礎(chǔ),討論了使用Struts2框架上傳文件的開(kāi)發(fā)配置,在滿足隨書(shū)光盤(pán)系統(tǒng)功能的情況下,優(yōu)化系統(tǒng)功能,保證系統(tǒng)性能穩(wěn)定,方便管理員和讀者的使用。

關(guān)鍵詞: 大文件上傳;隨書(shū)光盤(pán);Struts2

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)09-2149-02

基于網(wǎng)絡(luò)的隨書(shū)光盤(pán)系統(tǒng)中,文件的傳送是系統(tǒng)核心。網(wǎng)絡(luò)應(yīng)用中的FTP曾經(jīng)是文件傳送的主要方式,但FTP難于和B/S結(jié)構(gòu)的網(wǎng)絡(luò)系統(tǒng)無(wú)縫集成,且FTP還存在安全性問(wèn)題,故B/S結(jié)構(gòu)的文件傳送組件正逐漸成為文件傳送的主流。Struts2[1]是一個(gè)優(yōu)秀的開(kāi)源框架,它集成了Apache開(kāi)源項(xiàng)目的Common-Fileupload組件,在上傳組件原有文件的基礎(chǔ)上,進(jìn)行了進(jìn)一步封裝,更進(jìn)一步的簡(jiǎn)化了文件上傳。通過(guò)Struts2的文件上傳,只需要通過(guò)三個(gè)屬性封裝表單里的文件域,即可非常輕松地完成文件上傳。Struts2提供對(duì)文件下載支持的stream的結(jié)果類型,通過(guò)借助于Struts2提供的文件下載支持,應(yīng)用可以實(shí)現(xiàn)非西歐字符文件名的文件下載,并可以在文件下載前檢查用戶的權(quán)限,從而通過(guò)授權(quán)控制來(lái)控制文件下載。鑒于隨書(shū)光盤(pán)系統(tǒng)只針對(duì)讀者提供服務(wù),如果允許所有用戶無(wú)限制的下載,那將極大的降低系統(tǒng)性能,通過(guò)對(duì)用戶身份進(jìn)行識(shí)別甄別,即可保證用戶的使用,又可保證系統(tǒng)的性能。

1 基于B/S結(jié)構(gòu)的上傳組件

RFC1867協(xié)議[2]在HTTP協(xié)議的基礎(chǔ)上定義了網(wǎng)頁(yè)文件上傳的基本方式,即為表單的INPUT標(biāo)簽增加了file屬性,同時(shí)限定了form的method必須為POST,ENCTYPE必須為multipart/form-data,當(dāng)POST方法的ENCTYPE設(shè)定為multipart/form-data時(shí),提交表單數(shù)值以二進(jìn)制流的方式來(lái)處理表單數(shù)據(jù)并把文件域指定文件也封裝到請(qǐng)求當(dāng)中,不再以字符串方式提交請(qǐng)求數(shù)據(jù)。

Java技術(shù)中有兩個(gè)常用的文件上傳項(xiàng)目:Common-FileUpload和Cos。不管使用哪個(gè)框架,它都負(fù)責(zé)解析出HttpServletRequest請(qǐng)求中的所有域。上傳框架獲得文件域?qū)?yīng)的文件內(nèi)容,通過(guò)IO流將文件內(nèi)容寫(xiě)入服務(wù)器的任意位置,從而完成文件上傳。Common-Fileupload框架是Apache組織下jakarta-commons[3]項(xiàng)目組下的一個(gè)子項(xiàng)目,該框架方便地將multipart/form-data類型請(qǐng)求中的各種表單域解析出來(lái)。該項(xiàng)目依賴另一個(gè)項(xiàng)目:Common-IO。Common-IO是處理文件的讀寫(xiě)操作功能庫(kù)。Common-FileUpload框架通過(guò)調(diào)用Common-IO組件來(lái)完成對(duì)客戶端與服務(wù)端文件的讀寫(xiě)。

Struts2默認(rèn)使用Jakarta的Common-Fileupload文件上傳框架,但需要在WEB應(yīng)用于中增加commons-io-2.0.1.jar和commons-fileupload-1.2.2.jar,將Struts2項(xiàng)目lib下這兩個(gè)文件復(fù)制到WEB應(yīng)用WEB-INF\lib路徑下即完成組件部署。Struts2文件上傳支持在原有文件上傳項(xiàng)目上做進(jìn)一步封裝,簡(jiǎn)化了文件上傳的代碼實(shí)現(xiàn),取消了不同上傳項(xiàng)目上的編程差異。Struts2的Action無(wú)需處理HttpServletRequest請(qǐng)求,因Struts2的Action已經(jīng)與Servlet API徹底分離,Struts2框架負(fù)責(zé)解析HttpServletRequest請(qǐng)求中的參數(shù),包括文件域,Struts2使用File類型來(lái)封裝文件域。

2 基于Struts2的內(nèi)置控件的大文件上傳方法

2.1上傳頁(yè)面設(shè)計(jì)

隨書(shū)光盤(pán)管理系統(tǒng)主要是對(duì)隨書(shū)光盤(pán)進(jìn)行管理與利用,管理員利用UltraISO或WinISO等軟件把隨書(shū)光盤(pán)處理為ISO鏡像文件并壓縮,然后通過(guò)隨書(shū)光盤(pán)管理系統(tǒng)的數(shù)據(jù)管理頁(yè)面,對(duì)隨書(shū)光盤(pán)進(jìn)行編輯隨書(shū)關(guān)聯(lián)信息并上傳。在本系統(tǒng)中,文件上傳功能是系統(tǒng)核心。系統(tǒng)在進(jìn)行文件上傳的同時(shí)把書(shū)目數(shù)據(jù)信息保存到后臺(tái)數(shù)據(jù)庫(kù)中,并把與讀者借閱讀者的信息也保存到相應(yīng)的數(shù)據(jù)表中,實(shí)現(xiàn)圖書(shū)的借閱與隨書(shū)光盤(pán)的同步推送。執(zhí)行過(guò)程如圖1所示:

客戶端瀏覽器可以通過(guò)WEB方式訪問(wèn)隨書(shū)光盤(pán)系統(tǒng),如果是管理員登錄,可以編輯隨書(shū)光盤(pán)信息,上傳隨書(shū)光盤(pán)文件;如果是讀者通過(guò)瀏覽器訪問(wèn)系統(tǒng),讀者通過(guò)所借閱圖書(shū)查詢隨書(shū)光盤(pán)信息并下載隨書(shū)光盤(pán)文件。

在隨書(shū)光盤(pán)系統(tǒng)中,上傳文件的文件名采用上傳時(shí)間加上5位隨機(jī)數(shù)的方式,這樣可以在同一目錄唯一生成一個(gè)文件名,例如:2013032587659.rar。上傳成功后系統(tǒng)把文件存儲(chǔ)在WEB服務(wù)器的Upload目錄,然后把新生成的文件名和管理員編輯的信息寫(xiě)入Mysql數(shù)據(jù)庫(kù)中以方便讀者瀏覽下載。

2.2上傳文件處理

常見(jiàn)的隨書(shū)光盤(pán)通常都是文件體積較大的文件,例如CD-ROM[4]的最大存儲(chǔ)容量為700M;目前許多隨書(shū)光盤(pán)采用DVD格式,而常見(jiàn)的單面DVD[5]存儲(chǔ)容量為4.7G。這些文件經(jīng)過(guò)打包壓縮處理后,容量也能達(dá)到1GB甚至更大,這樣的大文件上傳對(duì)B/S結(jié)構(gòu)的WEB服務(wù)器具有很大的壓力,為了能讓W(xué)EB容器提供穩(wěn)定可靠的服務(wù),在設(shè)計(jì)上傳組件時(shí),需要針對(duì)大文件上傳作專門(mén)的優(yōu)化。

Struts2提供了一個(gè)文件上傳的攔截器,通過(guò)配置該攔截器可輕松實(shí)現(xiàn)文件過(guò)濾。Struts2中文件上傳過(guò)濾器是fileUpload,為了讓攔截器起作用,需要在該Action中配置攔截器引用。fileUpload攔截器可以指定兩個(gè)參數(shù)。

allowedTypes:該參數(shù)指定允許上傳的文件類型,多個(gè)文件類型之間以英文逗號(hào)分隔。

maximunSize:該參數(shù)指定允許上傳的文件大小,單位是字節(jié)。

通過(guò)配置struts.xml文件,實(shí)現(xiàn)文件的上傳類型與大小的限制,下面是部分關(guān)鍵配置代碼:

2.3上傳異常處理

隨書(shū)光盤(pán)系統(tǒng)的文件上傳是系統(tǒng)中重要的功能,在文件上傳過(guò)程中,會(huì)產(chǎn)生不可預(yù)見(jiàn)的問(wèn)題,如上傳失敗,連接超時(shí)等。如何處理好這些系統(tǒng)異常,將影響系統(tǒng)的穩(wěn)定及正常使用。Struts2默認(rèn)使用input邏輯視圖,即upload.jsp頁(yè)面處理上傳異常,通過(guò)Struts2標(biāo)簽庫(kù)把異常信息顯示在upload.jsp頁(yè)面上,這種顯示對(duì)中文支持不好,界面不友好。

Struts2提供了WEB應(yīng)用的國(guó)際化支持,需要配置相應(yīng)的key提示信息,如文件超大,提示“struts.messages.error.file.too.large”;選擇了不允許的上傳文件類型,錯(cuò)誤提示信息對(duì)應(yīng)的國(guó)際化資源文件中的key為“struts.messages.error.content.type.not.allowed”。在自己的國(guó)際化資源文件中增加該key消息,以以改變文件類型不允許的提示信息。

提示文件超大和文件類型不允許的國(guó)際化資源文件的代碼為:

#改變上傳文件太大提示信息

#改變文件類型不允許的提示信息

3 結(jié)束語(yǔ)

B/S結(jié)構(gòu)的隨書(shū)光盤(pán)系統(tǒng)實(shí)現(xiàn)了非書(shū)電子資料的網(wǎng)絡(luò)應(yīng)用,提升了圖書(shū)館服務(wù)讀者的品質(zhì)。系統(tǒng)開(kāi)發(fā)中,文件上傳是重要的一環(huán),本系統(tǒng)使用Struts2框架的Common-FileUpload組件實(shí)現(xiàn)了文件上傳的功能,在完成既定功能的同時(shí),保證了系統(tǒng)的穩(wěn)定,提升了服務(wù)讀者的范圍,具有一定的現(xiàn)實(shí)意義。

參考文獻(xiàn):

[1] 李剛.Struts 2.1權(quán)威指南——基于WebWork核心的MVC開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2009.

[2] Network Working Group.RFC1867協(xié)議[EB/OL]. http://www.ietf.org/rfc/rfc1867.txt.

[3] jakarta-commons項(xiàng)目 [EB/OL].http://commons.apache.org/.

[4] 肖飛,王運(yùn)瓊.基于光盤(pán)映像文件的CD-ROM數(shù)據(jù)加密與解密方法[J].計(jì)算機(jī)科學(xué),2009,36(5):299-301.

[5] 高鐵鋼,郭麗文.DVD光盤(pán)教學(xué)模式研究[J].中國(guó)電化教育,2007(5):46-49.

乐昌市| 蒙自县| 乐至县| 定边县| 台前县| 昆山市| 六枝特区| 宁陵县| 晋宁县| 卢龙县| 张家界市| 交城县| 万安县| 大理市| 达孜县| 资阳市| 文昌市| 天门市| 金堂县| 宜宾市| 荆州市| 六安市| 台安县| 涡阳县| 会昌县| 河东区| 北流市| 四川省| 台安县| 广汉市| 吴桥县| 海丰县| 家居| 禹州市| 永平县| 花莲市| 龙口市| 开平市| 信丰县| 商丘市| 湘乡市|