亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

javaweb代碼和數據分離思考

2024-04-27 15:12:10
字體:
來源:轉載
供稿:網友

今天看到一篇博文。如下:

經常開發java web應用程序的朋友一定對有對程序打包,維護的經驗,我們提高軟件的維護性一般可以從分離易變和不變的內容,重構軟件的結構來實現,重構包括對代碼級別的,也包括對應用程序目錄文件的重構,以下我就簡單談談我的一次經歷。

       我們一個系統是java web應用程序,不過該系統所有的class文件、jsp、js、CSS、image文件和系統動態上傳的doc、xls、image、wmv等文件放在同一個工程目錄中。具體目錄結構如下:

應用程序配置的上下文根目錄是/myappmyapp/WEB-INF/myapp/admin/myapp/images/myapp/style/myapp/files/myapp/videos/......

 

    1、存在的問題       實際上,files、videos文件夾,會在系統運行中隨著用戶上傳發布新內容經常更新變化,而其他的部分都是在系統需求變更發布版本時才變化,這2種變化不同,前者是系統正常使用的結果,后者是系統變更的結果,根據變化與不變化分開的原則,我們希望把這2類文件夾分開存放。       由于我們發布web應用程序包(myapp.war)需要把應用程序上下文根目錄myapp中的所有文件夾都包括進來,所以必須把經常變化的files和videos文件夾移出去。

 

    2、解決方法探索       我們知道,servlet中有兩種轉向的方法,一個是request.getRequestDispatcher(requestPath).forward(request,

response),它不改變url地址,直接轉發請求到一個jsp頁面,一個是resonse.sendRedirect(urlPath),它改版url地址,跳轉到另外一個請求。 不過其兩者都沒法訪問servlet所在web應用程序上下文(myapp)之外的目錄,而我們myapp內的全部文件夾都需要打包成myapp.war,這樣就有個矛盾。       另外的方法,還有通過java.io.File使用流的方式讀一個文件,然后再使用servlet的response的out對象寫出來傳送到頁面,這樣的方法可以訪問到該web容器(如tomcat)所在操作系統的用戶根目錄(如windows的D:/或linux的/usr*等等),這樣我們就可以把files等文件夾移動到myapp之外。比如tomcat的應用程序上下文根目錄是/usr/tomcat/webapps/,我們讓files不在myapp中,而是放到/usr/upload/files中,這樣我們打包myapp.war的時候,就只裝載版本變化的最新版程序,用戶上傳文件都不變仍然放在files中,訪問時使用File()來進行。如:       File f = new File("/usr/upload/files/2010/3/15/010001.doc")

使用FileInputStream來讀這個文件,然后使用response中的outstream來寫這個文件流到頁面。       這其中存在的問題是讀入的文件需要占用JVM的heap空間,如果文件有500MB大,那么一般的默認JVM heap空間都是不夠的,需要在啟動JVM的時候設置參數,使之足夠容納這個文件,當然文件的讀寫都要使用JVM來調度,顯然效率會比較低,比直接讀取要慢很多。

 

    3、方法的改進       有沒有辦法,既能讓files文件夾在myapp之外,又不用File類來讀文件數據流呢? 在linux中可以使用目錄的快捷方式來解決,實際上就是文件的軟連接功能。       大家都知道,在linux中文件和文件夾是同樣的數據實體,可以用同樣的方法來做連接,在另外一個地方操作某個文件或目錄的連接,就達到了直接操作這個文件或目錄的作用。       首先,建立軟連接的方式是:       ln -s sourcePath destinationPath把files文件夾放在myapp之外,并且在webapps中的某一個應用程序中,比如ROOT中建立一個files文件夾的軟連接,如:       ln -s /usr/upload /usr/tomcat/webapps/ROOT/upload并且在ROOT的tomcat容器context中設定一個屬性 allowLinking="true" ,即可訪問       這樣,我們可以在myapp應用程序中,通過直接url調用,或者response的重定向方式,訪問到files中的文件,如:       http://localhost:8080/upload/files/2010/3/15/010001.doc       這樣一來,訪問upload快捷方式就等于是訪問了upload文件夾,既沒有訪問外在資源沒有權限限制,又沒有使用File類讀寫數據流,不會有heap空間的限制,我們實現了易變數據文件的分離,并且沒有內存的消耗。讀寫500MB的文件,不需要把heap空間設置到500以上,只需要默認的64就可以了。       總結一下,利用操作系統的特性——軟連接,實現了數據文件從應用程序包中的分離,操作系統實現目錄文件訪問的跳轉,利用了文件I節點的修改,這屬于操作系統底層實現,比起利用JVM的應用層類File來實現讀寫要快10倍以上,節約JVM Runtime空間。

    4、總結       我為了讓web應用程序易于維護,把版本發布的程序代碼和用戶上傳的數據文件分離,經過了對servlet重定向方法的思考和試驗,對File類文件流方法的試驗,對linux文件軟連接的方法試驗,最好決定使用最后一種,同時解決了文件維護性和運行效率的問題。

思考部分:

如果是分布式怎么辦?如果數據和程序不在同一個服務器上怎么辦?

其實web容器都有一個自身的解決方法:虛擬目錄。如果數據不在程序對應的那臺服務器上,只要在web容器中數據指向這個虛擬目錄就行。把虛擬目錄設置成共享。


上一篇:react入門教程

下一篇:css基礎1

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品三级美女白浆呻吟| 久久精品一偷一偷国产| 日韩高清免费观看| 欧美精品一区二区三区国产精品| 欧美wwwxxxx| 海角国产乱辈乱精品视频| 久久久久久久97| 欧美亚洲第一区| 2019中文字幕在线| 在线观看中文字幕亚洲| 亚洲国语精品自产拍在线观看| 亚洲免费伊人电影在线观看av| 91精品国产自产在线老师啪| 丁香五六月婷婷久久激情| 欧洲成人午夜免费大片| 国产精品入口福利| 成人午夜两性视频| 日韩av成人在线| 亚洲影视九九影院在线观看| 久久97久久97精品免视看| 日韩美女主播视频| 欧美激情欧美激情| 日本高清+成人网在线观看| 亚洲视频欧洲视频| 国产91亚洲精品| 亚洲一区亚洲二区| 成人激情av在线| 久久久精品视频成人| 亚洲aa在线观看| 国产成人精品优优av| 狠狠色噜噜狠狠狠狠97| 欧美成人午夜剧场免费观看| 亚洲午夜激情免费视频| 欧美中在线观看| 国产成人综合一区二区三区| 97成人精品视频在线观看| 国产精品亚洲激情| 亚洲欧美国产日韩中文字幕| 国产精品自产拍在线观看中文| 久久久久久久一区二区| 午夜精品久久久久久99热软件| 亚洲最大福利视频网站| 91九色视频导航| 亚洲人成亚洲人成在线观看| 精品国产精品三级精品av网址| 不卡av在线网站| 国产精品免费一区豆花| 日本三级久久久| 日韩亚洲第一页| 国产激情久久久久| 成人国产亚洲精品a区天堂华泰| 欧美洲成人男女午夜视频| 欧美怡红院视频一区二区三区| 国产视频精品xxxx| 91大神在线播放精品| 国产精品日韩av| 国产精品96久久久久久又黄又硬| 亚洲精品aⅴ中文字幕乱码| 91夜夜揉人人捏人人添红杏| 日本国产欧美一区二区三区| 国产精品揄拍一区二区| 成人精品久久av网站| 亚洲国产精品va在线| 国产亚洲精品美女久久久久| 国产亚洲精品综合一区91| 国产欧美日韩视频| 欧美在线免费看| 一区二区三区动漫| 91精品国产乱码久久久久久蜜臀| 亚洲天堂成人在线| 日本成人精品在线| 欧美有码在线视频| 日日摸夜夜添一区| 亚洲欧美日韩天堂一区二区| 青青青国产精品一区二区| 青青青国产精品一区二区| 社区色欧美激情 | 国产精品久久久久77777| 欧美老少做受xxxx高潮| 深夜福利亚洲导航| 精品久久久中文| 亚洲欧美综合另类中字| 丝袜亚洲另类欧美重口| 国产精品草莓在线免费观看| 亚洲国产日韩欧美综合久久| 97成人超碰免| 午夜精品在线观看| 88国产精品欧美一区二区三区| 奇米影视亚洲狠狠色| 成人欧美一区二区三区在线湿哒哒| 日韩精品一区二区视频| 国产精品成人一区二区三区吃奶| 九九热精品视频在线播放| 欧美成aaa人片免费看| 久久久av免费| 精品调教chinesegay| 亚洲综合av影视| 91成人精品网站| 亚洲欧美三级伦理| 91经典在线视频| 欧美精品第一页在线播放| 久久国产精品视频| 欧美俄罗斯乱妇| 57pao成人永久免费视频| 国产成人免费av电影| 国产免费观看久久黄| 亚洲精品狠狠操| 久久伊人精品视频| 日韩毛片中文字幕| 成人情趣片在线观看免费| 国产视频久久网| 日韩亚洲国产中文字幕| 欧美激情喷水视频| 欧美午夜片欧美片在线观看| 日韩精品www| 亚洲性猛交xxxxwww| 亚洲xxxx视频| 国产精品视频不卡| 亚洲jizzjizz日本少妇| 国产激情久久久| 欧美性极品xxxx娇小| 九九视频这里只有精品| 亚洲精品成人久久久| 日韩大陆毛片av| 欧美日韩美女视频| 亚洲人成绝费网站色www| 国产乱肥老妇国产一区二| 国产亚洲欧洲高清| 成人444kkkk在线观看| 国产精品视频播放| 欧美在线性视频| 久久中文字幕在线视频| 亚洲偷欧美偷国内偷| 国产网站欧美日韩免费精品在线观看| 深夜福利亚洲导航| 日韩美女免费视频| 精品久久久久久久中文字幕| 91中文精品字幕在线视频| 在线观看精品国产视频| 久久久久久国产精品久久| 亚洲影院色无极综合| 中文字幕日韩电影| 国产成+人+综合+亚洲欧美丁香花| 精品国内亚洲在观看18黄| 97av视频在线| 亚洲自拍欧美另类| 日韩精品福利在线| 色爱av美腿丝袜综合粉嫩av| 欧美精品久久久久久久久| 亚洲精品一区二区三区婷婷月| 国产欧亚日韩视频| 欧美黑人巨大精品一区二区| 日韩亚洲欧美中文在线| 日韩精品中文字幕视频在线| 欧美激情精品久久久久久蜜臀| 成人黄色在线播放| 亚洲qvod图片区电影| 成人免费看片视频| 亚洲欧美综合区自拍另类| 亚洲欧洲在线免费| 亚洲男人的天堂在线播放| 欧美一级黄色网| 国产精品久久久久久久9999| 91精品啪aⅴ在线观看国产|