成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何開(kāi)發(fā)JSPHTTP服務(wù)器

本篇內(nèi)容主要講解“如何開(kāi)發(fā)JSP HTTP服務(wù)器”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何開(kāi)發(fā)JSP HTTP服務(wù)器”吧!

創(chuàng)新互聯(lián)是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護(hù)、成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)站備案、服務(wù)器租用、域名申請(qǐng)、軟件開(kāi)發(fā)、小程序開(kāi)發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運(yùn)營(yíng)推廣經(jīng)驗(yàn)的科技公司,有著多年的網(wǎng)站建站經(jīng)驗(yàn),致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開(kāi)一個(gè)面向全國(guó)乃至全球的業(yè)務(wù)窗口:建站電話聯(lián)系:18980820575

通過(guò)各款JSP HTTP服務(wù)器的對(duì)比,定位本JSP HTTP服務(wù)器的應(yīng)用方向

對(duì)于企業(yè)選擇或者設(shè)計(jì)HTTP服務(wù)器,需要考慮很多因素,主要的因素有:穩(wěn)定性,安全性,執(zhí)行效率,易用性,可擴(kuò)展性等。筆者對(duì)當(dāng)前業(yè)界中較為流行的HTTP服務(wù)器按照常用指標(biāo)進(jìn)行了分析和對(duì)比,如表1。

HTTP服務(wù)器

支持服務(wù)頁(yè)運(yùn)行平臺(tái)安全性執(zhí)行效率易用性
MS IISASPMS Windows一般一般容易
MS IISISAPIMS Windows一般容易
ApacheCGI

MS Windows

UNIX,Linux

一般一般
TomcatJSP

MS Windows

UNIX,Linux

不易

通過(guò)表1我們可以知道,MS IIS只能運(yùn)行在MS Windows平臺(tái)下,且由于IIS的體系設(shè)計(jì)很大程度上依賴(lài)于Windows系統(tǒng),由于MS Windows系統(tǒng)存在一定的漏洞,從而導(dǎo)致IIS體系的安全性能也比較低。但是IIS安裝使用比較簡(jiǎn)單,適用于對(duì)安全性和擴(kuò)展性要求不高的 Windows用戶。

對(duì)于Apache和Tomcat(都由Apache Software Foundation研究開(kāi)發(fā))這兩款當(dāng)前互聯(lián)網(wǎng)上比較流行的HTTP服務(wù)器,不僅可以支持MS Windows平臺(tái),也可以支持當(dāng)前所有主流非Windows平臺(tái)(例如:Linux,各種UNIX操作系統(tǒng)),并且安全性能較IIS強(qiáng)。但是對(duì)于一般的用戶而言,Apache和Tomcat的配置使用較為復(fù)雜一些。所以Apache和Tomcat適用于專(zhuān)業(yè)的,對(duì)系統(tǒng)安全性和擴(kuò)展性要求較高的用戶。

另外需要考慮的因素是JSP HTTP服務(wù)器的執(zhí)行效率。在表1中,ASP和CGI都采用即時(shí)調(diào)用模式,即當(dāng)客戶端請(qǐng)求該資源時(shí),服務(wù)器端會(huì)即時(shí)解釋并執(zhí)行該模塊,執(zhí)行完畢之后即時(shí)釋放該模塊,每次獲取請(qǐng)求時(shí)都必須解釋和執(zhí)行該模塊,這樣過(guò)多地與磁盤(pán)系統(tǒng)進(jìn)行交互,會(huì)造成系統(tǒng)的執(zhí)行效率的降低。

對(duì)于ISAPI而言,其執(zhí)行模塊是作為動(dòng)態(tài)鏈接庫(kù)(DLL)模塊的形態(tài)進(jìn)行調(diào)用,初次調(diào)用完畢后該模塊將存在于內(nèi)存中。后續(xù)再收到客戶端請(qǐng)求時(shí)直接從內(nèi)存中調(diào)用執(zhí)行該模塊,從而效率較高。但這種情形可能帶來(lái)代碼更新的問(wèn)題。當(dāng)修改本地代碼時(shí),必須從內(nèi)存中清空該動(dòng)態(tài)鏈接庫(kù)模塊,即需要先關(guān)閉服務(wù)器后才能更新本地代碼,否則服務(wù)器內(nèi)存中執(zhí)行的還是舊的代碼模塊。

而對(duì)于Tomcat系統(tǒng)而言,這樣的問(wèn)題都得到了避免。Tomcat將初次執(zhí)行的Java類(lèi)模塊載入到內(nèi)存,后續(xù)調(diào)用時(shí),直接從內(nèi)存中調(diào)用執(zhí)行模塊,減少了與磁盤(pán)系統(tǒng)的交互。同時(shí)通過(guò)自動(dòng)判斷本地代碼是否受到修改而更新載入內(nèi)存中舊的類(lèi)模塊。從而不僅執(zhí)行效率較高,且修改本地代碼也比較方便。

基于上述的研究分析,筆者擬采用擴(kuò)展性和安全性良好的Java體系來(lái)實(shí)現(xiàn)一款支持JSP服務(wù)頁(yè)的HTTP服務(wù)器,其功能實(shí)現(xiàn)基本覆蓋Tomcat,并在其基礎(chǔ)上增強(qiáng)對(duì)CGI的支持和易用性的提高。

一、設(shè)計(jì)過(guò)程
1.搭建HTTP服務(wù)器框架

1.1 設(shè)計(jì)思路

通過(guò)建立TCP套接字(端口為80)向客戶端提供HTTP服務(wù)。分析客戶端請(qǐng)求(GET,POST請(qǐng)求等),建立請(qǐng)求資源與本地資源的映射關(guān)系,實(shí)現(xiàn)請(qǐng)求應(yīng)答。

1.2 設(shè)計(jì)要點(diǎn)

(1)客戶端請(qǐng)求的多線程支持。
(2)客戶端請(qǐng)求的分析。
(3)請(qǐng)求資源與本地資源映射以及本地資源的應(yīng)答。
(4)對(duì)CGI以及JSP類(lèi)似請(qǐng)求的接受分析與處理返回。
(5)擴(kuò)展服務(wù)以及特殊指令。

1.3 實(shí)施前準(zhǔn)備

(1)確定JDK版本并下載JDK
考慮到JDK1.4.2的穩(wěn)定性,我們考慮使用版本為1.4.2或以上的JDK。從SUN的網(wǎng)站上http://java.sun.com/javase/downloads/index.jsp下載當(dāng)前平臺(tái)支持的JDK。
(2)安裝JDK并配置編譯環(huán)境
安裝JDK并設(shè)置java路徑($(installation_dir)/bin)到系統(tǒng)PATH變量中。

1.4 設(shè)計(jì)實(shí)施

(1)創(chuàng)建服務(wù)套接字

  1. //Create server socket ServerSocket serv = new ServerSocket(SERVER_PORT); 
    System.out.println("HTTP server(port: " + Integer.toString(SERVER_PORT) + ") 
    running...");  

(2)接受客戶端請(qǐng)求并創(chuàng)建請(qǐng)求處理線程

while(true)  {  //Accept the client connections   Socket clnt = serv.accept();  //Create thread for each client   HTTPThread HTTPThd = new HTTPThread(clnt, props, ht);  HTTPThd.start();  }

以上代碼中,創(chuàng)建了多線程構(gòu)架的客戶端請(qǐng)求處理體系??梢约皶r(shí)處理多客戶端連接。

(3)分析請(qǐng)求

客戶端處理線程從客戶端套接字中讀取相應(yīng)的請(qǐng)求內(nèi)容,并對(duì)請(qǐng)求進(jìn)行分析。

//Create client socket input stream reader   m_sin = new BufferedReader(new InputStreamReader(_s.getInputStream() ) );  ……  //Get the first line of output from client socket   request = m_sin.readLine().trim();  if(request != null)  {  //The method is GET   if(request.startsWith(METHOD_GET) == true)  {  parseGetRequest(request);  }  //The method is POST   else if(request.startsWith(METHOD_POST) == true)  {  params = m_sin.readLine();  //Skip the middle lines of POST request   while( (params != null) && (params.equals("") == false) )  {  params = m_sin.readLine();  }  //The last line contains those parameters   params = m_sin.readLine();  paramsparams = params.trim();  parsePostRequest(request, params);  }  //Close client socket input stream and client socket itself   m_sin.close();  m_s.close();  }

通過(guò)請(qǐng)求內(nèi)容的***行就可以知道請(qǐng)求方式是GET還是POST。如果是GET請(qǐng)求(例如很多CGI都是GET請(qǐng)求),就可以直接從請(qǐng)求字符串中獲取請(qǐng)求的資源內(nèi)容。GET請(qǐng)求的格式為:GET <URL> HTTP/1.X。其中URL為請(qǐng)求的資源內(nèi)容,而1.X是用于指明客戶端所支持的HTTP的版本,當(dāng)前有1.0和1.1兩個(gè)標(biāo)準(zhǔn)。

如果是POST請(qǐng)求,除了請(qǐng)求的資源內(nèi)容(例如JSP文件)外,在請(qǐng)求的末行中還包含請(qǐng)求資源將要用到的參數(shù)行。所以上述代碼中存在掠過(guò)中間部分的請(qǐng)求內(nèi)容,只需要獲取資源內(nèi)容和參數(shù)行即可。

(4)請(qǐng)求資源與本地資源的映射

一般出于安全性考慮,JSP HTTP服務(wù)器端不可能將本地的資源路徑和服務(wù)提供的路徑相同,而是將本地路徑的某一目錄映射為HTTP服務(wù)資源的根目錄,該目錄一般稱(chēng)之為服務(wù)頁(yè)根目錄(ServerPageDir)。當(dāng)客戶端請(qǐng)求資源映射到本地資源時(shí),必須使用本地被映射的目錄替換請(qǐng)求中的根目錄。例如HTTP服務(wù)器端將本地路徑“/usr/paul/paul.home”映射為服務(wù)頁(yè)根目錄。那么客戶端的請(qǐng)求“/sample.jpg”對(duì)應(yīng)本地的路徑資源為“ /usr/paul/paul.home/sample.jpg”。

當(dāng)請(qǐng)求內(nèi)容的末尾字符為“/”時(shí),即請(qǐng)求為目錄而不是具體文件時(shí),還存在默認(rèn)請(qǐng)求的問(wèn)題,一般目錄的默認(rèn)請(qǐng)求為該目錄下的index.htm,index.html,index.jsp等文件。

特別是的,出于安全性和習(xí)慣考慮,對(duì)CGI目錄也進(jìn)行了映射(一般映射為/cgi-bin/),所以如果請(qǐng)求中包含CGI映射時(shí)還必須替換為CGI程序所在目錄。

//If the request start with /cgi-bin,  //then need replace /cgi-bin with true CGI directory   if(fname.startsWith(PATH_SEPARATOR + CGI_BIN_DIR) == true)  {  fnamefname = fname.replaceFirst(PATH_SEPARATOR + CGI_BIN_DIR, cgiBinDir);  }  else //else, file name need append to server documents directory   {  fname = serverPageDir + fname;  }  //If request is for directory,  //then need respond default page in the directory   if(fname.endsWith(PATH_SEPARATOR) == true)  {  fnamefname = fname + defaultPage;  }

到此,相信大家對(duì)“如何開(kāi)發(fā)JSP HTTP服務(wù)器”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

新聞名稱(chēng):如何開(kāi)發(fā)JSPHTTP服務(wù)器
文章來(lái)源:http://jinyejixie.com/article20/jojpjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、軟件開(kāi)發(fā)網(wǎng)站策劃、手機(jī)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
金阳县| 泽库县| 焉耆| 林州市| 岫岩| 兰坪| 松潘县| 都江堰市| 桑日县| 濮阳市| 五台县| 洛隆县| 广德县| 子长县| 建德市| 饶平县| 裕民县| 晋中市| 龙游县| 仪陇县| 特克斯县| 修水县| 会东县| 墨竹工卡县| 黄陵县| 长顺县| 咸阳市| 绵阳市| 阳春市| 吉首市| 扶沟县| 建阳市| 枣强县| 临泽县| 确山县| 衡南县| 肇东市| 承德县| 老河口市| 浦北县| 章丘市|