正文 回到頂部 web服務(wù)器是如何工作的 1989年的夏天,蒂姆.博納斯-李開發(fā)了世界上第一個(gè)web服務(wù)器和web客戶機(jī)。這個(gè)瀏覽器程序是一個(gè)簡單的電話號碼查詢軟件。最初的web服務(wù)器程序就是一個(gè)利用瀏覽器和web服務(wù)器軟件之間的聯(lián)系,將存儲在硬盤上的文件傳遞給遠(yuǎn)程的讀者。 web服務(wù)器軟件主要是提供web服務(wù)的軟件,為瀏覽器提供http數(shù)據(jù)的支持。 它無非就是把硬盤上的文件 以http數(shù)據(jù)流 的形式提供給web服務(wù)器,這就是它的基本用途。這個(gè)基本用途就是作為web服務(wù)器軟件的發(fā)明人蒂姆.博納斯-李發(fā)明web服務(wù)器的初衷。 需要傳遞的硬盤上 的文件 的格式是html格式的標(biāo)記性語言的文件。web服務(wù)器軟件在接受到瀏覽器的訪問請求的時(shí)候,將直接不加任何修改的將這個(gè)html文件傳遞到遠(yuǎn)程瀏覽器端,傳輸協(xié)議是TCP的HTTP協(xié)議。 再看下圖,深入了解他的原理。 這是一個(gè)最初的web服務(wù)器軟件 的原理圖,也是一個(gè)支持html格式文件服務(wù) 的所以web服務(wù)器 的原理圖,即使是最著名 的Apache HTTP Server也是這個(gè)原理。 所謂的靜態(tài)頁面是指本地文件直接被web服務(wù)器取得的這種web頁面。而想Asp,jsp,php這樣的所謂動(dòng)態(tài)頁面是怎么個(gè)原理呢? 回到頂部 支持jsp的web服務(wù)器 的原理 動(dòng)態(tài)頁面 的web服務(wù)器和靜態(tài)頁面的web服務(wù)器之間僅有一點(diǎn)的區(qū)別,就是在本地端得到html格式信息的方法不是直接從文件中讀取,而是從程序電腦生成信息中獲取而已。 那么,支持jsp的動(dòng)態(tài) 的web服務(wù)器的原理又是什么養(yǎng)的呢?其實(shí)就是多了一個(gè)將jsp文件轉(zhuǎn)換成java文件并且編譯 的過程,然后運(yùn)行那個(gè)被編譯的Class文件,從而時(shí)期得到要返回給了瀏覽器的格式信息,然后將其返回給遠(yuǎn)端的瀏覽器。 下圖玩他的原理圖 大家估計(jì)都要已經(jīng)看出來了,與返回靜態(tài)頁面的區(qū)別是,返回的信息是由過程生成的。其實(shí),原理很簡單,無非就是讀文件發(fā)出去而已。 回到頂部 常用的web服務(wù)器 前面介紹的就是web服務(wù)器的 工作原理,java程序猿應(yīng)該對下面的這些軟件做到非常熟悉 1.Apache HTTP Server Apache也許是時(shí)間最久也是最流的 http服務(wù)器軟件??焖?、可靠,通過簡單的API擴(kuò)展,Perl/Python解釋器可悲編譯到服務(wù)器當(dāng)中,完全免費(fèi),源代碼開放。 官方的站點(diǎn)為http://httpd.apache.org/. 2.Tomact 是目前業(yè)界被最廣泛認(rèn)可 的一個(gè)web服務(wù)器,他是Java Servlet2.2和Java Server Pages1.1技術(shù)的標(biāo)準(zhǔn)實(shí)現(xiàn),是基于Apache許可證下的開發(fā) 是自由軟件,由Jakarta項(xiàng)目組開發(fā), 官方站點(diǎn)是http://tomcat.apache.org/ 研究一下web服務(wù)器的源程序 既然web服務(wù)器的原理如此簡單,那就手動(dòng)自己開一個(gè)試試吧。 1.步驟一、確定用TCP作為服務(wù)傳輸協(xié)議 復(fù)制代碼 package yxh; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * * @author Baron * @version 創(chuàng)建時(shí)間:2017年1月2日 * @Dsecription 確定用TCP 作為服務(wù)傳輸協(xié)議,首先做一個(gè)main函數(shù),建立Socket ,并用一個(gè)“死循環(huán)” 的形式 * 監(jiān)聽指定端口。 */ public class HttpServer { public static String ROOT = "./wwwroot"; ///默認(rèn)root文件夾 public static String defaultPage = "index.html"; //默認(rèn)文件的文件名 public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8000); while(true) { //阻塞,等待瀏覽器的連接 Socket sk = server.accept(); System.out.println("Accepting Connection ...\n"); //啟動(dòng)服務(wù)線程 new HttpThread(sk).start(); } &n