一面睛、HTTP協(xié)議
1.1協(xié)議的作用及版本
1.1.1HTTP是Hyper Text Transfer Protocol(超文本--html傳輸協(xié)議)昵时。
1.1.2HTTP協(xié)議的作用用戶描述客戶端與服務(wù)器間的數(shù)據(jù)傳遞的。
1.1.3:Http協(xié)議的版本:
1.0:特點(diǎn):每次請(qǐng)求服務(wù)器上的資源都要建立新的連接湾蔓,響應(yīng)完畢后都會(huì)關(guān)閉連接。是無(wú)狀態(tài)的協(xié)議砌梆。
1.1:特點(diǎn):在一次TCP/IP連接的基礎(chǔ)上可以發(fā)出多次請(qǐng)求和得到多次的響應(yīng)默责。比1.0多了一些請(qǐng)求和響應(yīng)頭。
1.2協(xié)議的組成
1.2.1請(qǐng)求部分:
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
請(qǐng)求部分由三部分組成的:
請(qǐng)求行:位于第一行
請(qǐng)求消息頭:從第二行開(kāi)始至第一個(gè)空行結(jié)束
請(qǐng)求正文:從第一個(gè)空行之后的都是正文
1.2.2響應(yīng)部分:
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>

響應(yīng)部分由三部分組成的:
響應(yīng)行:位于第一行
響應(yīng)消息頭:從第二行開(kāi)始至第一個(gè)空行結(jié)束
響應(yīng)正文:從第一個(gè)空行之后的都是正文
1.3協(xié)議詳細(xì)講解
請(qǐng)求行:GET /App1/1.html HTTP/1.1
GET:請(qǐng)求方式咸包。默認(rèn)的請(qǐng)求方式桃序。其他常用的請(qǐng)求方式還有POST。
GET的特點(diǎn):默認(rèn)的請(qǐng)求方式烂瘫。
/App1/c.html?username=sdsfds&password=234324
把表單的請(qǐng)求的數(shù)據(jù)放在了請(qǐng)求的URI的后面媒熊。?username=sdsfds&password=234324
這樣不好:暴露數(shù)據(jù)奇适;請(qǐng)求行長(zhǎng)度有限。
POST的特點(diǎn)(經(jīng)常使用的):借助HTML中的form表單芦鳍。<form action="c.html" method="post">
請(qǐng)求參數(shù)出現(xiàn)在正文部分嚷往。長(zhǎng)度木有限制。相對(duì)安全柠衅。
---------------------------
/App1/1.html:請(qǐng)求的資源的URI皮仁。
---------------------------
HTTP/1.1:客戶端使用的協(xié)議的版本
響應(yīng)行:HTTP/1.1 200 OK
HTTP/1.1:服務(wù)器用的協(xié)議版本
200:響應(yīng)碼。代表服務(wù)器處理的結(jié)果的一種表示
200:正常
302/307:重定向
304:服務(wù)器的資源沒(méi)有被修改
404:請(qǐng)求的資源不存在
500:服務(wù)器報(bào)錯(cuò)了
OK:響應(yīng)碼描述
請(qǐng)求消息頭:向服務(wù)器傳遞附加信息
Accept:通知服務(wù)器菲宴,瀏覽器可以接受的MIME類型贷祈。(文件系統(tǒng)中用文件擴(kuò)展名區(qū)分?jǐn)?shù)據(jù)的類型。網(wǎng)絡(luò)上用MIME類型來(lái)區(qū)分?jǐn)?shù)據(jù)類型喝峦。Tomcat\conf\web.mxl)
MIME類型名稱:大類型/小類型
Accept-Charset:通知服務(wù)器势誊,瀏覽器支持的字符集
Accept-Encoding:通知服務(wù)器,瀏覽器能夠解碼的數(shù)據(jù)壓縮方式谣蠢。比如:gzip
Accept-language:通知服務(wù)器粟耻,所希望的語(yǔ)言
Host:請(qǐng)求的主機(jī)和端口
*Referer:是一個(gè)URL地址。取值是當(dāng)前頁(yè)面之前的那個(gè)頁(yè)面地址的漩怎。防盜鏈
*Content-Type:通知服務(wù)器勋颖,請(qǐng)求正文的MIME類型。
取值:application/x-www-form-urlencoded默認(rèn)值
對(duì)應(yīng)的是form表單的enctype屬性
If-Modified-Since:通知服務(wù)器勋锤,緩存的文件的最后修改時(shí)間饭玲。
User-Agent:通知服務(wù)器,瀏覽器類型.
Content-Length:表示請(qǐng)求消息正文的長(zhǎng)度
Connection:表示是否需要持久連接叁执。如果服務(wù)器看到這里的值為“Keep -Alive”茄厘,或者看到請(qǐng)求使用的是HTTP 1.1(HTTP 1.1默認(rèn)進(jìn)行持久連接
*****Cookie:這是最重要的請(qǐng)求頭信息之一(會(huì)話有關(guān))
響應(yīng)消息頭:
*Location:通知客戶端,指示新的資源的位置(結(jié)合302/307來(lái)用谈宛。請(qǐng)求重定向)
Server:通知客戶端次哈,服務(wù)器的類型
*Content-Encoding:通知客戶端,響應(yīng)正文的壓縮編碼方式吆录。常用的是gzip窑滞。
*Content-Length:通知客戶端響應(yīng)正文的數(shù)據(jù)大小
*Content-Type:通知客戶端響應(yīng)正文的MIME類型
*Refresh:讓瀏覽器自動(dòng)刷新。取值為整數(shù)(刷新的時(shí)間間隔恢筝,單位是秒)
Refresh:3
Refresh:3;URL=其他資源的URI
*Content-Disposition:通知客戶端哀卫,以下載的方式打開(kāi)資源。
Content-Disposition:attachment;filename=1.jpg
*****Set-Cookie:SS=Q0=5Lb_nQ; path=/search服務(wù)器端發(fā)送的Cookie(會(huì)話有關(guān))
*Expires: -1 網(wǎng)頁(yè)的有效時(shí)間撬槽。單位是毫秒
*Cache-Control: no-cache (1.1)
*Pragma: no-cache (1.0) 通知客戶端不要緩存
二此改、Servlet概述
1、Servlet是SUN公司制定的一套開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)侄柔。
2共啃、JavaEE相關(guān)的類占调,包名一般都是以javax開(kāi)頭
三、編寫(xiě)第一個(gè)Servlet案例應(yīng)用
1移剪、建立一個(gè)標(biāo)準(zhǔn)的JavaWeb應(yīng)用目錄
FirstApp:
WEB-INF:
classes:
lib:
web.xml
2究珊、進(jìn)入classes目錄,建立一個(gè)文本文件(所有的Servlet類都必須間接或直接實(shí)現(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挂滓、進(jìn)入classes目錄苦银,對(duì)FirstServlet進(jìn)行編譯:
前提:把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赶站,對(duì)FirsetServlet進(jìn)行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、把你的應(yīng)用部署到Tomcat中贝椿。
6想括、訪問(wèn)地址:http://localhost:8080/FirstApp/hello就可以看到寫(xiě)的Servlet類的輸出結(jié)果了。
四烙博、Servlet的生命周期
容器最終要調(diào)用service方法為客戶進(jìn)行服務(wù)
1瑟蜈、Servlet接口中的常用方法:
public void init(ServletConfig config):初始化。Servlet類被實(shí)例化后就執(zhí)行渣窜,且執(zhí)行一次铺根。由容器進(jìn)行調(diào)用
public void destroy():銷毀Servlet對(duì)象。由容器進(jìn)行調(diào)用
在內(nèi)存中一個(gè)Servlet只有一個(gè)實(shí)例乔宿。針對(duì)不同的用戶請(qǐng)求位迂,容器采用多線程的機(jī)制調(diào)用service方法的。
Servlet實(shí)例對(duì)象和初始化方法详瑞,默認(rèn)情況下掂林,只有第一次訪問(wèn)時(shí)才執(zhí)行,且只執(zhí)行一次坝橡。
希望在應(yīng)用被Tomcat加載完畢后(此時(shí)還沒(méi)有任何人訪問(wèn))泻帮,就實(shí)例化并完成初始化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è)計(jì)模式)
如果設(shè)計(jì)與HTTP協(xié)議有關(guān)的Servlet锣杂,一般選擇集成javax.servlet.http.HttpServlet.
不要覆蓋其中的service(ServletRequest req,ServletResponse resp)方法,而應(yīng)該覆蓋掉番宁,doXXX方法蹲堂。
doXXX就是根據(jù)你的請(qǐng)求方式來(lái)的。
HttpServlet中的service方法是典型的模板方法設(shè)計(jì)模式的具體應(yīng)用贝淤。
六、Servlet配置
1政供、一個(gè)Servlet可以被映射到多個(gè)URL地址上
2播聪、URL地址映射還支持通配符*
方式一:以*開(kāi)頭朽基,以擴(kuò)展名結(jié)尾。比如 <url-pattern>*.do</url-pattern>
方式二:以/前綴開(kāi)頭离陶,以*結(jié)尾稼虎。 比如<url-pattern>/action/*</url-pattern>
3、多個(gè)Servlet使用通配符時(shí)招刨,有可能有多
以"/"開(kāi)頭(方式二)要比"*"開(kāi)頭(方式一)優(yōu)先級(jí)高
都以"/"開(kāi)頭霎俩,還是有多個(gè)匹配,找最匹配的
4沉眶、如果一個(gè)Servlet的映射為一個(gè)"/",就稱之為默認(rèn)的Servlet打却,它負(fù)責(zé)處理沒(méi)有映射路徑的URL請(qǐng)求的響應(yīng)。
個(gè)配置的Servlet谎倔,到底執(zhí)行哪一個(gè)柳击?
原則:優(yōu)先級(jí)
絕對(duì)匹配
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者