一、HTTP協(xié)議
1.1協(xié)議的作用及版本
1.1.1HTTP是Hyper Text Transfer Protocol(超文本--html傳輸協(xié)議)。
1.1.2HTTP協(xié)議的作用用戶描述客戶端與服務器間的數(shù)據(jù)傳遞的。
1.1.3:Http協(xié)議的版本:
1.0:特點:每次請求服務器上的資源都要建立新的連接,響應完畢后都會關(guān)閉連接。是無狀態(tài)的協(xié)議。
1.1:特點:在一次TCP/IP連接的基礎(chǔ)上可以發(fā)出多次請求和得到多次的響應。比1.0多了一些請求和響應頭。
1.2協(xié)議的組成
1.2.1請求部分:
GET /App1/1.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: localhost:8080
Connection: Keep-Alive
username=admin&password=123
請求部分由三部分組成的:
請求行:位于第一行
請求消息頭:從第二行開始至第一個空行結(jié)束
請求正文:從第一個空行之后的都是正文
1.2.2響應部分:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"65-1366335797484"
Last-Modified: Fri, 19 Apr 2013 01:43:17 GMT
Content-Type: text/html
Content-Length: 65
Date: Fri, 19 Apr 2013 02:06:23 GMT
Warnning:w1
Warnning: w2
hello http
<a href="b.html">click</a>

響應部分由三部分組成的:
響應行:位于第一行
響應消息頭:從第二行開始至第一個空行結(jié)束
響應正文:從第一個空行之后的都是正文
1.3協(xié)議詳細講解
請求行:GET /App1/1.html HTTP/1.1
GET:請求方式。默認的請求方式。其他常用的請求方式還有POST。
GET的特點:默認的請求方式。
/App1/c.html?username=sdsfds&password=234324
把表單的請求的數(shù)據(jù)放在了請求的URI的后面。?username=sdsfds&password=234324
這樣不好:暴露數(shù)據(jù);請求行長度有限。
POST的特點(經(jīng)常使用的):借助HTML中的form表單。<form action="c.html" method="post">
請求參數(shù)出現(xiàn)在正文部分。長度木有限制。相對安全。
---------------------------
/App1/1.html:請求的資源的URI。
---------------------------
HTTP/1.1:客戶端使用的協(xié)議的版本
響應行:HTTP/1.1 200 OK
HTTP/1.1:服務器用的協(xié)議版本
200:響應碼。代表服務器處理的結(jié)果的一種表示
200:正常
302/307:重定向
304:服務器的資源沒有被修改
404:請求的資源不存在
500:服務器報錯了
OK:響應碼描述
請求消息頭:向服務器傳遞附加信息
Accept:通知服務器,瀏覽器可以接受的MIME類型。(文件系統(tǒng)中用文件擴展名區(qū)分數(shù)據(jù)的類型。網(wǎng)絡(luò)上用MIME類型來區(qū)分數(shù)據(jù)類型。Tomcat\conf\web.mxl)
MIME類型名稱:大類型/小類型
Accept-Charset:通知服務器,瀏覽器支持的字符集
Accept-Encoding:通知服務器,瀏覽器能夠解碼的數(shù)據(jù)壓縮方式。比如:gzip
Accept-language:通知服務器,所希望的語言
Host:請求的主機和端口
*Referer:是一個URL地址。取值是當前頁面之前的那個頁面地址的。防盜鏈
*Content-Type:通知服務器,請求正文的MIME類型。
取值:application/x-www-form-urlencoded默認值
對應的是form表單的enctype屬性
If-Modified-Since:通知服務器,緩存的文件的最后修改時間。
User-Agent:通知服務器,瀏覽器類型.
Content-Length:表示請求消息正文的長度
Connection:表示是否需要持久連接。如果服務器看到這里的值為“Keep -Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1默認進行持久連接
*****Cookie:這是最重要的請求頭信息之一(會話有關(guān))
響應消息頭:
*Location:通知客戶端,指示新的資源的位置(結(jié)合302/307來用。請求重定向)
Server:通知客戶端,服務器的類型
*Content-Encoding:通知客戶端,響應正文的壓縮編碼方式。常用的是gzip。
*Content-Length:通知客戶端響應正文的數(shù)據(jù)大小
*Content-Type:通知客戶端響應正文的MIME類型
*Refresh:讓瀏覽器自動刷新。取值為整數(shù)(刷新的時間間隔,單位是秒)
Refresh:3
Refresh:3;URL=其他資源的URI
*Content-Disposition:通知客戶端,以下載的方式打開資源。
Content-Disposition:attachment;filename=1.jpg
*****Set-Cookie:SS=Q0=5Lb_nQ; path=/search服務器端發(fā)送的Cookie(會話有關(guān))
*Expires: -1 網(wǎng)頁的有效時間。單位是毫秒
*Cache-Control: no-cache (1.1)
*Pragma: no-cache (1.0) 通知客戶端不要緩存
二、Servlet概述
1、Servlet是SUN公司制定的一套開發(fā)動態(tài)網(wǎng)頁的技術(shù)。
2、JavaEE相關(guān)的類,包名一般都是以javax開頭
三、編寫第一個Servlet案例應用
1、建立一個標準的JavaWeb應用目錄
FirstApp:
WEB-INF:
classes:
lib:
web.xml
2、進入classes目錄,建立一個文本文件(所有的Servlet類都必須間接或直接實現(xiàn)javax.servlet.Servlet接口)
package cn.itcast.servlet;
import java.io.*;
import javax.servlet.*;
public class FirstServlet extends GenericServlet{
public void service(ServletRequest req,
ServletResponse res)
throws ServletException,
java.io.IOException{
OutputStream out = res.getOutputStream();
out.write("Hello Servlet".getBytes());
out.close();
}
}
3、進入classes目錄,對FirstServlet進行編譯:
前提:把servlet-api.jar加入到你的構(gòu)建路徑中.set classpath=%classpath%;C:\apache-tomcat-6.0.35\lib\servlet-api.jar
執(zhí)行:javac -d . FirsetServlet.java
4、修改web.xml,對FirsetServlet進行url地址映射,配置如下:
<?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-name>FirstServlet</servlet-name>
<servlet-class>cn.itcast.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
5、把你的應用部署到Tomcat中。
6、訪問地址:http://localhost:8080/FirstApp/hello就可以看到寫的Servlet類的輸出結(jié)果了。
四、Servlet的生命周期
容器最終要調(diào)用service方法為客戶進行服務
1、Servlet接口中的常用方法:
public void init(ServletConfig config):初始化。Servlet類被實例化后就執(zhí)行,且執(zhí)行一次。由容器進行調(diào)用
public void destroy():銷毀Servlet對象。由容器進行調(diào)用
在內(nèi)存中一個Servlet只有一個實例。針對不同的用戶請求,容器采用多線程的機制調(diào)用service方法的。
Servlet實例對象和初始化方法,默認情況下,只有第一次訪問時才執(zhí)行,且只執(zhí)行一次。
希望在應用被Tomcat加載完畢后(此時還沒有任何人訪問),就實例化并完成初始化Servlet的工作?
<servlet>startup</servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>cn.itcast.servlet.FirstServlet</servlet-class>
<load-on-startup>2</load-on-s
五、Servlet的孩子們(模板方法設(shè)計模式)
如果設(shè)計與HTTP協(xié)議有關(guān)的Servlet,一般選擇集成javax.servlet.http.HttpServlet.
不要覆蓋其中的service(ServletRequest req,ServletResponse resp)方法,而應該覆蓋掉,doXXX方法。
doXXX就是根據(jù)你的請求方式來的。
HttpServlet中的service方法是典型的模板方法設(shè)計模式的具體應用。
六、Servlet配置
1、一個Servlet可以被映射到多個URL地址上
2、URL地址映射還支持通配符*
方式一:以*開頭,以擴展名結(jié)尾。比如 <url-pattern>*.do</url-pattern>
方式二:以/前綴開頭,以*結(jié)尾。 比如<url-pattern>/action/*</url-pattern>
3、多個Servlet使用通配符時,有可能有多
以"/"開頭(方式二)要比"*"開頭(方式一)優(yōu)先級高
都以"/"開頭,還是有多個匹配,找最匹配的
4、如果一個Servlet的映射為一個"/",就稱之為默認的Servlet,它負責處理沒有映射路徑的URL請求的響應。
個配置的Servlet,到底執(zhí)行哪一個?
原則:優(yōu)先級
絕對匹配
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。