軟件體系結構
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">
</Host>
* 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
Accept-Encoding: gzip, deflate
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">
<html>
<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>
<body>
<form action="" method="post">
關鍵字:<input type="text" name="keyword"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
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,即通知客戶端資源沒有改變,你可以使用自己的緩存。