一、Tomcat的配置
1.目錄結(jié)構(gòu)
bin:存放啟動和關(guān)閉tomcat的腳本文件
conf:存放配置文件
lib:存放tomcat服務(wù)器的支撐jar包
logs:存放日志文件,一旦服務(wù)器啟動出現(xiàn)問題痴奏,可以查看里面的日志
temp:存放臨時(shí)文件
webapps:web應(yīng)用所在目錄,即供外界訪問的web資源的存放目錄
work:工作目錄
2.配置
2.1虛擬目錄映射配置
修改服務(wù)器的端口號是在server.xml(conf文件夾)中進(jìn)行修改案糙,修改成80之后以后訪問服務(wù)器的時(shí)候就不用添加端口號8080了地啰,如下:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改之后必須重新啟動才能使用。這里注意:修改配置文件之后必須重啟才能使用权均。
2.2虛擬目錄的配置
將Tomcat->webapps->ROOT中的WEB-INF目錄全部復(fù)制到E:\WebWorkspace這個(gè)目錄中去顿膨。復(fù)制好之后我們還要讓Tomcat知道這個(gè)映射,所以在E:\software\tomcat\conf路徑中的server.xml文件中進(jìn)行修改:
<Context path="/web" docBase="E:\WebWorkspace">
</Host>
注意:是在</Host>的上方加上一行叽赊,其中path="/web"表示我們以后再瀏覽器中訪問的時(shí)候所用的目錄恋沃,比如使用http://localhost/web進(jìn)行訪問,而docBase="E:\WebWorkspace"表示的是絕對路徑必指,即我們以后放置web程序的目錄囊咏。同時(shí)注意,如果以后想要更改塔橡,一定要將WEB-INF目錄這個(gè)目錄放置在這個(gè)文件夾的一級目錄中梅割,即此時(shí)WebWorkspace相當(dāng)于一個(gè)web應(yīng)用,而不能是多個(gè)葛家。配置完之后服務(wù)器同樣需要重新啟動户辞。一般我們不這樣配置,后面會講另外的方式癞谒。
我們在web開發(fā)中會經(jīng)常見到兩個(gè)錯(cuò)誤底燎,一個(gè)錯(cuò)誤是404刃榨,這種4開頭的一般表示的是客戶端的請求錯(cuò)誤(路徑錯(cuò)誤);一個(gè)是5開頭的(500)表示的都是程序錯(cuò)誤双仍。
若到此時(shí)輸入http://localhost/web訪問還是出現(xiàn)404錯(cuò)誤枢希,這就需要修改tomcat安裝目錄(E:\software\tomcat\conf)中conf目錄下的web.xml配置文件。在文件中找到listings:
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
保證param-value是true朱沃,若不是,改為true苞轿。然后重新啟動服務(wù)器,再次刷新網(wǎng)頁即可逗物。
此時(shí)會出現(xiàn)一個(gè)工作目錄列表搬卒,比如我將001.xml的文件放在目錄E:\WebWorkspace之中,然后這個(gè)文件就會在網(wǎng)頁上顯示出來敬察,我們點(diǎn)擊就可以運(yùn)行此文件了秀睛。
注意:對于上述的配置虛擬目錄Context這種方式有點(diǎn)麻煩,因?yàn)槊看味家貑omcat服務(wù)器莲祸,于是我們一般在E:\software\tomcat\conf\Catalina\localhost這個(gè)目錄中進(jìn)行配置蹂安,我們可以在里面隨便建立一個(gè).xml的文件,比如web1.xml锐帜,然后將Context寫入到里面去:
<Context docBase="E:\WebWorkspace\test_servlet"/>
但是這里我們不需要再寫path路徑田盈,在訪問的時(shí)候這個(gè).xml文件的名字web1就是path路徑,http://localhost/web1/login.html就可以訪問了缴阎,而且不需要重新啟動允瞧。如果servlet的工程有多級目錄,那我們可以這樣起名web1#web.xml蛮拔,訪問的時(shí)候就可以這樣http://localhost/web1/web/login.html訪問了述暂。如果我們將這個(gè)配置文件起名為ROOT.xml,那么這就是一個(gè)缺省的web應(yīng)用建炫,那么我們在訪問的時(shí)候就可以直接這樣http://localhost/login.html,即是將我們默認(rèn)的apache頁面更換了畦韭,但是注意這種方式下一定要重啟tomcat服務(wù)器。同時(shí)注意肛跌,下面講到的更改首頁也首先要配置缺省配置文件艺配。然后在<welcome-file>login.html</welcome-file>中進(jìn)行配置,這樣我們在使用http://localhost 就可以直接訪問到了衍慎。
2.3更改首頁
有時(shí)候我們不太喜歡這樣訪問出現(xiàn)的首頁转唉,這里我們可以進(jìn)行更改。這同樣是修改tomcat安裝目錄下的E:\software\tomcat\conf中的web.xml稳捆,在最下面我們可以看到我們每次訪問的頁面就是下面的紅色部分的三個(gè)文件:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
如果想更改最好不要修改公共的配置赠法,而去修改每一個(gè)獨(dú)立的虛擬目錄中的配置。將以上部分代碼復(fù)制到E:\WebWorkspace\WEB-INF中的web.xml中的</description>后面:
</description>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
然后將不需要的刪掉乔夯,將第一行中的index.html換成自己的文件砖织,比如main.htm原朝,里面可以寫上自己想要顯示的內(nèi)容,注意重啟服務(wù)器镶苞。
注意:在以后的配置中我們不建議直接更改tomcat原先的配置文件,這里我們可以先配置一個(gè)缺省的xml配置文件之后鞠评,然后新建一個(gè)工程(一個(gè)文件夾)茂蚓,里面放置一個(gè)首頁html文件和一個(gè)WEB-INF目錄,此目錄中放置一個(gè)web.xml剃幌,里面配置首頁即可聋涨。重啟服務(wù)器。
當(dāng)我們寫好一個(gè)jsp的文件并放在E:\WebWorkspace中之后负乡,在瀏覽器中訪問過這個(gè)文件后會在tomcat中的work目錄中找到編譯的文件牍白。它會編譯生成相應(yīng)的class文件,以后如果需要使用就不用再次編譯抖棘,可以直接使用茂腥。每當(dāng)我們改變jsp文件是都會重新編譯。如果發(fā)現(xiàn)不再重新編譯切省,而且很慢最岗,此時(shí)可以將work目錄中的所有文件全部刪除即可。
二朝捆、配置虛擬主機(jī)
當(dāng)我們在IE瀏覽器中訪問某個(gè)網(wǎng)站時(shí)般渡,比如www.baidu.com,瀏覽器會先將此字符串發(fā)給DNS服務(wù)器芙盘,將此字符串轉(zhuǎn)換成一個(gè)IP地址驯用,然后瀏覽器才通過此IP地址訪問到相應(yīng)的網(wǎng)站。但是我們的IE瀏覽器在將字符串發(fā)給DNS服務(wù)器之前還會查找自己的主機(jī)儒老,若本機(jī)上有這個(gè)字符串對應(yīng)的IP地址的話蝴乔,則不會去詢問DNS了,而是直接通過相應(yīng)的IP地址訪問相應(yīng)的網(wǎng)站贷盲,我們在目錄C:\Windows\System32\drivers\etc中會發(fā)現(xiàn)一個(gè)hosts文件淘这,里面就配置了localhost對應(yīng)的IP地址。所以如果我們要想配置一個(gè)虛擬主機(jī)巩剖,則可以直接在里面添加铝穷,比如127.0.0.1 www.yj.com,然后就可以這樣訪問了:http://www.yj.com:8080/web1/login.html佳魔,當(dāng)然這里我們已經(jīng)將端口改為80曙聂,所以不需要再加端口了。如果想這樣http://www.yj.com訪問鞠鲜,則可以配置缺省目錄宁脊。
三断国、管理平臺
點(diǎn)擊Managing Tomcat中的manager webapps,這時(shí)需要提供用戶名和密碼榆苞。我們找到conf目錄中的tomcat-users.xml中將最后的
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
這段注釋打開稳衬。這樣就為tomcat配置了三個(gè)用戶,然后輸入用戶tomcat和密碼tomcat時(shí)會出現(xiàn)沒有訪問權(quán)限的錯(cuò)誤坐漏,這時(shí)我們需要在配置文件中配置一個(gè)管理者的角色,加上這一行:
<role rolename="manager"/>
然后將tomcat這個(gè)用戶添加為管理者的角色:將
<user username="tomcat" password="tomcat" roles="tomcat"/>
這一行改為:
<user username="tomcat" password="tomcat" roles="tomcat薄疚,manager"/>
重啟服務(wù)器。這個(gè)管理平臺是用來管理web應(yīng)用的赊琳。
四街夭、web應(yīng)用的組成結(jié)構(gòu)
主目錄工程下:
html、jsp躏筏、js等文件
WEB-INF目錄:
classes目錄:存放java類
lib目錄:java運(yùn)行依賴的jar包
web.xml:
context元素常用屬性
docBase: 指定web應(yīng)用程序的文檔基目錄或者war文件的路徑名板丽,可以指定目錄的或war文件的絕對路徑名,也可以指定相對于host元素的appBase目錄的路徑名趁尼。該屬性是必須的埃碱。
path: 指定web應(yīng)用程序的上下文路徑。在一個(gè)特定的虛擬主機(jī)中弱卡,所有的上下文路徑是唯一的乃正。如果指定一個(gè)上下文路徑為空字符串,則定義了這個(gè)虛擬主機(jī)的默認(rèn)web應(yīng)用程序婶博,負(fù)責(zé)處理所有的沒有分配給其他web應(yīng)用程序的請求瓮具。
reloadable: 如果設(shè)置為true,服務(wù)器在運(yùn)行時(shí)凡人,會監(jiān)聽WEB-INF/classes和WEB-INF/lib目錄下類的改變名党,如果發(fā)現(xiàn)類被更新則會自動重啟該web應(yīng)用。一般我們不建議使用挠轴。
unpackWAR: 如果為true传睹,服務(wù)器運(yùn)行web應(yīng)用前將展開所有壓縮的web應(yīng)用程序。默認(rèn)是true岸晦。
五欧啤、HTTP協(xié)議:
1.什么是http協(xié)議
客戶端連上web服務(wù)器后,若想獲得服務(wù)器中的某個(gè)web資源启上,需要遵守一定的通訊格式邢隧,http協(xié)議是用于定義客戶端與web服務(wù)器通訊的格式。
使用telnet程序連上web服務(wù)器冈在,并使用http協(xié)議獲取某個(gè)頁面:
(1)首先我們在命令行窗口中輸入:telnet www.baidu.com 80回車倒慧,這時(shí)我們發(fā)現(xiàn)屏幕一片漆黑;
(2)輸入ctrl+]回車;
(3)輸入GET /a/login.html HTTP/1.1回車
Host:localhost
(4)最后需要連續(xù)按兩次回車
2.HTTP協(xié)議簡介
此協(xié)議是超文本傳輸協(xié)議的簡寫纫谅,它是TCP/IP協(xié)議的一個(gè)應(yīng)用層協(xié)議炫贤,用于定義web瀏覽器與web服務(wù)器之間交換數(shù)據(jù)的過程。
在http1.0協(xié)議中付秕,客戶端與web服務(wù)器建立連接后只能獲取一個(gè)web資源兰珍,而1.1版本可以在一個(gè)連接上獲取多個(gè)web資源。
一個(gè)問題:
一個(gè)web頁面中询吴,使用了img標(biāo)簽引用了三幅圖片俩垃,當(dāng)客戶機(jī)訪問服務(wù)器中的這web頁面時(shí),客戶端總共會訪問幾次服務(wù)器汰寓,即像服務(wù)器發(fā)送了幾次http請求?
假如web頁面內(nèi)容是:
Ghhjlkl
<img src=”1.gif”>
<img src=”2.gif”>
注意:這種情況下苹粟,客戶端總共像服務(wù)器發(fā)送了三次請求**有滑。
3.http請求
客戶端連上服務(wù)器后,向服務(wù)器請求某個(gè)web資源嵌削,稱之為客戶端像服務(wù)器發(fā)送了一個(gè)http請求毛好。一個(gè)完整的http請求包括如下內(nèi)容:一個(gè)請求行、若干消息頭(請求頭)苛秕、以及實(shí)體內(nèi)容肌访。
注意:空行后面還有實(shí)體內(nèi)容
請求行:
請求行中的GET稱之為請求方式,請求方式有很多種艇劫,常用的也就是get和post兩種方式吼驶。客戶端默認(rèn)是get方式店煞,若要使用post方式蟹演,可以自行定義method屬性。
不管是get還是post方式顷蟀,都用于像服務(wù)器請求某個(gè)web資源酒请,其主要區(qū)別在于:
(1)如果是get方式,則可以在請求的url地址后以?的形式帶上交給服務(wù)器的數(shù)據(jù)鸣个,多個(gè)數(shù)據(jù)之間以&進(jìn)行分隔羞反,如:
GET /mail/1.html?name=aaa&password=xxx HTTP/1.1
其特點(diǎn)是在url后面所帶的資源是有限的,數(shù)據(jù)總量不能超過1K囤萤。
(2)如果是post方式昼窗,可以在請求的實(shí)體內(nèi)容中像服務(wù)器發(fā)送數(shù)據(jù),數(shù)據(jù)量無限制阁将。
用于http請求中的常用頭
Accept:瀏覽器通過這個(gè)頭告訴服務(wù)器其所支持的數(shù)據(jù)類型膏秫;
Accept-Charset:瀏覽器通過這個(gè)頭告訴服務(wù)器其所支持的字符集
Accept-Encoding:瀏覽器通過這個(gè)頭告訴服務(wù)器其所支持的壓縮格式
Accept-Language:瀏覽器通過這個(gè)頭告訴服務(wù)器它的語言環(huán)境
Host:瀏覽器通過這個(gè)頭告訴服務(wù)器其想訪問哪臺主機(jī)
If-Modified-Since:瀏覽器通過這個(gè)頭告訴服務(wù)器其緩存數(shù)據(jù)的時(shí)間
Referer:瀏覽器通過這個(gè)頭告訴服務(wù)器,客戶端是哪個(gè)頁面發(fā)過來的,用于防盜鏈
Cookie:以后講
Connection:覽器通過這個(gè)頭告訴服務(wù)器缤削,請求完后是斷開連接還是保持連接
Date:請求日期
HTTP響應(yīng)的細(xì)節(jié)-狀態(tài)行
狀態(tài)行:HTTP版本號 狀態(tài)碼 原因敘述<CRLF> 如:HTTP/1.1 200 OK
狀態(tài)碼用于表示服務(wù)器對請求的處理結(jié)果窘哈,它是一個(gè)三位的十進(jìn)制數(shù)。相應(yīng)狀態(tài)碼分為5類:
100-199: 表示成功接收請求亭敢,要求客戶端繼續(xù)提交下一次請求才能完成整個(gè)處理過程
200-299: 表示成功接收并已完成整個(gè)處理過程滚婉,常用的是200
300-399: 為完成請求,客戶端需進(jìn)一步細(xì)化請求帅刀。例如让腹,請求的資源已經(jīng)移動到一個(gè)新地址,常用302扣溺、307和304
400-499: 客戶端的請求有誤骇窍,常見錯(cuò)誤404
500-599: 服務(wù)器端出現(xiàn)錯(cuò)誤,常用500
用于http響應(yīng)中的常用頭
Location:服務(wù)器通過這個(gè)頭锥余,告訴瀏覽器跳到哪個(gè)頁面
Server:服務(wù)器通過這個(gè)頭腹纳,告訴瀏覽器當(dāng)前用的服務(wù)器的型號
Content-Encoding:服務(wù)器通過這個(gè)頭,告訴瀏覽器數(shù)據(jù)的壓縮格式
Content-language:服務(wù)器通過這個(gè)頭驱犹,告訴瀏覽器回送數(shù)據(jù)的長度
Content-Type:服務(wù)器通過這個(gè)頭嘲恍,告訴瀏覽器語言環(huán)境
Refresh:服務(wù)器通過這個(gè)頭,告訴瀏覽器何時(shí)刷新
Content-Disposition:服務(wù)器通過這個(gè)頭雄驹,告訴瀏覽器以下載的方式打開數(shù)據(jù)
Transfer-Encoding:服務(wù)器通過這個(gè)頭佃牛,告訴瀏覽器數(shù)據(jù)是以分塊的方式回送的。
Set-Cookie:服務(wù)器通過這個(gè)頭医舆,向?yàn)g覽器回送一個(gè)Cookie
Expires:服務(wù)器通過這個(gè)頭俘侠,告訴瀏覽器回送的數(shù)據(jù)不要緩存(指定其值為-1),當(dāng)然還有其他的格式蔬将,如cache-control和Pragma
Connection:服務(wù)器通過這個(gè)頭兼贡,告訴瀏覽器是斷開連接還是保持連接
Date:回送的日期
Servlet調(diào)用過程:
1.瀏覽器通過url地址連接web服務(wù)器;
2.瀏覽器像web服務(wù)器發(fā)送http請求娃胆;
3.服務(wù)器解析出客戶端想訪問的主機(jī)遍希;
4.服務(wù)器解析出客戶端想訪問的web應(yīng)用
5.服務(wù)器解析出客戶端想訪問的web資源;
6.如果發(fā)現(xiàn)servlet是第一次訪問里烦,服務(wù)器就會加載servlet凿蒜,創(chuàng)建servlet對象;如果不是第一次訪問那么就會使用以前存在的對象為這次訪問服務(wù)胁黑,同時(shí)這樣的話這一步和下面第七步都不會存在废封;
7.調(diào)用servlet的init方法;
8.調(diào)用servlet的service方法
9.servlet執(zhí)行service方法丧蘸,把數(shù)據(jù)寫到response對象中漂洋;
10.服務(wù)器拿到response對象并將數(shù)據(jù)發(fā)送到瀏覽器中。
11.如果服務(wù)器停止或此web服務(wù)關(guān)閉,那么就會調(diào)用destroy方法銷毀servlet對象刽漂。