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 |
這其中有幾點要注意:
- JAVA_HOME中的路徑是JDK的路徑,別錯寫成JRE的路徑;
- JAVA_HOME中的路徑不能使用分號結尾,如:C:\Program Files\Java\jdk1.8.0_60;
- 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