成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSP編程進(jìn)度條設(shè)計(jì)實(shí)例

開(kāi)發(fā) 后端
許多Web應(yīng)用、企業(yè)應(yīng)用涉及到長(zhǎng)時(shí)間的操作,例如復(fù)雜的數(shù)據(jù)庫(kù)查詢或繁重的XML處理等,雖然這些任務(wù)主要由數(shù)據(jù)庫(kù)系統(tǒng)或中間件完成,但任務(wù)執(zhí)行的結(jié)果仍舊要借助JSP才能發(fā)送給用戶。本文介紹了一種通過(guò)改進(jìn)前端表現(xiàn)層來(lái)改善用戶感覺(jué)、減輕服務(wù)器負(fù)載的辦法。

當(dāng)JSP調(diào)用一個(gè)必須長(zhǎng)時(shí)間運(yùn)行的操作,且該操作的結(jié)果不能(在服務(wù)器端)緩沖,用戶每次請(qǐng)求該頁(yè)面時(shí)都必須長(zhǎng)時(shí)間等待。很多時(shí)候,用戶會(huì)失去耐心,接著嘗試點(diǎn)擊瀏覽器的刷新按鈕,最終失望地離開(kāi)。

本文介紹的技術(shù)是把繁重的計(jì)算任務(wù)分離開(kāi)來(lái),由一個(gè)獨(dú)立的線程運(yùn)行,從而解決上述問(wèn)題。當(dāng)用戶調(diào)用JSP頁(yè)面時(shí),JSP頁(yè)面會(huì)立即返回,并提示用戶任務(wù)已經(jīng)啟動(dòng)且正在執(zhí)行;JSP頁(yè)面自動(dòng)刷新自己,報(bào)告在獨(dú)立線程中運(yùn)行的繁重計(jì)算任務(wù)的當(dāng)前進(jìn)度,直至任務(wù)完成。

一、模擬任務(wù)

首先我們?cè)O(shè)計(jì)一個(gè)TaskBean類,它實(shí)現(xiàn)java.lang.Runnable接口,其run()方法在一個(gè)由JSP頁(yè)面(start.jsp)啟動(dòng)的獨(dú)立線程中運(yùn)行。終止run()方法執(zhí)行由另一個(gè)JSP頁(yè)面stop.jsp負(fù)責(zé)。TaskBean類還實(shí)現(xiàn)了java.io.Serializable接口,這樣JSP頁(yè)面就可以將它作為JavaBean調(diào)用:

package test.barBean; 
import java.io.Serializable;
public class TaskBean implements Runnable, Serializable {
private int counter;
private int sum;
private boolean started;
private boolean running;
private int sleep;
public TaskBean() {
counter = 0;
sum = 0;
started = false;
running = false;
sleep = 100;
}
}

TaskBean包含的“繁重任務(wù)”是計(jì)算1+2+3…+100的值,不過(guò)它不通過(guò)100*(100+1)/2=5050公式計(jì)算,而是由run()方法調(diào)用work()方法100次完成計(jì)算。work()方法的代碼如下所示,其中調(diào)用Thread.sleep()是為了確保任務(wù)總耗時(shí)約10秒。

protected void work() { 
try {
Thread.sleep(sleep);
counter++;
sum += counter;
} catch (InterruptedException e) {
setRunning(false);
}
}


status.jsp頁(yè)面通過(guò)調(diào)用下面的getPercent()方法獲得任務(wù)的完成狀況:
public synchronized int getPercent() { 
return counter;
}


如果任務(wù)已經(jīng)啟動(dòng),isStarted()方法將返回true:
public synchronized boolean isStarted() { 
return started;
}


 
如果任務(wù)已經(jīng)完成,isCompleted()方法將返回true:
public synchronized boolean isCompleted() { 
return counter == 100;
}

如果任務(wù)正在運(yùn)行,isRunning()方法將返回true:
public synchronized boolean isRunning() { 
return running;
}

SetRunning()方法由start.jsp或stop.jsp調(diào)用,當(dāng)running參數(shù)是true時(shí)。SetRunning()方法還要將任務(wù)標(biāo)記為“已經(jīng)啟動(dòng)”。調(diào)用setRunning(false)表示要求run()方法停止執(zhí)行。

【編輯推薦】  

  1. JavaOne 2009第三天:微軟與Sun/Oracle攜手并進(jìn)
  2. 開(kāi)發(fā)高可移植性J2ME的軟件
  3. Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解
  4. Sun擬推Java軟件商店 克隆蘋(píng)果成功經(jīng)驗(yàn)
  5. 四個(gè)有害的Java編碼習(xí)慣
責(zé)任編輯:王觀 來(lái)源: 站長(zhǎng)學(xué)院
相關(guān)推薦

2011-07-05 15:16:00

QT 進(jìn)度條

2012-01-17 13:58:17

JavaSwing

2009-08-17 14:41:47

C#進(jìn)度條實(shí)現(xiàn)

2015-07-31 11:19:43

數(shù)字進(jìn)度條源碼

2009-08-17 17:15:48

C# 進(jìn)度條效果

2009-08-17 14:36:15

C#進(jìn)度條實(shí)現(xiàn)

2024-08-06 14:29:37

2023-12-11 17:15:05

應(yīng)用開(kāi)發(fā)波紋進(jìn)度條ArkUI

2024-06-13 08:15:00

2021-06-15 08:02:27

Python進(jìn)度條Tqdm

2009-08-18 09:49:00

C# listview

2015-01-12 12:13:03

Android進(jìn)度條ProgressDia

2009-08-17 15:48:47

C# WinForm進(jìn)

2009-12-25 17:58:12

WPF進(jìn)度條

2010-01-25 18:27:54

Android進(jìn)度條

2015-01-12 09:30:54

Android進(jìn)度條ProgressDia

2013-03-12 10:35:06

CSS 3

2019-04-16 14:36:32

QQApp Store語(yǔ)音

2023-12-27 13:45:00

Python進(jìn)度條代碼

2015-08-03 11:39:20

擬物化進(jìn)度條
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91久久国产综合久久 | 国产成人精品一区二区三区四区 | 日韩一区二区在线播放 | 九九看片| 新av在线| 国产高清在线精品 | 在线视频 中文字幕 | 欧美日韩亚洲视频 | 色婷婷国产精品综合在线观看 | 国产精品一区二区久久 | 国产在线一 | 午夜精品久久久久久久99黑人 | 99久久精品一区二区成人 | 日韩成人中文字幕 | 久久久久久91 | 91视频在线看 | 免费黄色在线观看 | 国产精品久久久久久久久污网站 | 一二三区av | 一区二区三区四区av | 欧美激情欧美激情在线五月 | 中文字幕视频在线 | 二区不卡| 日本久久久一区二区三区 | 国产蜜臀97一区二区三区 | 日本成人午夜影院 | 五月婷婷激情网 | 国产成人精品网站 | 精品区一区二区 | 久久一日本道色综合久久 | 国产中文字幕网 | 91精品国产欧美一区二区 | 精品国产一区二区久久 | 日韩中文字幕在线观看 | 国产a一区二区 | 91精品国产91久久久久久不卞 | 亚洲一区二区三区四区五区午夜 | 男人天堂网址 | 欧美不卡视频 | 新av在线| 亚洲精品乱码久久久久久按摩观 |