軟體體系結構
1. C/S:Client/Servlet,例如QQ就是CS結構
需要編寫伺服器端程式和用戶端程式。
缺點:更新需要兩端,總要求客戶下載下傳新的用戶端程式
優點:安全性比較好
2. B/S:Browser/Server
缺點:安全性較差
優點:隻需要編寫伺服器端程式
3. Web資源
* 靜态資源:html、css、javascript、圖檔等;
* 動态資源:javaweb的動态資源有jsp/servlet,其他web程式動态資源有asp、php等。
4. 靜态資源和動态資源的差別
* 用戶端通路伺服器靜态資源,伺服器直接響應;
* 用戶端通路伺服器動态資源,伺服器需要先把動态資源轉換成靜态資源,再響應。
5. 用戶端通過浏覽器通路伺服器
* http://主機名:端口号/路徑,例如:http://www.itcast.cn:80/index.html
6. Web伺服器
* Tomcat(Apache):目前應用最廣的JavaWeb伺服器,支援servlet規則,不支援JavaEE規範;
* JBoss(Redhat紅帽):支援JavaEE規則;
* GlassFish(Orcale):支援servlet規則,應用不是很廣;
* Resin(Caucho):支援JavaEE規則,應用越來越廣;
* Weblogic(Orcale):要錢的!支援JavaEE規則,适合大型項目;
* Websphere(IBM):要錢的!支援JavaEE規則,适合大型項目;
===================================
Tomcat
tomcat6支援servlet2.5
tomcat7支援servlet3.0
1. 啟動關閉tomcat
需要先配置JAVA_HOME
* 輕按兩下%CATALANA_HOME%\bin\startup.bat
* 輕按兩下%CATALANA_HOME%\bin\shutdown.bat
通路伺服器:http://localhost:8080/index.jsp
因為伺服器在本機上,是以主機名為localhost,表示本機
tomcat的預設端口為8080
index.jsp是首頁
2. 修改端口号
* 修改端口号,%CATALANA_HOME%\conf\server.xml,修改<Connector port="8080">,把8080修改了即可。
* http協定預設端口為80,也就是說http://localhost,等同與http://localhost:80
如果把Tomcat端口号修改成80,那麼通路伺服器就可以無需再給出端口号。
3. tomcat目錄結構
* bin:二進制可執行檔案,例如startup.bat和shutdown.bat
* conf:配置檔案,例如:server.xml、context.xml、web.xml、tomcatusers.xml
* lib:tomcat所需jar包
* logs:日志檔案
* temp:存放tomcat運作時産生的臨時檔案,當tomcat關閉後,這個目錄中的檔案可以删除
* webapps:這個目錄下的每個檔案夾對應一個JavaWeb應用程式
* work:webapps下的應用程式在運作時會自動生成檔案,就在work目錄下。work目錄删除了也沒問題,但再次運作應用程式還要再生成work目錄和檔案。
4. 建立JavaWeb目錄:hello
* 在webapps目錄下建立一個hello目錄,hello目錄就是項目目錄了;
* 在hello目錄下建立WEB-INF
* 在WEB-INF下建立web.xml
* 在WEB-INF下建立classes目錄
* 在WEB-INF下建立lib目錄
* 在hello目錄下建立index.html
在web.xml檔案中添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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">
</web-app>
在index.html中添加如下内容:
<html>
<head><title>index.html</title></head>
<body>
<h1>hello首頁</h1>
</body>
</html>
啟動tomcat,打開用戶端通路http://localhost:8080/hello/index.html
配置外部應用
外部應用既是把應用程式不放到Tomcat的wabapps目錄下!而已放在外面,例如:F:/hello
1. 在conf/server.xml下配置,指定外部應用的路徑。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="itcast_hello" docBase="F:/hello"/>
</Host>
* 在<Host>元素下添加<Context>元素,path為URL通路路徑,docBase為外部應用的目錄。
* 在浏覽器位址欄中通路:http://localhost:8080/itcast_hello/index.html
2. 在conf/catalana/localhost下添加配置檔案,指定外部應用路徑
* 在conf/catalana/localhost目錄下建立itcast_hello.xml檔案,其中itcast_hello就是URL通路路徑
* 在itcast_hello.xml檔案中添加:<Context docBase="F:/hello"/>,docBase指定外部應用的目錄。
3. 預設web應用
* 在webapps目錄下有一個ROOT目錄,它是預設web應用,通路這個應用的路徑:http://localhost:8080/index.jsp
* 如果把web應用的内部放到webapps/ROOT下,通路URL路徑中不用給出應用名稱。
4. 配置虛拟主機
希望:http://www.itcast.cn通路web應用。
* 這需要把域名http://www.itcast.cn映射成IP位址:127.0.0.1
* 需要把tomcat端口号修改為80
* 需要在server.xml中配置主機,并指定主機的應用目錄
* 在應用目錄中添加名為ROOT的web應用。
1). 找到C:\WINDOWS\system32\drivers\etc\hosts檔案,添加127.0.0.1 http://www.itcast.cn
2). 在conf/server.xml中修改端口為80
3). 在conf/server.xml中添加<Host>元素
<Host name="www.itcast.cn" appBase="F:/myapps" unpackWARs="true" autoDeploy="true">
* name:指定該主機域名為www.itcast.cn
* appBase:指定該主機的應用目錄為F:/myapps
4). 在F:/myapps下建立名為ROOT的web應用。
通路:http://www.itcast.cn/index.html
其中www.itcast.cn在本機上會被解析為127.0.0.1,但其他電腦通路時無效。
4 了解server.xml(了解)
<Server>
<Servier>
<Connector>
<Engine>
<Host>
<Context>
l <Server>:根元素,表示整個伺服器的配置資訊;
l <Service>:<Server>的子元素,在<Server>中隻能有一個<Service>元素,它表示服務;
l <Connector>:<Service>的子元素,在<Service>中可以有N個<Connector>元素,它表示連接配接。
l <Engine>:<Service>的子元素,在<Service>中隻能有一<Engine>元素,該元素表示引擎,它是<Service>元件的核心。
l <Host>:<Engine>的子元素,在<Engine>中可以有N個<Host>元素,每個<Host>元素表示一個虛拟主機。所謂虛拟主機就像是真的主機一樣,每個主機都有自己的主機名和項目目錄。例如<Host name=”localhost” appBase=”webapps”>表示主機名為localhost,這個主機的項目存放在webapps目錄中。通路這個項目下的主機時,需要使用localhost主機名,項目都存放在webapps目錄下。
l <Context>:<Host>元素的子元素,在<Host>中可以有N個<Context>元素,每個<Context>元素表示一個應用。如果應用在<Host>的appBase指定的目錄下,那麼可以不配置<Context>元素,如果是外部應用,那麼就必須配置<Context>。如果要為應用指定資源,也需要配置<Context>元素。
我們可以把<Server>看作是一個大酒店:
l <Service>:酒店的服務部門;
l <Connector>:服務員;
l <Engine>:後廚;
l <Host>:後廚中的一個區,例如川菜區是一個<Host>、粵菜區是一個<Host>;
l <Context>:後廚的一個廚師。
使用者發出一個請求:http://localhost:8080/hello/index.jsp。發現是http/1.1協定,而且還是8080端口,是以就交給了處理這一請求的“服務員(處理HTTP請求的<Connector>)”,“服務員”再把請求交給了“後廚(<Engine>)”,因為請求是要一盤水煮魚,是以由“川菜區(<Host>)”負責,因為“大老王師傅<Context>”做水煮魚最道地,是以由它完成。
l <Connector>:關心請求中的http、和8080;
l < Host>:關心localhost;
l <Context>:關心hello
使用MyEcipse建立Web項目
1. MyEclipse指定Tomcat
2. MyEclipse建立Web項目
3. MyEclipse釋出Web項目到Tomcat下
4. MyEclipse啟動關閉Tomcat
5. MyEclipse對已釋出項目的修改會對tomcat下項目的進行修改
MyEcipse是JavaWeb應用的開發環境,而不是運作環境!運作還是在Tomcat下運作。
使用MyEclipse打war包,把war包釋出到Tomcat下。
Tomcat管理頁面
HTTP協定
1 http協定(規定雙方通信的格式)
* 即超文本傳輸協定。浏覽器和伺服器傳輸定的規則
* http是基于請求/響應模式的,是以分為請求協定和響應協定
請求
就是用戶端給伺服器發的資訊!
GET /hello/index.jsp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
POST /hello/index.jsp HTTP/1.1
Accept: p_w_picpath/gif, p_w_picpath/jpeg, p_w_picpath/pjpeg, p_w_picpath/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://localhost:8080/hello/index.jsp
Accept-Language: zh-cn,en-US;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 13
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=E365D980343B9307023A1D271CC48E7D
keyword=hello
1. 請求格式:
* 請求首行
* 請求頭
* 空行
* 請求體(或稱之為請求正文)
2. 請求方法
* 常見請求方法有GET和POST
* 在浏覽器位址欄中發送請求,以及點選超連結都是GET請求
* 送出表單可以發送GET請求,以及POST請求
* GET請求沒有請求體,但空行是存在的
* POST請求是存在請求體的
3. 使用HttpWatch擷取請求資訊
* 請求行:請求方法 請求路徑 請求協定及版本,例如:GET /hello/index.jsp HTTP/1.1
* 請求頭:請求頭就是一些鍵值,格式為:頭:值,例如:Host:localhost
* 空行:就是一個空行,用來與請求體分隔
* 請求體:GET方法沒有請求體,POST才有請求體,請求體内容為:參數名=參數值&參數名=參數值,其中參數值為中文,會使用URL編碼。
4. 常見請求頭
* Host:請求的伺服器主機名
* User-Agent:用戶端浏覽器與作業系統相關資訊
* Accept-Encoding:用戶端支援的資料壓縮格式
* Connection:用戶端支援的連接配接方式
* Cookie:用戶端發送給伺服器的“小甜點”,它伺服器寄存在用戶端的。如果目前通路的伺服器沒有在用戶端寄存東西,那麼就不會存在它!
* Content-Length:請求體的長度
* Referer:目前送出請求的位址,例如在浏覽器位址欄直接通路伺服器,那麼沒有這個請求頭。如果是在www.baidu.com頁面上點選連結通路的伺服器,那麼這個頭的值就是www.baidu.com
> 作用1:統計來源
> 作用2:防盜鍊
* Content-Type:如果是POST請求,會有這個頭,預設值為application/x-www-form-urlencoded,表示請求體内容使用url編碼。
響應
響應就是伺服器發送給用戶端的資料!
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 724
Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
Date: Wed, 25 Sep 2012 04:15:03 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<base href="http://localhost:8080/hello/">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<form action="" method="post">
關鍵字:<input type="text" name="keyword"/>
<input type="submit" value="送出"/>
</form>
1. 響應格式:
* 響應首行
* 響應頭
* 響應體(或稱之為響應正文)
2. 狀态碼
響應首行的結構:協定及版本 狀态碼 狀态碼說明,例如:HTTP/1.1 200 OK
* 200:請求成功
* 302:請求重定向
* 304:請求資源沒有改變
* 404:請求資源不存在,屬性用戶端錯誤
* 500:伺服器内部錯誤
3. 響應頭
* Content-Type:響應正文的MIME類型,例如p_w_picpath/jpeg表示響應正文為jpg圖檔,例如text/html;charset=utf-8表示響應正文為html,并且編碼為utf-8編碼。浏覽器會通過這一資訊來顯示響應資料
* Content-Length:響應正文的長度
* Set-Cookie:伺服器寄存在用戶端的“小甜點”,當用戶端再次通路伺服器時會把這個“小甜點”還給伺服器
* Date:響應時間,可能會有8小時的誤差,因為中國的時區問題
通知用戶端浏覽器不要緩存頁面的響應頭:
* Expires:-1
* Cache-Control: no-cache
* Pragma: no-cache
自動重新整理響應頭,浏覽器會在3秒鐘後自動重定向到傳智首頁
* Refresh: 3;url=http://www.itcast.cn
4. 狀态碼304
相關頭資訊
* Last-Modified:響應頭,表示目前資源的最後修改時間;
* If-Modified-Since:請求頭,表示緩存的資源最後修改時間;
狀态碼304:表示通路的資源沒有改變
1. 用戶端首次通路伺服器的靜态資源index.html,伺服器會把index.html響應給用戶端,而且
還會添加一個名為Last-Modified的響應頭,它說明了目前index.html的最後修改時間
2. 用戶端收到響應後,會把index.html緩存在用戶端上,而且還會把Last-Modified緩存起來。
3. 用戶端第二次請求index.html時,會添加名為If-Modified-Since的請求頭,它的值是上次伺服器響應頭Last-Modified,伺服器擷取到用戶端儲存的最後修改時間,以及目前資源的最後修改時間進行比較,如果相同,說明index.html沒有改動過,那麼伺服器不會發送index.html,而是響應狀态碼304,即通知用戶端資源沒有改變,你可以使用自己的緩存。