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

 

 

 

 


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章