freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)論文-基于java的web服務(wù)器(編輯修改稿)

2025-12-15 14:59 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 HTTP/ 協(xié)議,支持 JAVA 中 Servlet、 JSP、 JDBC、 JNDI 等相關(guān)規(guī)范,能夠部署大多數(shù)基于 Web 的 Java 應(yīng)用。 DM WAS 由服務(wù)器核心類(lèi)、 Java核心類(lèi)庫(kù)、第三方軟件包、一組配置文件和多個(gè) Web 應(yīng)用程序組成。 服務(wù)器在啟動(dòng)時(shí)讀入并解析服務(wù)器配置文件,并初始化一系列服務(wù),包括類(lèi)裝載器、數(shù)據(jù)庫(kù)連接池、 JNDI、數(shù)據(jù)源等資源在 JNDI 上的綁定、線程池、 Web應(yīng)用程序的上下文等,最后建立 ServerSocket,等待客戶(hù)端連接。 系統(tǒng)技術(shù)實(shí)現(xiàn) Http 連接管理組件 一個(gè)客戶(hù)機(jī)與一個(gè)服務(wù)器要進(jìn)行有效的通信,他們之間必然要遵守某種共同的協(xié)議,當(dāng)前,瀏覽器和 Web 服務(wù)器之間大多采用超文本傳輸協(xié)議 HTTP 進(jìn)行通信。 HTTP 協(xié)議是基于 TCP/IP 協(xié)議之上的應(yīng)用層協(xié)議,具有無(wú)連接、無(wú)狀態(tài)、面向?qū)ο蟮葞讉€(gè)特點(diǎn)。 HTTP 協(xié)議基于請(qǐng)求 /響應(yīng)機(jī)制,其工作原理包括四個(gè)步驟。 :瀏覽器與服務(wù)器建立連接,打開(kāi)一個(gè)稱(chēng)為套接字( socket)的虛擬文件,此文件的建立標(biāo)志著連接建立成功。 :瀏覽器通過(guò) socket 向服務(wù)器提交請(qǐng)求。 :服務(wù)器接收到該請(qǐng)求后,進(jìn)行相應(yīng)的事務(wù)處理,然后將處理結(jié)果通過(guò) HTTP 傳回給瀏覽器。 :當(dāng)應(yīng)答結(jié)束后,服務(wù)器斷開(kāi)與瀏覽器的連接,以保證更多的瀏覽器能夠與服務(wù)器建立連接。 Http 連接管 理組件位于 DM WAS 的最前端,它在服務(wù)器啟動(dòng)過(guò)程中獲取服務(wù)器配置參數(shù)并初始化,負(fù)責(zé)監(jiān)聽(tīng)端口,接收請(qǐng)求消息,并且將處理后的回復(fù)反饋給客戶(hù)端。 現(xiàn) Http 連接管理組件基于 HTTP 協(xié)議,負(fù)責(zé)建立一個(gè)或多個(gè)服務(wù)器 Socket 并監(jiān)聽(tīng)來(lái)自客戶(hù)端的連接請(qǐng)求。當(dāng)某個(gè)客戶(hù)端發(fā)出連接請(qǐng)求時(shí),它建立一個(gè) Socket對(duì)象,讀出 Socket 輸入輸出流,將輸入流進(jìn)行解析并提取相關(guān)信息,然后實(shí)例化一個(gè)請(qǐng)求處理任務(wù),并將輸入輸出流分別包裝成 request 和 response 對(duì)象賦給該任務(wù),交由線程池處理。流程圖如圖 所示。 圖 Http 連接管理組件流程圖 Http 連接管理組件由 LifeCycle、 Server、 HttpServer、 ConnectionHandler、RequestHandler、 Request、 Response 等類(lèi)和接口以及實(shí)現(xiàn)線程池的相關(guān)類(lèi)組成。 下面詳細(xì)介紹一下相關(guān)的數(shù)據(jù)結(jié)構(gòu)。 interface LifeCycle void start throws LifeCycleException。 void stop throws LifeCycleException。 boolean isStarted 。 LifeCycle 代表組件的生命周期接口,其目的是以一種一致的方式來(lái)管理組件的啟動(dòng)與停止。服務(wù)器中所有具有生命周期的組件如服務(wù)器類(lèi)、應(yīng)用程序上下文類(lèi)都必須實(shí)現(xiàn)該接口。 interface Server extends LifeCycle String getServerInfo 。 String getServerName 。 int getServerPort 。 String getAppBase 。 URLClassLoader getWebappParentClassLoader 。 Server 代表整個(gè)服務(wù)器,它包含服務(wù)器的相關(guān)屬性信息,負(fù)責(zé)服務(wù)器的啟動(dòng)與停止。 它由服務(wù)器啟停組件調(diào)用。 HttpServer 類(lèi)是對(duì) Server 接口的實(shí)現(xiàn),并擴(kuò)展了對(duì) Servlet 容器的接口。 class ConnectionHandler implements LifeCycle ServerSocket openSocket throws LifeCycleException。 void accept 。 void handleConnection Socket socket throws IOException。 ConnectionHandler 實(shí)現(xiàn)了生命周期接口,它根據(jù) Server 中的相關(guān)信息建立 ServerSocket,循環(huán)地接收客戶(hù)端的連接請(qǐng)求。它獲取客戶(hù)端的 Socket 連接對(duì)象,讀取輸入輸出流,然后交給 RequestHandler 任務(wù)處理。 class RequestHandler implements LifeCycle,Task void parseRequest InputStream inputstream void execute Request request,Response response RequestHandler 同時(shí)實(shí)現(xiàn)了生命周期接口和 Task 接口,從而可以交給線程池處理。 RequestHandler 解析輸入流,讀取 HTTP 請(qǐng)求頭,將輸入輸出流包裝成Request 和 Response 對(duì)象,然后被 ConnectionHandler 放入線程池中,交由線程池執(zhí)行。 interface Request extends void setResponse Response response 。 void setSocketInputStream InputStream is 。 void addCookie Cookie cookie 。 void addHeader String headerName,String headerValue 。 interface Response extends void setRequest Request request 。 void setSocketOutputStream OutputStream os 。 void writeHeaders throws IOException。 void flush throws IOException。 Request 和 Response 是對(duì) Socket 輸入輸出流的包裝并實(shí)現(xiàn)了相關(guān)的Servlet 接口,以一種對(duì)象的形式屏蔽了 HTTP 底層操作的細(xì)節(jié)。 Web 服務(wù)器應(yīng)用程序常常要處理來(lái)自遠(yuǎn)程的大量而短小的任務(wù),其特點(diǎn)是單個(gè)任務(wù)處理的時(shí)間很短而請(qǐng)求的數(shù)目卻很大且很多請(qǐng)求是同時(shí)進(jìn)行的。 顯然單線程的處理機(jī)制無(wú)法滿(mǎn)足我們的需求。在服務(wù)器程序中,使用多線程是提高服務(wù)器性能的捷徑。實(shí)踐證明,采用多線程設(shè)計(jì)可以極大地改善系統(tǒng)的響應(yīng)性能,提高程序的并行性。 多線程,顧名思義就是在應(yīng)用程序中使用多個(gè)線程。在服務(wù)器應(yīng)用程序中 使用多線程的意思是對(duì)于接收的每一個(gè)請(qǐng)求我們使用一個(gè)單獨(dú)的線程進(jìn)行處理。構(gòu)建多線程應(yīng)用程序時(shí),一個(gè)簡(jiǎn)單的方法是:每當(dāng)一個(gè)請(qǐng)求到達(dá)時(shí)就創(chuàng)建一個(gè)新線程,然后在新建的這個(gè)線程中對(duì)該請(qǐng)求進(jìn)行處理。實(shí)際應(yīng)用中,這種方法的缺點(diǎn)是很明顯的:為每個(gè)請(qǐng)求創(chuàng)建一個(gè)新線程的開(kāi)銷(xiāo)是很大的;創(chuàng)建過(guò)多的線程可能會(huì)導(dǎo)致系統(tǒng)由于內(nèi)存消耗過(guò)度而導(dǎo)致系統(tǒng)資源不足。 資源不足是多線程應(yīng)用中需要注意的一個(gè)問(wèn)題。為了防止資源不足,服務(wù)器應(yīng)對(duì)創(chuàng)建和銷(xiāo)毀線程的次數(shù)進(jìn)行合理的調(diào)整,盡量重用已有的線程。 池化技術(shù)被廣泛的應(yīng)用于服務(wù)器端軟件的開(kāi)發(fā)上。池化技術(shù)簡(jiǎn) 單來(lái)說(shuō)就是對(duì)已創(chuàng)建的對(duì)象放在一個(gè)池中進(jìn)行緩存,將來(lái)需要某對(duì)象時(shí),就從池中獲取,從而達(dá)到重用對(duì)象的目的。線程池技術(shù)是池化技術(shù)的一種,當(dāng)需要完成某項(xiàng)任務(wù)時(shí),直接從線程池中取出線程來(lái)對(duì)任務(wù)進(jìn)行處理,任務(wù)處理完后,將線程返回線程池,其優(yōu)點(diǎn)是:任務(wù)到達(dá)時(shí),由于不需要新建線程,而是直接使用已有線程,提高了應(yīng)用程序的響應(yīng)速度。而且,通過(guò)適當(dāng)?shù)卣{(diào)整線程池中的最大線程數(shù)目和最小線程數(shù)目,可以防止系統(tǒng)資源不足問(wèn)題。 .1 實(shí)現(xiàn) 在 DM WAS 中我們使用了多線程機(jī)制,對(duì)于單個(gè)的請(qǐng)求都交給線程池模塊進(jìn)行處理。我們使用事件驅(qū)動(dòng)處理的方 法實(shí)現(xiàn)線程之間的調(diào)度。在事件驅(qū)動(dòng)處理的情況下,需要一種發(fā)信機(jī)制來(lái)控制某一特定線程何時(shí)應(yīng)該運(yùn)行。在 Java 中,可以使用 wait 、 notify 和 notifyAll 方法向線程發(fā)送信號(hào)。這些方法允許線程在一個(gè)對(duì)象上阻塞,直到所需的條件得到滿(mǎn)足為止,然后再次開(kāi)始運(yùn)行。這種設(shè)計(jì)減少了 CPU 占用,因?yàn)榫€程在阻塞時(shí)不消耗執(zhí)行時(shí)間,并且可在 notify 方法被調(diào)用時(shí)立即喚醒。與其它方法相比,事件驅(qū)動(dòng)方法可以提供更短的響應(yīng)時(shí)間。 線程池模塊包括線程池、工作線程、任務(wù)隊(duì)列、任務(wù)接口等幾個(gè)部分。 class ThreadPool implements LifeCycle void initPool 。//初始化線程池 void createWorker 。//創(chuàng)建工作線程 void execute Task task 。//執(zhí)行指定任務(wù) /*將工作線程返回到池中 */ void returnWorker WorkerThread worker 。/*通知線程池該任務(wù)發(fā)生異常,從而線程池可以結(jié)束該任務(wù)并回收該任務(wù)所占用的工作線程 */ void errorOccur Task task 。 ThreadPool 代表線 程池,其作用是創(chuàng)建、銷(xiāo)毀并管理線程,將工作線程放入線程池中,調(diào)用工作線程執(zhí)行任務(wù),銷(xiāo)毀異常任務(wù)。 class WorkerThread implements Runnable void run 。//運(yùn)行工作線程 boolean overtime 。//線程是否超時(shí) WorkerThread 代表一個(gè)工作線程,它是一個(gè)獨(dú)立的可以循環(huán)執(zhí)行任務(wù)的線程對(duì)象,在沒(méi)有任務(wù)時(shí)進(jìn)行等待 wait ,在任務(wù)到達(dá)時(shí)被喚醒 notify 執(zhí)行。 class TaskQueue void pushTask Task task 。//將任務(wù)放入任務(wù)隊(duì)列的隊(duì)尾 Task popTask 。//從任務(wù)隊(duì)列的隊(duì)頭取出任務(wù)執(zhí) //行并從隊(duì)列中刪除該任務(wù) void RemoveTask Task task 。//從任務(wù)隊(duì)列中移走任務(wù) TaskQueue 代表一個(gè)任務(wù)隊(duì)列,其作用是提供一種緩沖機(jī)制,將沒(méi)有處理的任務(wù)放在任務(wù)隊(duì)列中,等到有工作線程可用時(shí)依次執(zhí)行隊(duì)列中的任務(wù)。 interface Task void start 。//任務(wù)開(kāi)始執(zhí)行 void reject 。//丟棄該任務(wù) Task 是一個(gè)接口,它是每個(gè)任務(wù)必須實(shí) 現(xiàn)的接口,線程池只執(zhí)行實(shí)現(xiàn)了該接口的類(lèi),它提供一組方法用來(lái)規(guī)定執(zhí)行任務(wù)的入口、任務(wù)的執(zhí)行狀態(tài)、任務(wù)執(zhí)行完后的收尾工作等,從而保證線程邏輯和應(yīng)用邏輯的分離,工作線程通過(guò)該接口調(diào)度任務(wù)的執(zhí)行。 .2 流程圖 線程池處理任務(wù)的過(guò)程如圖 所示。 .3 存在的問(wèn)題 線程池為我們構(gòu)建多線程的服務(wù)器應(yīng)用程序提供了強(qiáng)大的機(jī)制,但使用它可能會(huì)出現(xiàn)一些問(wèn)題。 這里的資源包括線程自身所使用的資源、線程處理任務(wù)時(shí)可能需要的其它資源,例如數(shù)據(jù)庫(kù)連接、 Socket 套接字或文件輸入輸出流等。資源不足問(wèn)題的本質(zhì)原因就是過(guò) 多創(chuàng)建線程從而消耗包括內(nèi)存和其它系統(tǒng)資源在內(nèi)的大量資源。 為解決資源不足問(wèn)題,我們?cè)诰€程池中提供了幾個(gè)參數(shù)供用戶(hù)根據(jù)實(shí)際情況優(yōu)化線程池。 1 Threads:線程池中最大線程數(shù),默認(rèn)為無(wú)限大。通常我們期望 Threads 應(yīng)該是服務(wù)器能夠接受的最大并發(fā)訪問(wèn)數(shù)。如果有多于 Threads 的并發(fā)請(qǐng)求,多余的請(qǐng)求將被任務(wù)隊(duì)列進(jìn)行緩存。 圖 線程池處理任務(wù)的流程圖 2 minTreads:線程池中最小線程數(shù),默認(rèn)為 1。服務(wù)器啟動(dòng)時(shí),會(huì)初始
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1