很久沒有更新博客了,這段時間實(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):

  1. 單例:用于保存進(jìn)度信息;

  2. 上傳servlet:用于上傳文件并實(shí)時寫入進(jìn)度;

  3. 進(jìn)度servlet:用于讀取實(shí)時進(jìn)度信息;

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式