1. 程式人生 > >web開發常識(http協議以及JAVA WEB伺服器的配置)

web開發常識(http協議以及JAVA WEB伺服器的配置)

JavaWeb伺服器的配置使用

 WEB開發的前景

軟體開發的兩種架構:B/S 和 C/S

 隨著網路頻寬的不斷提升,雲端計算概念的提出,瀏覽器只要足夠強大,c/s架構立馬就會被淘汰,不僅c/s架構會被淘汰,軟體最終都會消失、作業系統都可以沒有,最終將會是b/s架構的天下,也就是瀏覽器+搜尋引擎的天下。所有現在桌面軟體提供的功能,最後都由網站提供,也就是說,將來開啟電腦就是一個瀏覽器,想要什麼服務,通過搜尋引擎一找,就可以在網上找到相應的服務,用就是了。所以web開發人員是現在最流行的崗位。


WEB 開發的相關知識

WEB,在英語中web即表示網頁的意思,它用於表示Internet主機上供外界訪問的資源。
Internet上供外界訪問的web資源分為:
  • 靜態web資源(如HTML頁面):指web頁面中供人們瀏覽的資料始終是不變的。
  • 動態web資源:指web頁面中供人們瀏覽的資料是由程式產生的,不同時間點訪問web頁面看到的內容各不相同。
靜態web資源開發技術: HTML 常用的動態web資源開發技術:
  • JSP/Servlet、ASP、PHP、Python等
  • 在JAVA中,動態的web資源開發技術統稱為Javaweb。
WEB系統是怎樣通訊的?

WEB開發中的伺服器:

伺服器原理:網路程式設計 伺服器的概念:
  • 硬體:就是一臺電腦
  • 軟體:需要在這臺電腦上安裝伺服器的軟體
  • 如果一臺電腦上安裝了伺服器的軟體的話,那麼這臺電腦就可以成為WEB伺服器。
訪問:
  • IP+埠號
  • 如果是域名—>解析成IP地址—>www.baidu.com
  • 如果預設埠是80 的可以不寫
常見的WEB伺服器: WebLogic是BEA公司的產品,是目前應用最廣泛的WEB伺服器,支援JavaEES規範,而且不斷地完善適應新的開發求,啟動介面如下圖:
另一個常用的WEB伺服器是IBM公司的WebSphere,支援J2EE規範,啟動介面如下:
在小型的應用系統或者有特殊需要的系統中,可以使用一個免費的WEB伺服器:Tomcat,該伺服器支援全部的JSP以及Servlet規範,啟動介面如下:

Tomcat伺服器

Tomcat官方站點:http://jakarta.apache.org
獲取Tomcat安裝程式包
tar.gz(zip)檔案是Linux作業系統下的安裝版本
exe檔案是Windows系統下的安裝版本
zip檔案是Windows系統下的壓縮版本 
安裝Tomcat --- 配置JAVA_HOME
注意事項: Tomcat的伺服器不能安裝或解壓放到含有中文和空格的路徑的資料夾內。
如果想要啟動伺服器,必須安裝java和配置JAVA_HOME。
可以在startup.bat的檔案中最後一行加入暫停字元:pause
雙擊 bin 目錄下的 startup.bat 檔案
輸入 http://localhost:8080/,顯示如下介面代表安裝成功

Tomcat常見的啟動問題:

 (1)JAVA_HOME 環境變數
  • 在Windows中設定JAVA_HOME環境變數
  • JAVA_HOME路徑必須是JDK不可以是JRE
(2)端口占用問題
  • WindowsXP使用Fport工具
  • win7使用DOS命令netstat  -ano  
  • win7自帶World wide web publish IIS 服務預設佔用埠80
(3)CATALINA_HOME環境變數的設定問題(主要用於在DOS命令中啟動Tomcat)

Tomcat的端口占用問題:

 同時啟動了多個Tomcat(MyEclipse) (1)將佔用了的8080埠的程式結束掉。
  • 如果是XP系統,可以使用工具Fport.exe來找到佔用8080埠的應用程式,在工作管理員中結束該程式。
  • 通用版:在cmd命令視窗輸入netstat -ano,找到佔用8080埠的程式。因為沒有程式的名稱,通過PID結束程式。
(2)修改Tomcat自己的埠號。
  • 修改Tomcat目錄下的server.xml檔案中的埠配置,找到port項,修改埠,完成後重啟Tomcat伺服器。
  • 有系統自帶的IIS服務,佔用80埠。停止該服務。
  • win7 自帶 World wide web publish IIS服務 預設佔用埠80 可以通過輸入services.msc找到該服務,停止即可。極個別的系統會有系統核心佔用80埠的,通過資料中提供的檔案解決該問題
Tomcat伺服器與Servlet版本關係:
Tomcat的目錄結構:

WEB應用程式

(1)WEB應用程式指供瀏覽器訪問的程式,通常也稱為WEB應用。 (2)一個web應用由多個靜態web資源和動態web資源組成,如:
  • html、css、js檔案 --- 靜態web資源
  • Jsp檔案、java程式、支援jar包、 ---- 動態web資源
  • 配置檔案等等…..
  • 組成web應用的這些檔案通常我們會使用一個目錄組織,這個目錄稱之為web應用所在目錄(網站的根目錄)
 (3)WEB應用開發好後,若想供外界訪問,需要把web應用所在的目錄交給web伺服器管理,這個過程稱之為虛擬目錄的對映。 (4)開發web應用時,不同型別的檔案有嚴格的存放規則,否則不僅可能會使web應用無法訪問,還會導致web伺服器報錯。web應用(網站目錄)的組成結構如下:

 使用MyEclipse配置Tomcat

  • 在window下找到servers中的tomcat( window -- 選項 -- MyEclipse -- servers -- 選擇tomcat -- 選擇Enable -- 選擇tomcat根目錄)
  • 選擇相應的版本後,配置本地的tomcat
  • 再配置本地的JDK(可選)
  • 配置成功後啟動伺服器
  • 在myeclipse中建立web專案,部署到tomcat中,啟動伺服器。
  • WebRoot目錄變成了虛擬路徑即訪問路徑了(虛擬路徑預設和專案名稱是相同的,不用去修改)
  • 如果直接複製專案,需要修改虛擬路徑(專案上右鍵--選擇屬性 -- MyEclipse -- web 修改虛擬路徑)
  • 擴充套件  window -- show view -- servers

Tomcat管理員的配置

在Tomcat中配置管理員主要是給使用者使用的。 可以在tomcat/conf/tomcat-user.xml中加入如下配置資訊。 <role rolename="manager"> <user username="admin" password="admin" roles="manager">

虛擬目錄的對映方式(如何部署WEB程式)

虛擬目錄的對映有三種方式: (1)將專案複製到webapps目錄下。即讓Tomcat自動對映,Tomcat伺服器會自動管理webapps目錄下的所有的web應用,並把它對映成虛擬目錄。換句話說,Tomcat伺服器webapps目錄下的web應用,外界可以直接訪問。 (2)(通過配置虛擬路徑的方式)直接修改配置檔案,寫到tomcat/conf/server.xml中      * 找到<Host>標籤,配置到Host標籤的中間。      * 目的:通過配置,配置訪問路徑,準確找到c:\bb的檔案            *<Context docBase="資料夾的真實目錄" path="虛擬路徑(訪問路徑)"></Context>            *<Context docBase="C:\bb" path="/itcast"></Context>            *訪問:http://localhost:80/itcast  (3)自己編寫一個配置檔案(推薦使用)     *自定義xxx.xml結尾檔案,在$CATALINA_HOME/conf/[enginename]/[hostname] directory目錄下     *把xxx當成虛擬(訪問)路徑     * 在XML的檔案中編寫。           *xml檔案在哪個目錄下?                     *$CATALINA_HOME/conf/[enginename]/[hostname] directory                     * 如果找引擎的名稱和主機的名稱,在server.xml中找到分別是<engine name="引擎名稱">...</engine>和                      <Host name="主機名稱"></Host> 的節點即可                     *tomcat/conf/Catalina/localhost/ccc.xml            *ccc.xml的檔案編寫內容如下:                     *<Context docBase="C:\cc"></Context>                     *訪問:http://localhost:80/ccc

Web系統通訊詳解:


配置虛擬主機: (1)  在一個tomcat伺服器中可以放置多個網站<Host>,所謂配置虛擬主機,就是在tomcat伺服器中配置一個網站。 (2)如需要在WEB伺服器中配置一個網站,需要使用Host元素進行配置,例如:<Host name="site1" appBase="c:\app"></Host> (3)配置的主機(網站)要想被外部訪問,必須在DNS伺服器或windows系統中註冊        C:\WINDOWS\system32drivers\etc\hosts (4)預設虛擬主機DefaultHost 訪問網站全過程分析
1、在瀏覽器輸入url地址
2、訪問本機域名解析檔案 hosts ======= c:\windows\system32\drivers\etc\ 
3、如果本機沒有查詢到域名,查詢網路上DNS伺服器 
4、域名解析後,獲得域名對應ip地址。根據ip和port訪問網路上指定主機和服務


真實開發網站過程
1、開發網站
2、將網站釋出web伺服器上 (公網ip)
3、在DNS域名解析伺服器上註冊域名,和伺服器ip繫結

實驗:在本機上搭建百度虛擬主機 =========== 注意:預設埠必須設定80 
1、抓取baidu主頁 
2、在c盤 新建虛擬主機目錄 c:\baidu 
3、在c:\baidu下新建 百度網站目錄 website (複製網站頁面到 website目錄)
4、在conf/server.xml 配置虛擬主機
<Host name="www.baidu.com"  appBase="C:\baidu"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
</Host>
5、在本機 hosts檔案新增 
192.168.1.250 www.baidu.com 
*** 測試 cmd中 ping www.baidu.com 測試hosts是否配置成功
6、將website配置 預設網站  在<Host> 元素內部新增<Context> 元素
<Context path="" docBase="website" />
7、將baidu.htm 配置預設歡迎頁面 conf/web.xml 
<welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>baidu.htm</welcome-file>
</welcome-file-list>
使用MyEclipse開發動態web程式

什麼是HTTP協議?

  •  客戶端連上web伺服器後,若想獲得web伺服器中的某個web資源,需遵守一定的通訊格式,http協議用於定義客戶端與web伺服器通訊的格式。
  •  基於TCP連線的傳輸協議
  • 預設埠是80
  • 基於請求-相應模式的協議
  • 通過Telnet命令 快速瞭解HTTP協議
  • 安裝IE瀏覽器外掛HttpWatch,檢視IE瀏覽器通過HTTP協議獲取某個頁面  

使用telnet命令演示HTTP協議

  • 啟動伺服器
  • cmd> telnet  localhost 80回車
  • telnet有一個亂碼問題 解決亂碼
  • 解決 Ctrl+] 回車
  • 注意:命令列中輸入的內容不能寫錯,一旦寫錯了 不支援刪除
  • GET /aa/1.html HTTP/1.1  
  • host:localhost
  • 輸入兩次回車

 HTTP協議簡介

  • HTTP是hypertext transfer protocol(超文字傳輸協議)的簡寫,它是TCP/IP協議的一個應用層協議,用於定義WEB瀏覽器與WEB伺服器之間交換資料的過程。
  • HTTP協議是學習JAVAWEB的基石,必須深入瞭解HTTP協議 才能管理和維護一些複雜的WEB站點。
  • HTTP協議的版本:HTTP/1.0 、HTTP/1.1

HTTP1.0和HTTP1.1的區別

  • HTTP/1.0是連結之後,馬上斷開
  • HTTP/1.1是連結之後,不會馬上斷開,還可以繼續操作,一段時間不操作後,會自動斷開。
  • 通過telnet命令可以很好的演示效果

HTTP請求

 客戶端連上伺服器後,向伺服器請求某個web資源,稱之為客戶端向伺服器傳送了一個HTTP請求。一個完整的HTTP請求包括以下內容:   一個請求行、若干請求頭、以及實體內容,如下所示:
Web伺服器通過客戶端傳送過來的這些請求資訊,就可以確定向請求者回送什麼資源,以及根據客戶端的環境資訊採用什麼方式進行回送等。

HTTP請求的細節——請求行

請求行中的GET稱之為請求方式,請求方式有:
  • POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT、CONNECT
  • 常用的有: GET、 POST
  • 使用者如沒有設定,預設情況下瀏覽器向伺服器傳送的都是get請求,例如在瀏覽器直接輸地址訪問,點超連結訪問等都是get,使用者如想把請求方式改為post,可通過更改表單的提交方式實現。
不管POST或GET,都用於向伺服器請求某個WEB資源,這兩種方式的區別主要表現在資料傳遞上:
  • 如請求方式為GET方式,則可以在請求的URL地址後以?的形式帶上交給伺服器的資料,多個數據之間以&進行分隔,例如:
  • GET /mail/1.html?name=abc&password=xyz HTTP/1.1
  • GET方式的特點:在URL地址後附帶的引數是有限制的,其資料容量通常不能超過1K。
  • 如請求方式為POST方式,則可以在請求的實體內容中向伺服器傳送資料,Post方式的特點:傳送的資料量無限制。
1、請求行
GET /day4/img.html HTTP/1.1 分為三個部分:請求方式、資源路徑、協議版本
HTTP請求方式定義8種,常用GET和POST兩種

GET和POST區別?
1) 區分哪些是GET請求? 哪些POST請求?
GET:在瀏覽器直接輸入URL、<a href=""> 、<form method="get" >
POST: <form method="post" >
2) GET請求資料位於請求行中 ,POST請求資料位於請求體中
GET /day4/form.html?username=zhangsan HTTP/1.1
POST /day4/form.html HTTP/1.1
...
username=lisi
3) GET請求資料在URL上顯示,所有有長度限制,通常是1kb 

HTTP請求的細節——訊息頭


Accept: text/html,image/*   客戶端識別檔案型別  
Accept-Charset: ISO-8859-1  客戶端字符集
Accept-Encoding: gzip   客戶端支援編碼型別 gzip 壓縮格式 
Accept-Language:zh-cn  客戶端語言
Host: www.itcast.com:80  訪問伺服器地址 
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT (重要) 和Last-Modified 一起使用 控制快取
Referer: http://www.itcast.com/index.jsp (重要)代表當前網頁的來源  防止盜鏈 
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 瀏覽器型別(檔案下載時,不同瀏覽器進行不同處理)
Connection: close/Keep-Alive   請求後連線是關閉還是保持
Date: Tue, 11 Jul 2000 18:23:51 GMT 請求時間 

重點:If-Modified-Since、referer、User-Agent

盜鏈:A網站直接通過連結,訪問B網站資源
防盜鏈原理,判斷請求中referer資訊 
****** 使用URL 和 URLConnection 偽造客戶端 
//防盜鏈
String referer = request.getHeader("referer");
if(referer!=null && referer.equals("http://localhost:8080/day03/index.html")){
// 有效
response.setContentType("text/html;charset=gbk");
response.getWriter().println("筆記本1000元");
}else{
// 無效
response.setContentType("text/html;charset=gbk");
response.getWriter().println("盜鏈真無恥!");
}

//URL偽造
URL url = new URL("http://localhost:8080/day03/referer");
URLConnection conn =url.openConnection();
conn.setRequestProperty("referer", "http://localhost/day03/index.html");

byte[] buf = new byte[1024];
InputStream is = conn.getInputStream();
int len = is.read(buf);
System.out.println(new String(buf,0,len));

3、請求體
多個數據之間用&分隔
name=value&name=value&name=value...

HTTP響應

一個HTTP響應代表伺服器向客戶端回送的資料,它包括:   一個狀態行、若干訊息頭、以及實體內容。
  在一個HTTP響應中,WEB伺服器通過響應向WEB客戶端描述客戶端的請求成功與否,以及它所傳送的資料型別等一些資訊,客戶端通過這些資訊,進而可以知道如何對資料進行處理。

HTTP響應的細節——狀態行

狀態行 格式:HTTP版本號  狀態碼  原因敘述<CRLF> 舉例:HTTP/1.1 200 OK 狀態碼用於表示伺服器對請求的處理結果,它是一個三位的十進位制數,響應狀態碼分為5類,如下所示:
狀態碼 含義
100~199 表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程
200~299 表示成功接收請求並已完成整個處理過程,常用200
300~399 為完成請求,客戶需進一步細化請求。例如,請求的資源已經移動一個新地址,常用302、307和304
400~499 客戶端的請求有錯誤,常用404
500~599 伺服器端出現錯誤,常用500

HTTP/1.1 200 OK 協議版本、狀態碼、描述資訊
Informational 1xx  資訊不足, 請求無法處理 Successful  2xx 請求成功處理 Redirection  3xx 請求已經處理,還需要客戶端有進一步操作 Client Error 4xx 客戶端錯誤 Server Error 5xx 伺服器端錯誤 200:請求成功處理,一切OK 302:請求重定向(A找B借錢,B通知A找C借錢,A找C借錢)A: 客戶端  B、C:伺服器 304:伺服器端資源沒有改動,通知客戶端查詢本地快取 404:客戶端訪問資源不存在 500:伺服器內部出錯 HTTP響應細節——常用響應頭

3) gzip壓縮 
工具-- internet選項 --- 設定 --檢視檔案 
+ 0.000! 0.097394 7553GET 200html http://localhost/


配置tomcat/conf/server.xml 在 Connector中配置 壓縮 


<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443“ compressableMimeType="text/html,text/xml,text/plain" compression="on"/>


+ 0.0000.093 3942715 GET200 htmlhttp://localhost/


4) Tomcat預設快取策略 If-Modified-Since Last-Modified 結合304 實現 
5) 禁用快取
Expires: -1  
Cache-Control: no-cache  
Pragma: no-cache 
防止瀏覽器不相容,如果網頁禁用快取後,不會在 工具-- internet選項 --- 設定 --檢視檔案 產生快取檔案