天天看點

JavaWeb

軟體體系結構

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,即通知用戶端資源沒有改變,你可以使用自己的緩存。