Tomcat與web程序結構與Http協議

telnet

一:打開telnet服務:
控制面板------> 程序和功能---> 打開或關閉windows功能---> 選中 Telnet客戶端--->確定
二:測試telnet服務是否已經打開:


C:\Users\Administrator>telnet -?


telnet [-a][-e escape char][-f log file][-l user][-t term][host [port]]
 -a      企圖自動登錄。除了用當前已登陸的用戶名以外,與 -l 選項相同。
 -e      跳過字符來進入 telnet 客戶端提示。
 -f      客戶端登錄的文件名
 -l      指定遠程系統上登錄用的用戶名稱。
         要求遠程系統支持 TELNET ENVIRON 選項。
 -t      指定終端類型。
         支持的終端類型僅是: vt100, vt52, ansi 和 vtnt。
 host    指定要連接的遠程計算機的主機名或 IP 地址。
 port    指定端口號或服務名。


三:使用:
先把tomcat 打開
C:\Users\Administrator>telnet localhost 80
輸入的字符看不到,按ctrl + ]即可
把下面兩行代碼粘進入,按兩次enter後即可將apache主頁打印出來.
GET / HTTP/1.1
Host:




將httpWathc professional啓用

internet屬性-->程序-->管理加載項-->將httpWathc professional啓用


修改html編輯器



windows-->General-->Editors-->File Association
 File types:--->*.html
 Associated editors:-->MyEclispe HTML Editor (locked by 'html' content type)
 default ok.




訪問http server的次數





例題:一個web頁面中,使用img標籤引用了三個圖片,當客戶端訪問服務器中的這個web頁面時,客戶端
總共訪問幾次服務器.即向服務器發送了幾次Http請求:
新建一個web project
在WebRoot中加入三個圖片
在WebRoot中建立一個img.html文件,關鍵內容爲:
<body>
<img  src="1.jpg">
<img  src="3.jpg">
<img  src="5.jpg">
</body>
將此工程發佈出去,在IE瀏覽器中打開HttpWatch professional,Record
輸入:http://localhost/myday02/img.html回車
結果:
 00:00:00.000 0.013122 GET304 text/htmlhttp://localhost/myday02/img.html
 00:00:00.017 0.007125 GET304 image/jpeghttp://localhost/myday02/1.jpg
 00:00:00.018 0.014125 GET304 image/jpeghttp://localhost/myday02/3.jpg
 00:00:00.018 0.039125 GET304 image/jpeghttp://localhost/myday02/5.jpg
即有四次訪問:一個html,三次圖片.


Http請求



一:概述:客戶端連上服務器後,向服務器請求某個web資源,稱之爲客戶端向服務端發送了一個HTTP請求.一個
     完整的Http請求包括如下內容:
     一個請求行,若干個請求頭,以及實體內容.
     請求行:請求行用於描述客戶端的請求方式.請求的資源名稱,以及使用的HTTP協議版本號
     多個請求行:消息頭用於描述客戶端請求哪臺主機,以及客戶端的一些環境信息等.
二:共有七種請求方式:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT
    常用的有GET,POST,默認的是get請求.可通過更改表單的提交方式實現.


三:不管post還是get,都用於向服務器請求某個web資源,這兩種方式的區別主要表現在數據傳遞上:
   1.get方式:可以在請求的url地址後以?的形式帶上交給服務器的數據.多個數據之間以&進行分隔:
             如:
        1.1: get方式的特點:在URL地址後附帶的參數是有限制的,其數據容量通常不能超過1K.
   2.POST方式:可以在請求的實體內容中向服務器發送數據,
        2.1: post方式的特點:傳送的數據量無限制.
---------------------------------------------------------------------------------
示例演示區別:
在WebRoot中建立一個img.html文件,關鍵內容爲:
<body>
<h2>get方式的請求</h2>
<form action="" method="get">
用戶名:<input type = "text" name = "name">
密&nbsp;碼:<input type="password" name = "password">
<input type = "submit" value="提交">
</form>
<hr size="8" color="red">

<h2>post方式的請求</h2>
<form action="" method="post">
用戶名:<input type="text" name="name">
密&nbsp;碼:<input type="password" name = "password">
<input type = "submit" value = "提交">
</form>

</body>


啓動tomcat,在瀏覽器中輸入:http://localhost/myday02/get_post.html
演示get:
結果一:
POST /myday02/get_post.html HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost/myday02/get_post.html
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 21
Connection: Keep-Alive
Cache-Control: no-cache


name=abc&password=123
User-Agent Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
結果二:瀏覽器的地址欄內容變爲:http://localhost/myday02/get_post.html?name=abc&password=123


在瀏覽器中輸入:http://localhost/myday02/get_post.html
演示post:
結果一:
POST /myday02/get_post.html HTTP/1.1
Accept: */*
Referer: http://localhost/myday02/get_post.html
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 21
Connection: Keep-Alive
Cache-Control: no-cache


name=abc&password=123
結果二:瀏覽器的地址欄內容依然爲:http://localhost/myday02/get_post.html


Http請求頭詳解


Accept: text/html,image/*      用於 告訴服務器,客戶端支持的數據類型.
Accept-Charset: UTF-8          用於 告訴服務器,客戶端支持的字符編碼
Accept-Encoding: gzip,compress    告訴服務器客戶機支持的數據壓縮格式.  (重點)
Accept-Language: en-us,zh-cn   用戶告訴服務器,客戶機接受語言.
Host: www.it315.org:80          告訴服務器要訪問那個主機
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT   這個用來實現和緩存相關的, 跟last-modified. (重點)
Referer: http://www.it315.org/index.jsp   用來實現防盜鏈 (重點 )
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)    客戶端的 類型.
Connection: close/Keep-Alive    用於連上服務器之後, 是否繼續保持連接.




Http響應

一:概述:一個Http響應代表服務器向客戶端回送的數據,它包括:
一個狀態行,若干消息頭,實體內容.
響應行:狀態行用於描述服務器對請求的處理結果
多個消息頭:用於描述服務器的基本信息,以及數據的描述,服務呂通過這些數據的描述信息,
 可以通知客戶端如何處理等一會它回送來的數據.
一個空行:
實體內容:代表服務器向客戶端回送的數據.
二:狀態行:
格式:HTTP版本號  狀態碼  原因敘述<CRLF>
舉例:HTTP/1.1 200 ok
狀態碼用於表示服務器對請求的處理結果,它是一個三位的十進制數.響應分爲五類.

重定向Redirect





/servlet/RedTest


重定向:
示例代碼:
在myday02中的myserver包中建立一個RedTest.java文件(Servler),內容爲:
package myserver;


import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class RedTest extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 302 + location 實現請求重定向.
* 應用場景:一般用來做登陸.
* 特點:1.會發生二次請求.
*   2.瀏覽器地址欄會發生變化.
*/

response.setStatus(302);
response.setHeader("location", "/myday02/get_post.html");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
開啓tomcat,在瀏覽器中輸入:http://localhost/myday02/servlet/RedTest
其自動變成:http://localhost/myday02/get_post.html
此爲重定向成功.
 00:00:00.000 0.018139 GET302 Redirect to http://localhost/myday02/get_post.htmlhttp://localhost/myday02/servlet/RedTest
 00:00:00.018 0.0280 GET (Cache) text/htmlhttp://localhost/myday02/get_post.html

Refresh刷新

重定向:
示例代碼:
在myday02中的myserver包中建立一個RefreshServelet.java文件(Servler),內容爲:
package myserver;


import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class RefreshServelet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//refresh頭實現定時刷新到某個頁面.
//一般可用作定時刷新,
//應用:股票,聊天室,
// response.setHeader("Refresh", "2;url=http://www.baidu.com");
response.setHeader("Refresh", "1");

}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}


}




gzip壓縮



壓縮:


把conf/server.xml中的第72行那段數據改爲:
 <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" compressableMimeType="text/html,text/xml,text/plain" compression="on" />


壓縮前: 00:00:00.000 0.03811599 GET200 text/html;charset=ISO-8859-1http://localhost/
壓縮後: 00:00:00.000 1.4012296 GET200 text/html;charset=ISO-8859-1http://localhost/
注意:把server.xml修改前是壓縮前,修改後把緩存清空後再訪問纔是壓縮後的,




Tocmcat默認的緩存策略

If-Modified-Since,Last-Modified結合304實現。
第一次訪問某個頁面時,服務器將數據發給客戶端,並在客戶端生成一個緩存,同時記下本頁面在服務器端被修改的時間:
Last-Modified: Sun, 05 May 2013 00:55:08 GMT 併發給客戶端,
當客戶端再次訪問同一個頁面時,將If-Modified-Since發給服務器,服務器讀取If-Modified-Since中的時間,
If-Modified-Since: Sun, 05 May 2013 00:55:08 GMT
將此數據中的時間與Last-Modified中的時間作對比,如果相同,則說明這個頁面自上次發給此客戶端後一直沒被修改,則服務器不再將數據發給客戶端,
讓客戶端從自己的緩存中讀取數據,
如果不同,則將數據發給客戶端,並在客戶端生成緩存,同時記下時間:Last-Modified,將本服務器中的這個頁面最後一次修改的時間發給客戶端,
這樣既能節約帶寬,又能提高響應時間。

Tomcat禁用緩存




Expires:-1
Cache-Control:no-cache
Pragma:no-cache




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章