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

JSP頁面的線程

開發 后端
本文介紹同一個JSP頁面可能會在多個線程中同時運行,導致服務器同時運行一個JSP頁面的多個線程。

許多Web應用、企業應用涉及到長時間的操作,例如復雜的數據庫查詢或繁重的XML處理等,雖然這些任務主要由數據庫系統或中間件完成,但任務執行的結果仍舊要借助JSP才能發送給用戶。本文介紹了一種通過改進前端表現層來改善用戶感覺、減輕服務器負載的辦法。

當JSP調用一個必須長時間運行的操作,且該操作的結果不能(在服務器端)緩沖,用戶每次請求該頁面時都必須長時間等待。很多時候,用戶會失去耐心,接著嘗試點擊瀏覽器的刷新按鈕,最終失望地離開。

本文介紹的技術是把繁重的計算任務分離開來,由一個獨立的線程運行,從而解決上述問題。當用戶調用JSP頁面時,JSP頁面會立即返回,并提示用戶任務已經啟動且正在執行;JSP頁面自動刷新自己,報告在獨立線程中運行的繁重計算任務的當前進度,直至任務完成。

一、模擬任務

首先我們設計一個TaskBean類,它實現java.lang.Runnable接口,其run()方法在一個由JSP頁面(start.jsp)啟動的獨立線程中運行。終止run()方法執行由另一個JSP頁面stop.jsp負責。TaskBean類還實現了java.io.Serializable接口,這樣JSP頁面就可以將它作為JavaBean調用

二、啟動任務

start.jsp啟動一個專用的線程來運行“繁重的任務”,然后把HTTP請求傳遞給status.jsp。

start.jsp頁面利用標記創建一個TaskBean的實例,將scope屬性定義為session使得對于來自同一瀏覽器的HTTP請求,其他頁面也能提取到同一個Bean對象。start.jsp通過調用session.removeAttribute("task")確保創建了一個新的Bean對象,而不是提取一個舊對象(例如,同一個用戶會話中更早的JSP頁面所創建的Bean對象)

start.jsp創建并設置好TaskBean對象之后,接著創建一個Thread,并將Bean對象作為一個Runnable實例傳入。調用start()方法時新創建的線程將執行TaskBean對象的run()方法。

現在有兩個線程在并發執行:執行JSP頁面的線程(稱之為“JSP線程”),由JSP頁面創建的線程(稱之為“任務線程”)。接下來,start.jsp利用調用status.jsp,status.jsp顯示出進度條以及任務的執行情況。注意status.jsp和start.jsp在同一個JSP線程中運行。

start.jsp在創建線程之前就把TaskBean的running標記設置成了true,這樣,即使當JSP線程已開始執行status.jsp而任務線程的run()方法尚未啟動,也能夠確保用戶會得到“任務已開始運行”的狀態報告。

將running標記設置成true、啟動任務線程這兩行代碼可以移入TaskBean構成一個新的方法,然后由JSP頁面調用這個新方法。一般而言,JSP頁面應當盡量少用Java代碼,即我們應當盡可能地把Java代碼放入Java類。不過本例中我們不遵從這一規則,把new Thread(task).start()直接放入start.jsp突出表明JSP線程創建并啟動了任務線程。

在JSP頁面中操作多線程必須謹慎,注意JSP線程和其它線程實際上是并發執行的,就象在桌面應用程序中,我們用一個線程來處理GUI事件,另外再用一個或多個線程來處理后臺任務。

不過在JSP環境中,考慮到多個用戶同時請求某一個頁面的情況,同一個JSP頁面可能會在多個線程中同時運行;另外,有時同一個用戶可能會向同一個頁面發出多個請求,雖然這些請求來自同一個用戶,它們也會導致服務器同時運行一個JSP頁面的多個線程。

三、任務進度

status.jsp頁面利用一個HTML進度條向用戶顯示任務的執行情況。首先,status.jsp利用標記獲得start.jsp頁面創建的Bean對象

為了及時反映任務執行進度,status.jsp會自動刷新。JavaScript代碼setTimeout("location=′status.jsp′", 1000)將每隔1000毫秒刷新頁面,重新請求status.jsp,不需要用戶干預。

【編輯推薦】

  1. JSP開發環境的搭建
  2. 簡單介紹JSP環境配置
  3. JSP、ASP和PHP安全編程
  4. 整合Apache中JSP和PHP
  5. JSP和Servlet應用的安全問題
責任編輯:佚名 來源: IT168
相關推薦

2009-07-06 18:23:56

Struts和JSPJSP頁面

2011-05-11 16:54:49

JSP

2009-07-02 13:36:24

動態頁面JSP技術

2009-01-18 10:56:27

JSTLEL表達式JSP標準標記庫

2009-07-07 16:49:43

JSP數據庫配置

2009-07-06 09:34:19

JSP頁面

2009-07-01 18:50:29

Dreamweaver

2009-08-10 09:19:28

Servlet JSP

2009-07-06 10:00:31

JSP頁面傳值

2009-03-16 15:07:20

JSP分頁window.openJSP表單

2009-07-02 10:13:47

ASP和JSPJSP頁面

2009-02-25 10:55:29

FCKeditor控件JSP

2009-07-03 17:48:34

JSP頁面翻譯

2009-07-07 13:42:57

Servlet JSP

2009-07-07 18:20:54

JSP頁面顯示亂碼

2009-07-02 09:25:41

JSP實現頁面跳轉

2009-07-01 18:08:18

JSP頁面跳轉

2009-09-04 16:10:49

JSP頁面間傳遞參數

2009-06-25 14:05:01

JavaBean實現J

2009-07-23 14:21:55

ASP.NET頁面
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久久久 | 久久久久中文字幕 | 免费观看一级毛片 | 精品久久久久久久 | 国产精品一区二区三区久久 | 亚洲国产精品99久久久久久久久 | 在线观看www | 91精品在线播放 | 欧美综合久久久 | 成人福利在线视频 | 亚洲欧美日韩精品 | 嫩草网| 欧美日韩精品在线免费观看 | 欧洲精品在线观看 | 亚洲第一视频网站 | 久久久久亚洲精品 | 色成人免费网站 | 国产成人99久久亚洲综合精品 | 欧美另类视频 | 丝袜久久| 羞羞视频网站在线观看 | 国产美女一区二区 | 瑟瑟免费视频 | 好姑娘高清在线观看电影 | 久久亚洲一区二区三区四区 | 国产精品视频中文字幕 | 国产精品久久av | 天堂久久一区 | 国产欧美在线视频 | 偷拍自拍网站 | 操网站| 国产精品99久久久久久www | 亚洲一区国产 | 久久91精品国产一区二区 | 欧美狠狠操 | 日韩一区二区在线播放 | 在线免费亚洲视频 | 国产精品久久久亚洲 | 欧美综合在线观看 | 91日日| 巨大荫蒂视频欧美另类大 |