1. 程式人生 > >web伺服器基本原理及Tomcat配置

web伺服器基本原理及Tomcat配置

一、Web伺服器基本知識

轉自:http://www.cnblogs.com/fnng/archive/2012/11/08/2761713.html

 在開始瞭解Apache前,我們先熟悉一下web伺服器,因為apache也是web伺服器的一種。

Web系統由客戶端(瀏覽器)和伺服器端兩部分組成。Web系統架構也被稱為B/S架構。最常見的Web伺服器有Apache、IIS等,常用的瀏覽器有IE、Firefox、chrome等。當你想訪問一個網頁時,需要在瀏覽器的位址列中輸入該網頁的URL(Uniform Resource Locator,簡稱為URL)地址,或者是通過超連結連結到該網頁。瀏覽器會向該網頁所在的伺服器傳送一個HTTP請求,伺服器會對接收到的請求資訊進行處理,然後將處理的結果返回給瀏覽器,最終將瀏覽器處理後的結果呈現給使用者。

web伺服器端的工作流程

(1)客戶端傳送請求

  客戶端(通過瀏覽器)和Web伺服器建立TCP連線,連線建立以後,向Web伺服器發出訪問請求(如get)。根據HTTP協議,該請求中包含了客戶端的IP地址、瀏覽器的型別和請求的URL等一系列資訊。

(2)伺服器解析請求

  Web伺服器對請求按照HTTP協議進行解碼來確定進一步的動作,設計的內容有三鼐要點:方法(GET)、文件(/sample.html)、和瀏覽器使用的協議(HTTP/1.1)其中方法告訴伺服器應完動的動作,GET方法的含義很明顯是:伺服器應定位、讀取檔案並將它返回給客戶。

Web伺服器軟體現在就知道了,它應該找到檔案/sample.html,並使用HTTP/1.1協議將記憶體返回給客戶。資訊是經過與請求到來相同的連線發出的,所以伺服器不需要定們客戶或建立新的連線。

(3)讀取其它資訊(非必須步驟)

    Web伺服器根據需要去讀取請求的其它部分。在HTTP/1.1下,客戶還應給伺服器提供關於它的一些資訊。元資訊(metainformation)可用來描述瀏覽器及其能力,以使伺服器能據此確定如何返回應答。

(4)完成請求的動作

  若現在沒有錯誤出現,WWW伺服器將執行請求所要求的動作。要獲取(GET)一個文件,web伺服器在其文件樹中搜索請求的檔案(/sample.html)。這是由伺服器機器上作為作業系統一部分的檔案系統完成的。若檔案能找到並可正常讀取,則伺服器將把它返回給客戶。

如果成功:檔案被髮送出去。

  首先,web伺服器傳送一個狀態碼及一些描述資訊。既然檔案已經找到,則傳送狀態碼200,表示一切都OK ,文件隨後發出,因為傳送的資訊是HTML文件,所以Content-type 取值為text/html。文件長為1024個位元組,所以Content-type 取1024 。伺服器軟體的標識及檔案的時間屬性資訊也被包含在頭域中。

如果失敗:返回錯誤指示。

  如果請求的檔案沒有找到或找到但無法讀取,測請求無法滿足。這時將返回不同於200的狀態碼。最常見的問題是請求中的檔名拼寫有誤,所以伺服器無法找到該檔案。這種情況下,伺服器將傳送一個狀態碼---404 給客戶。

(5)關閉檔案和網路連線,結束會話。

當檔案已被髮郵或錯誤已發出後,web伺服器結束整個會話。它關閉開啟的的被請求檔案,關閉網路埠從而結束網路連線。有關的其它工作則是由客戶端來完成的,包括接收資料,並以使用者可讀的方式呈現出來。這些與伺服器無關。

apache架構                                                                             

  Apache 作為歷史最悠久的web伺服器,一直是web應用系統的首選,是世界上被廣泛應用的web 伺服器軟體,它可以執行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的web伺服器端軟體之一,也是流行架構LAMP的重要組成部分。

  作為世界上最流行的Web伺服器,Apache遵循的同樣是HTTP協議,預設埠號為80。下面來是apache 架構圖。

Apache 特點:

  •   支援最新的HTTP/1.1通訊協議。Apache是最先使用HTTP/1.1協議的Web伺服器之一,它完全相容HTTP/1.1協議並與HTTP/1.0協議向後相容。Apache已為新協議所提供的全部內容做好了必要的準備。
  •   支援多計算機平臺。Apache幾乎可以在所有的計算機作業系統上執行,包括主流的UNIX、Linux及Windows作業系統。
  •   配置檔案簡單,易操作。使用者可以通過直接修改Apache的配置檔案資訊來修改Apache,操作起來十分方便。
  •   支援實時監視伺服器狀態和定製伺服器日誌。Apache在記錄日誌和監視伺服器自身執行狀態方面提供了很大的靈活性,可以通過Web瀏覽器來監視伺服器的狀態,也可以根據自己的需要來定製日誌。
  •   支援多種方式的HTTP認證。
  •   支援Web目錄修改。使用者可以使用特定的目錄作為Web目錄。
  •   支援CGI指令碼,如Perl、PHP等。
  •   支援伺服器端包含指令(SSI)。
  •   支援安全Socket層(SSL)。
  •   支援FastCGI。
  •   支援虛擬主機。即通過在一臺伺服器上使用不同的主機名來提供多個HTTP服務。Apache支援基於IP、主機名和埠號三種類型的虛擬主機服務。
  •   跟蹤使用者會話。當用戶瀏覽基於Apache的Web站點時,可以通過Apache的mod_usertrack模組對其進行跟蹤。
  •   支援動態共享物件。Apache的模組可在執行時動態載入,這就意味著這些模組可以被裝入伺服器程序空間,從而減少系統的記憶體開銷。
  •   支援多程序。當負載增加時,伺服器會快速生成子程序來處理,從而提高系統的響應能力。
  •   支援第三方軟體開發商提供的功能模組。比如Apache載入mod_jserv模組後可以支援Java Servlet,這樣就可以執行Java應用程式了。
  •   支援多執行緒和多程序混合模型的MPM。 當MPM型別指定為worker時,由於是使用執行緒來處理,所以可以處理海量的請求,而系統資源的開銷要小於基於程序的伺服器。

Apache 工作模擬                                                    

  Apache 2.X  支援插入式並行處理模組,稱為多路處理模組(MPM)。在編譯apache時必須選擇也只能選擇一個MPM,對類UNIX系統,有幾個不同的MPM可供選擇,它們會影響到apache的速度和可伸縮性。

  Worker MPM 使用多個子程序,每個子程序中又有多個執行緒。每個執行緒處理一個請求,該MPM通常對高流量的伺服器是一個不錯的選擇。因為它比prefork MPM需要更少的記憶體且更具有伸縮性。

  Prefork MPM : 使用多個子程序,但每個子程序不包含多執行緒。每個程序只處理一個連線。在許多系統上它的速度和worker MPM一樣快,但是需要更多的記憶體。這種無執行緒的設計在某些性況下優於worker MPM,因為它可在應用於不具備執行緒安全的第三方模組上(如 PHP3/4/5),且在不支援執行緒除錯的平臺上易於除錯,另外還具有比worker MPM更高的穩定性。 

   (後面會介紹如果這兩種模式以及apache更多的設定與監控等)

二、附一個socket例項加深web訪問理解

(摘自 傳智播客 視訊)

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * Socket伺服器端程式:本地資源共享給外地訪問
 */

public class ServerTest {

	public static void main(String[] args) throws Exception{
		//1、建立ServerSocket
		ServerSocket server=new ServerSocket(8888);
		System.out.print("伺服器已經啟動成功。。。");
		//2、接收客戶端的連線
		Socket socket=server.accept();
		//3、讀取本地檔案html檔案
		FileInputStream in=new FileInputStream(new File("E:/bookmarks_2017_3_7.html"));
		//4、構件資料輸出通道
		OutputStream out=socket.getOutputStream();
		//5、傳送資料
		byte[] buf=new byte[1024];
		int len=0;
		while((len=in.read(buf))!=-1){
			out.write(buf,0,len);
		}
		//6、關閉
		out.close();
		in.close();
	}

}
執行伺服器端程式ServerTest;然後在瀏覽器輸入 http://localhost:8888即可有效果

三、Tomcat 8配置

轉自:http://blog.csdn.net/zhang5690800/article/details/49929565

首先感謝博主“六號碼頭”,本文是在他的原創文章《Apatch Tomcat8.0 的配置遇到問題全面總結》的基礎上又做的補充。這裡寫圖片描述

此文章預設已經安裝並配置好了Android開發環境。

這裡少說兩句關於Tomcat8的下載及安裝。

直接上Tomcat官網上下載Windows64位的zip版

這裡寫圖片描述

下載並解壓,我的放到了D盤,解壓目錄為D:\apache-tomcat-8.0.28,如下圖:

這裡寫圖片描述

下面是Tomcat相關的環境變數(正確寫法)【其實RUNNING.txt檔案裡邊也說了一下配置步驟哈,只不過English】

變數
CATALINA_BASE D:\apache-tomcat-8.0.28
CATALINA_HOME D:\apache-tomcat-8.0.28
TOMCAT_HOME D:\apache-tomcat-8.0.28
JAVA_HOME C:\Program Files\Java\jdk1.8.0_60

這其中有幾點要注意:

  1. JAVA_HOME中的路徑是JDK的路徑,別錯寫成JRE的路徑;
  2. JAVA_HOME中的路徑不能使用分號結尾,如:C:\Program Files\Java\jdk1.8.0_60;
  3. CATALINA_BASE,CATALINA_HOME,TOMCAT_HOME中的路徑不能以”\”結尾, 
    如:E:\Java\apache-tomcat-6.0.29\

如果以上幾點都做對了就不會出現閃退的問題。

最初我點選bin中的startup.bat檔案,會出現閃退的問題。

要找出是哪裡的原因導致的閃退,方法如下:

1、右擊startup.bat檔案,選擇編輯 
2、在最後一行的下一行寫上“pause” (暫停) 
3、再次執行startup.bat檔案,這是DOS介面會顯示錯誤原因

我的錯誤原因是:The CATALINA_HOME environment variable is not defined correctly.

解決方法就是參考了前面說的幾點,全都確保改對了,之後再執行就成功了,如下圖:

這裡寫圖片描述

顯示啟動時間743ms,至此還有一布需要驗證,就是在瀏覽器中輸入http://localhost:8080/,看能否進入下面頁面。

這裡寫圖片描述

順便說一句,如果你把剛剛那個DOS介面關閉,你再進http://localhost:8080/就進不去了,必須是開著startup.bat那個DOS介面才行,不知道大家是不是也這樣。

大功告成! ……..一下午沒白忙活 這裡寫圖片描述

做專案時經常遇到的關於Tomcat的問題: http://blog.csdn.net/qq_26625037/article/details/52439094

1.環境變數

1.新建系統變數:變數名:CATALINA_BASE     變數值:D:\apache-tomcat-7.0.70(Tomcat目錄)
2.新建系統變數:變數名:CATALINA_HOME     變數值:D:\apache-tomcat-7.0.70(Tomcat目錄)
3.開啟PATH,新增變數值:%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;(這裡有個;一定要注意)
   在環境變數中修改新增變數時,一定要注意分號、空格,是否有多餘的字母。作者就是因為path路徑中多了一個字母,怎麼都配置不成功。如果配置不成功,一定要反覆檢查。
   以上錯誤,非常容易出現錯誤:CATALINA_HOME或是JAVA_HOME沒有配置好。如錯誤提示“The CATALINA_HOME environment variable is not defined correctly”

2.亂碼  

1.配置 server.xml

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"URIEncoding="UTF-8" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8"/>  

3.Tomcat部署成功,瀏覽器顯示空白 

1.通過cmd輸入netstat -a -n來檢視Tomcat當前繫結的埠

2.http://localhost:8080或者http://127.0.0.1:8080是否能夠訪問小貓頁面
3.檢視Tomcat目錄下是否存在ROOT檔案   不存在就重新解壓一份    

4.使用startup啟動Tomcat閃退

1.找到Tomcat目錄下bin\startup.bat右擊->編輯, 在檔案頭新增如下:
SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51 (java jdk目錄)
SET TOMCAT_HOME=D:\apache-tomcat-7.0.70(解壓後的tomcat檔案目錄)  
2.找到Tomcat目錄下bin\shutdown.bat右擊->編輯, 在檔案頭新增如下:
SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51 (java jdk目錄)
SET TOMCAT_HOME=D:\apache-tomcat-7.0.70(解壓後的tomcat檔案目錄) 

四、URL查詢過程

轉自:http://www.cnblogs.com/haozhengfei/p/6537825.html

Tomcat之URL查詢的過程

webapps目錄: tomcat共享目錄。需要共享的本地資源放到此目錄中。

Tomcat的目錄結構

五、測試servlet學習

轉自:http://www.cnblogs.com/xingyunblog/p/3758491.html

【總結一下步驟:1、編寫一個繼承HttpServlet的servlet程式;測試用的話只需要重寫其doGet方法;2、找到寫好的類的.class位元組碼檔案,將其【包目錄+檔案】拷貝到Tomcat的一個web應用(預設webapps資料夾下邊新建的資料夾)中的WEB-INF的classes檔案下邊;3、在web應用下的[WEB-INF資料夾下]web.xml檔案配置servlet;4、氣動Tomcat伺服器,執行訪問。】

操作方法:

1.新建工程;

File——>new——>Java Project——>TestServlet(工程名稱)——>Finish.

2.載入servlet-api.jar類包;【其實這個步驟有個更簡單便捷的做法:在計算機內找到servlet-api.jar這個包,然後右鍵複製,貼上到Eclipse的專案工程目錄內,然後右鍵工程內的該包,Build Path->Add to Build Path

TestServlet(右鍵)——>Build Path——>Configure Build Path——>Library

——>Add External JAR Selection——>(瀏覽在tomcat的lib目錄下找到servlet-api.jar選中後點擊開啟)。——> OK

3.新建類HelloWorldServlet;

程式碼如下:

複製程式碼
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class HelloWorldServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        System.out.println("doGet");
        response.getWriter().write("<a href=http://www.baidu.com>go</a>");
    }

}
複製程式碼

4.切換成navigator檢視複製生成的class類。

5.在tomcat的webapps根目錄下新建一個資料夾名稱為test。

6.進入test資料夾,新建一個資料夾名稱為WEB-INF

7.新建一個檔名稱為web.xml,裡面內容如下:

複製程式碼
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5"> 
<servlet> 
 <!--servlet的內部名稱,可以自定義-->     
 <servlet-name>HW</servlet-name> 
 <!--servlet類名稱:包名+簡單類名-->    
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>   
<servlet-mapping>  
 <!--servlet的內部名稱,跟上邊保持一致-->      
<servlet-name>HW</servlet-name>
 <!--servlet的訪問名稱,/名稱--> 
<url-pattern>/ab</url-pattern> </servlet-mapping></web-app> 複製程式碼

注意:

HW名稱上面的和下面的一致即可,HelloWorldServlet是你要測試的class檔案的名稱。

/ab是當瀏覽器訪問:

http://127.0.0.1:8080/test/ab

時呼叫這個servelet

8.新建一個名稱為classes的資料夾,把剛才複製的class檔案放到裡面。【這裡需要把包路徑+類檔案拷貝到這裡邊


9.啟動tomcat服務,我用的apache-tomcat-7.0.54版本,設定好環境變量了,所以可以開始——執行——輸入:startup就可以開啟服務。

如果是tomcat6.0,那麼開啟服務需要雙擊這個開啟服務。當然,也可以在開始選單裡面找到tomcat服務管理進行開啟服務。



10.開啟瀏覽器輸入網址後回車:
http://127.0.0.1:8080/test/ab

說明:

本servelt程式碼功能是

1.tomcat後臺打印出來doget,

2.當點選go後,自動跳轉到百度主頁!

六、eclipse環境下如何配置tomcat,並且把專案部署到Tomcat伺服器上

相關部落格:
http://m.blog.csdn.net/article/details?id=51830104、http://blog.csdn.net/shumago/article/details/47680625
http://blog.csdn.net/yerenyuan_pku/article/details/51852086、http://blog.csdn.net/lucklq/article/details/7621807
http://www.cnblogs.com/smyhvae/p/4046862.html
不知道怎麼回事,配置時候總是出問題“Could not load the Tomcat server configuration at \Servers\Tomcat v8.0 Serve”;怒了,先試試MyEclipse吧;
上邊部落格中提到的一個Java EE切換跟web.xml自動生成
“下面來說一下怎麼修改html頁面的字型樣式
Windows ->Preferences->General->Appearance->Colorsand Fonts->Basic->Text Font
我一般都會選擇字型為Courier New,大小設為11,感覺這個挺好看的 。” 引自:http://blog.csdn.net/tommonkey/article/details/51848579