JSP編程進(jìn)度條設(shè)計(jì)案例(5)
發(fā)表時(shí)間:2024-02-03 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]頁(yè)面底部提供了一個(gè)按鈕,用戶可以用它來(lái)停止或重新啟動(dòng)任務(wù): <TR> <TD ALIGN="CENTER"> <BR> <% if (task.isRun...
頁(yè)面底部提供了一個(gè)按鈕,用戶可以用它來(lái)停止或重新啟動(dòng)任務(wù):
<TR>
<TD ALIGN="CENTER">
<BR>
<% if (task.isRunning()) { %>
<FORM METHOD="GET" ACTION="stop.jsp">
<INPUT TYPE="SUBMIT" VALUE="停止">
</FORM>
<% } else { %>
<FORM METHOD="GET" ACTION="start.jsp">
<INPUT TYPE="SUBMIT" VALUE="開始">
</FORM>
<% } %>
</TD>
</TR>
</TABLE>
</BODY></HTML>
只要不停止任務(wù),約10秒后瀏覽器將顯示出計(jì)算結(jié)果5050:
四、停止任務(wù)
stop.jsp頁(yè)面把running標(biāo)記設(shè)置成false,從而停止當(dāng)前的計(jì)算任務(wù):
<jsp:useBean id="task" scope="session"
class="test.barBean.TaskBean"/>
<% task.setRunning(false); %>
<jsp:forward page="status.jsp"/>
注意最早的Java版本提供了Thread.stop方法,但JDK從1.2版開始已經(jīng)不贊成使用Thread.stop方法,所以我們不能直接調(diào)用Thread.stop()。
第一次運(yùn)行本文程序的時(shí)候,你會(huì)看到任務(wù)的啟動(dòng)有點(diǎn)延遲;同樣地,第一次點(diǎn)擊“停止”按鈕時(shí)也可以看到任務(wù)并沒(méi)有立即停止運(yùn)行(特別是如果機(jī)器配置較低的話,延遲的感覺(jué)更加明顯),這些延遲都是由于編譯JSP頁(yè)面導(dǎo)致的。編譯好JSP頁(yè)面之后,應(yīng)答速度就要快多了。
五、實(shí)際應(yīng)用
進(jìn)度條不僅使得用戶界面更加友好,而且對(duì)服務(wù)器的性能也有好處,因?yàn)檫M(jìn)度條會(huì)不斷地告訴用戶當(dāng)前的執(zhí)行進(jìn)度,用戶不會(huì)再頻繁地停止并重新啟動(dòng)(刷新)當(dāng)前的任務(wù)。另一方面,創(chuàng)建單獨(dú)的線程來(lái)執(zhí)行后臺(tái)任務(wù)也會(huì)消耗不少資源,必要時(shí)可考慮通過(guò)一個(gè)線程池來(lái)實(shí)現(xiàn)Thread對(duì)象的重用。另外,頻繁地刷新進(jìn)度頁(yè)面也增加了網(wǎng)絡(luò)通信開銷,所以務(wù)必保持進(jìn)度頁(yè)面簡(jiǎn)潔短小。
在實(shí)際應(yīng)用中,后臺(tái)執(zhí)行的繁重任務(wù)可能不允許停止,或者它不能提供詳細(xì)的執(zhí)行進(jìn)度數(shù)據(jù)。例如,查找或更新關(guān)系數(shù)據(jù)庫(kù)時(shí),SQL命令執(zhí)行期間不允許中途停止——不過(guò)如果用戶表示他想要停止或中止任務(wù),程序可以在SQL命令執(zhí)行完畢后回退事務(wù)。
解析XML文檔的時(shí)候,我們沒(méi)有辦法獲知已解析內(nèi)容精確的百分比。如果用DOM解析XML文檔,直到解析完成后才得到整個(gè)文檔樹;如果用SAX,雖然可以知道當(dāng)前解析的內(nèi)容,但通常不能確定還有多少內(nèi)容需要解析。在這些場(chǎng)合,任務(wù)的執(zhí)行進(jìn)度只能靠估計(jì)得到。
估計(jì)一個(gè)任務(wù)需要多少執(zhí)行時(shí)間通常是很困難的,因?yàn)樗婕暗皆S多因素,即使用實(shí)際測(cè)試的辦法也無(wú)法得到可靠的結(jié)論,因?yàn)榉⻊?wù)器的負(fù)載隨時(shí)都在變化之中。一種簡(jiǎn)單的辦法是測(cè)量任務(wù)每次執(zhí)行所需時(shí)間,然后根據(jù)最后幾次執(zhí)行的平均時(shí)間估算。如果要提高估計(jì)時(shí)間的精確度,應(yīng)當(dāng)考慮實(shí)現(xiàn)一種針對(duì)應(yīng)用特點(diǎn)的算法,綜合考慮多種因素,例如要執(zhí)行的SQL語(yǔ)句類型、要解析的XML模式的復(fù)雜程度,等等。
結(jié)束語(yǔ):本文例子顯示出用JSP、Java、HTML和JavaScript構(gòu)造進(jìn)度條是相當(dāng)容易的,真正困難的是如何將它用到實(shí)際應(yīng)用之中,特別是獲得后臺(tái)任務(wù)的進(jìn)度信息,但這個(gè)問(wèn)題沒(méi)有通用的答案,每一種后臺(tái)執(zhí)行的任務(wù)都有它自己的特點(diǎn),必須按照具體情況具體分析。