日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

web服务器的简单实现——HTTP权威指南读书心得(七)

發(fā)布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web服务器的简单实现——HTTP权威指南读书心得(七) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? 我又回來做筆記了~最近懶死了,書雖然看完了,但是一直懶得動筆,這樣不行啊(ˉ﹃ˉ)口水。還有在這里吐槽下,在圍觀這本書的時候,一直有一種奇怪的感覺:里面說的有些東西與時代脫節(jié)啊......越讀越感覺不對勁,最后終于在一個月黑風(fēng)高的夜晚,我發(fā)現(xiàn)了一個驚人的秘密,那就是....這本書的英文版是在2002年出版的啊....怪不得...所以說里面的有些東西應(yīng)該說已經(jīng)過時。這個故事告訴我們一個深刻的道理:一定要好好學(xué)英語!

? ? 廢話不多說,來看看今天的主要內(nèi)容:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??WEB服務(wù)器

?? ?web服務(wù)器是我們每天瀏覽的這些網(wǎng)頁的基礎(chǔ),它接收用戶的請求,處理,最后向客戶發(fā)回響應(yīng),常見的web服務(wù)器有IIS,apache,Nginx等等,這里說明下apache與tomcat的區(qū)別Apache是web服務(wù)器,Tomcat是應(yīng)用(java)服務(wù)器,它只是一個servlet容器,是Apache的擴展。 Apache和Tomcat都可以做為獨立的web服務(wù)器來運行,但是Apache不能解釋java程序(jsp,serverlet)。兩者都是一種容器,只不過發(fā)布的東西不同:Apache是html容器,功能像IIS一樣;Tomcat是jsp/servlet容器,用于發(fā)布jsp及java的,類似的有IBM的websphere、BEA的Weblogic,sun的JRun等等。

? ? web服務(wù)器進行服務(wù)時候的主要步驟

  • 建立連接——接收一個客戶端連接
  • 接受請求——從網(wǎng)絡(luò)中讀取一條HTTP請求報文
  • 處理請求——對請求報文進行解析,并進行下一步工作
  • 訪問資源——訪問請求報文中指定的資源
  • 構(gòu)建響應(yīng)——創(chuàng)建正確的響應(yīng)報文
  • 發(fā)送響應(yīng)——將響應(yīng)發(fā)回客戶端
  • 記錄事務(wù)過程——將與完成事務(wù)有關(guān)的信息記錄在日志中。
  • ? ? ?當(dāng)客戶端與服務(wù)器建立連接成功以后,客戶端會向服務(wù)器發(fā)出其請求報文,這個請求報文中包含著以特定格式記錄的請求信息,如請求行,請求首部,以及請求實體。當(dāng)服務(wù)器接收完請求報文之后,按照約定格式對請求進行解析,了解客戶端需要的東西。服務(wù)器有很多種類:單線程,多線程多進程,復(fù)用結(jié)構(gòu),服用多線程結(jié)構(gòu)。多線程多進程服務(wù)器為每一個連接都提供了一個線程或者進程,對其進行監(jiān)控處理。復(fù)用結(jié)構(gòu)服務(wù)器會監(jiān)視所有的連接,但是只有連接狀態(tài)發(fā)生變化時才會對連接進行處理,連接空閑或者等待的時候并不會綁定線程或者進程。復(fù)用多線程服務(wù)器將他們兩個的特點結(jié)合到一起,更高效的利用資源。

    ? ? 通常客戶端會請求一些資源,如圖片等,當(dāng)服務(wù)器解析完客戶端的請求之后,便會尋找客戶端請求的資源,尋找資源的方法有很多種,可以使用docroot對路徑補全,以尋找目標(biāo)文件在服務(wù)器上的真實路徑并訪問,當(dāng)然也有一臺服務(wù)器上有很多站點的情況,這時便可以使用虛擬主機對docroot進行配置,也可以使用CGI訪問動態(tài)的服務(wù)器資源。

    ? ? 獲得想要訪問的資源或者被拒絕之后,根據(jù)結(jié)果構(gòu)建響應(yīng)報文,最后將構(gòu)建好的響應(yīng)報文回送給客戶端。

    ? ? 下面是一個用JAVA實現(xiàn)的簡單web服務(wù)器demo:

    ? ?

    1 import java.io.DataInputStream; 2 import java.io.PrintStream; 3 import java.net.ServerSocket; 4 import java.net.Socket; 5 public class WebServer { 6 7 /** 8 * @param args 9 */ 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 //i對線程標(biāo)記,port為監(jiān)聽的機器端口號 13 int i=1,port=80; 14 ServerSocket serverSocket=null; 15 Socket socket=null; 16 try { 17 //新建一個服務(wù)器監(jiān)聽對象 18 serverSocket=new ServerSocket(port); 19 System.out.println("listening!!"); 20 //連續(xù)監(jiān)聽客戶端請求 21 while (true) { 22 socket=serverSocket.accept();//這里會等待客戶端的請求 23 new ConnectionThread(socket, i).start();//一旦接受到客戶端請求,便開啟請求事務(wù)處理線程對請求進行異步處理 24 i++; 25 } 26 } catch (Exception e) { 27 // TODO: handle exception 28 } 29 } 30 } 31 //事務(wù)處理線程 32 class ConnectionThread extends Thread{ 33 Socket socket=null; 34 int count; 35 public ConnectionThread(Socket s,int i) { 36 // TODO Auto-generated constructor stub 37 socket=s; 38 count=i; 39 } 40 public void run() { 41 try { 42 String ip=socket.getInetAddress().toString();//獲取ip 43 int destport=socket.getPort();//獲取端口 44 System.out.println("Client:"+ip+":"+destport); 45 PrintStream outStream=new PrintStream(socket.getOutputStream());//獲取輸出流 46 DataInputStream inStream=new DataInputStream(socket.getInputStream());//獲取輸入流 47 StringBuilder inString=new StringBuilder(); 48 String temp; 49 //打印接收到的請求 50 while (!(temp=inStream.readLine()).equals("")) { 51 inString.append(temp+"\n"); 52 } 53 System.out.println("Request:\n"+inString.toString()); 54 //向客戶端返回特定的響應(yīng)首部 55 outStream.println("HTTP/1.0 200 OK"); 56 outStream.println("Content-Type:text/html"); 57 outStream.println("Content-Length:"+"This is a test!!".length()); 58 outStream.println(""); 59 outStream.println("This is a test!!"); 60 outStream.flush(); 61 } catch (Exception e) { 62 // TODO: handle exception 63 } 64 } 65 }

    訪問localhost的請求報文:

    demo的響應(yīng)報文:

    頁面效果就是顯示一句話:

    可以看到,響應(yīng)報文的傳輸方法就是按一定格式通過流進行傳送。

    這章沒什么好說的,就到這里咯~

    轉(zhuǎn)載于:https://www.cnblogs.com/littlewish/archive/2013/01/29/2882173.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的web服务器的简单实现——HTTP权威指南读书心得(七)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。