很久沒有更新博客了,這段時間實(shí)在的忙的不可開交,項(xiàng)目馬上就要上線了,要修補(bǔ)的東西太多了。當(dāng)我在學(xué)習(xí)JavaWeb文件上傳的時候,我就一直有一個疑問,網(wǎng)站上那些博客的圖片是怎么上傳的,因?yàn)楫?dāng)提交了表單之后網(wǎng)頁就跳轉(zhuǎn)了。后來我學(xué)習(xí)到了Ajax,我知道了瀏覽器可以異步的發(fā)送響應(yīng),這時我又有新的疑問,那就是在我上傳一些文件的時候,那些網(wǎng)站的上傳進(jìn)度是怎么做到的,因?yàn)閟ervlet直到上傳完成之后才完成響應(yīng)。
最近我們的項(xiàng)目中有一個地方中需要用到一個功能,當(dāng)用戶點(diǎn)擊一個處理按鈕時,前臺會實(shí)時的顯示后臺處理動態(tài),由于servlet一次只能接受一個請求,而且在servlet的生命周期結(jié)束時才會把響應(yīng)數(shù)據(jù)發(fā)送到前臺(這一點(diǎn)大家可以做個這樣的測試:
1 response.getWriter().print("hello");2 Thread.sleep(10000);3 response.getWriter().print("world");
,你們會發(fā)現(xiàn)前臺在等待了約10s后收到了"helloworld")。所以我想到了一個方法:使用單例保存實(shí)時信息。具體的實(shí)現(xiàn)方法就是,當(dāng)用戶點(diǎn)擊了處理按鈕時,在后臺開啟一個線程進(jìn)行處理,并且每進(jìn)行到一步,就向單例中寫入當(dāng)前狀態(tài)信息。然后編寫一個servlet,用于返回單例中的信息,前臺循環(huán)發(fā)送請求,這樣就能實(shí)現(xiàn)實(shí)時顯示進(jìn)度的效果。
好了,啰嗦了這么多,下面進(jìn)入正題,如何實(shí)現(xiàn)上傳文件動態(tài)顯示進(jìn)度,其實(shí)思想和上面的功能是一致的,我將這個功能分為三個點(diǎn):
單例:用于保存進(jìn)度信息;
上傳servlet:用于上傳文件并實(shí)時寫入進(jìn)度;
進(jìn)度servlet:用于讀取實(shí)時進(jìn)度信息;
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26