天天看點

tomcat、http、serlvet

一,伺服器

1.1 web 相關的概念

軟體結構
  1. C/S:用戶端/服務端
  2. B/S:浏覽器/服務端
C/S 和 B/S的對比:
  1. C/S 的頁面更加精美
  2. C/S 的寬帶占用更小
  3. B/S 的硬碟占用更小
  4. B/S 更易于更細維護
資源的分類:
  1. 靜态資源:任何使用者通路後,得到的結果就是一樣的就稱為靜态資源,靜态資源可以直接被浏覽器解析,例如:html、css、js
  2. 動态資源:每一個使用者通路後,得到的結果可能不同的就稱為動态資源,動态資源會先轉換成靜态資源,再傳回給浏覽器,例如:servlet、jsp
網絡通信的三要素:
  1. ip:計算機裝置在網絡中的唯一辨別
  2. 端口:應用程式在計算機中的唯一辨別
  3. 傳輸協定:資料在網絡中傳輸的規則

1.2 web 伺服器

伺服器:安裝了伺服器軟體的計算機

伺服器軟體:接收使用者的請求,處理請求,做出響應

常見的 web 伺服器:

  1. tomcat:Apache組織的,中小型 JavaEE 伺服器。開源,免費。
  2. webLogic:Oracle公司的大型 JavaEE 伺服器。收費。
  3. webSphere:IBM公司的大型 JavaEE 伺服器。收費。
tomcat:
  1. 下載下傳位址:http://tomcat.apache.org
  2. 安裝:解壓即可,隻能解壓到純英文路徑下
  3. 目錄結構:
  1. bin:可執行檔案,裡面有 startup.bat、shutdown.bat
  2. conf:配置檔案,裡面有 web.xml、server.xml
  3. lib:依賴的 jar 包
  4. logs:日志檔案
  5. temp:臨時檔案
  6. webapps:存在 web 項目
  7. work:運作時産生的檔案或者資料
  1. 啟動伺服器:
  1. 運作 bin 下的 startup.bat

    可能遇到的問題:

  1. 一閃:

    原因:沒有正确配置環境變量

    解決:去配啊

  2. 報錯:

    原因:端口沖突

    解決:

    ​ 方法1. 殺死程序,在 cmd 中 通過 netstat -ano 找到端口号沖突進行的 pid ,在任務管理器中結束程序

    方法2. 修改配置檔案的端口号,配置檔案是 conf 下的 server.xml

補充:
  1. 如果将預設的端口号從8080改成80,那麼通路伺服器時就不需要寫端口号了
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />      
  1. 通路方式是在浏覽器的位址欄上輸入:
  1. 通路自己:http://localhost:8080
  2. 通路其他人:http://其他人的ip:8080
  1. 伺服器不要重複開啟
  1. 關閉伺服器:
  1. 運作 bin 下的 shutdown.bat
  2. ctrl + c
  3. 點選 x 關閉視窗
  1. 将項目部署到伺服器上:
  1. 直接将項目放到 webapps 目錄下,通過 http://ip位址:端口号/項目名/資源名 進行通路
  2. 在 conf 下的 server.xml 中的 Host 标簽 下配置:
  1. docBase:項目所在的檔案夾
  2. path:虛拟路徑
  3. 通過 http://ip位址:端口号/abc/項目名/資源名 進行通路
  1. 在 conf 下的 catalina 下的 localhost 目錄下建立任意檔案名的 abc.xml 檔案,配置:
  1. docBase:項目所在的檔案夾
  2. 該 xml 檔案的名字就是虛拟路徑
  3. 通過 http://ip位址:端口号/abc/項目名/資源名 進行通路

1.3 将 tomcat 部署到 eclipse

步驟:
  1. 點選 window,點選 preferences
  2. 找到 server,點選 runtime enviroments
  3. 點選 add,選擇 tomcat7.0,點選 next
  4. 點選 browse,選擇你所安裝的 tomcat 伺服器的根目錄,點選确定,點選 finish,點選 ok
  5. 建立項目,選擇動态網頁工程(dynamic web project)

1.4 eclipse 中建立 web 工程

步驟:
  1. 點選 file,點選 new
  2. 選擇動态網頁工程(dynamic web project)
  3. 給項目起個名字
  4. 選擇 2.5 或者 3.0 版本

    注:如果選擇的是 3.0 系統将不會為你自動建立 web.xml

二,Servlet

2.1 概念和基本使用

概念:運作在伺服器端的程式,Server applet

Servlet是一個接口,它定義Java類能被伺服器通路到的規則

步驟:

  1. 定義一個類,實作 Servlet 接口
  2. 重寫方法
  3. 配置 Servlet

    在 web.xml 中配置:

<!-- 配置Servlet類 -->
  <servlet>
    <servlet-name>abc</servlet-name>
    <servlet-class>com.qf.servlet.TestServlet</servlet-class>
  </servlet>
  
  <!-- 配置Servlet映射 -->
  <servlet-mapping>
    <servlet-name>abc</servlet-name>
    <url-pattern>/tt</url-pattern>
  </servlet-mapping>      

2.2 Servlet 執行原理

Servlet的執行原理:
  1. 當伺服器接收到用戶端請求時,會解析請求的位址,通路到Servlet資源的路徑
  2. 在 web.xml 中進行查找,是否有對應 url-pattern 标簽體中内容與隻比對
  1. 如果沒有,頁面會出現 404 (資源找不到)錯誤
  2. 如果有,會查找是否有一個servlet标簽下的servlet-name标簽體中的内容與該url-pattern所在映射下的servlet-name标簽體中的内容一緻的servlet标簽。
  1. 如果沒有,伺服器開啟過程中會報錯
  2. 如果有,就能根據全類名找到對應的 Java 類,執行其中的功能

2.3 Servlet 的生命周期

  1. init():預設第一次通路時執行,隻執行一次

    可以通過配置,将servlet的初始化從第一次通路執行修改成伺服器啟動時就執行

<!-- 
  配置該Servlet的初始化時機是在伺服器啟動時,
  n可以是任意整數,
    n為負數:表示第一次通路時執行
    0或者整數:表示伺服器啟動時就初始化
      數值越小,越優先啟動
-->
<load-on-startup>n</load-on-startup>      
  1. service():每次通路時都執行一次

    在這個方法中提供了tomcat伺服器已經封裝好了的請求和響應對象

  2. destroy():正常關閉伺服器時執行,隻執行一次

    一般用于釋放資源,隻有伺服器正常關閉時才會執行,執行後servlet被銷毀

2.4 Servlet 的體系結構

HttpServlet抽象類 -> GenericServlet抽象類 -> Servlet接口

HttpServlet:專門針對Http協定的一種Servlet接口的封裝,簡化了Servlet中的操作,并且明确了 get/post 請求時會通路到的相關方法。

使用步驟:

  1. 建立類時,選擇Servlet
  2. 自定義Servlet的類名和url
  3. 選擇 doPost() 和 doGet() 方法
注:使用浏覽器直接通路servlet,預設的送出方法是get

2.5 url-pattern 的配置

  1. 完全比對:/xxx
  2. 目錄比對:/xxx/xxx/*
  3. 擴充名比對:*.xxx
注:目錄比對和擴充名比對不能混用

2.6 歡迎頁面

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>      

作用:配置預設的起始頁面,在通路伺服器首頁時,可以不寫首頁的資源名,就可以直接通路到首頁

例如:上述配置檔案中,第一個歡迎頁是 index.html,那麼在通路該應用時,位址欄中隻需要寫

http://ip:端口/虛拟路徑 即可

注:

  1. 如果自己項目中沒有配置,也會遵循tomcat中的web.xml的首頁配置
  2. 在中,系統會從上到下依次查找項目中是否有該頁面,有的話就作為首頁,沒有就向下繼續查找,直到最後;如果沒有任何一個中配置的頁面,那麼會發生404。

三,Http

3.1 概念

概念:HyperText Transfer protocol 超文本傳輸協定

Http 它定義用戶端和伺服器在通信時發送資料和接收資料的格式

特點:

  1. 基于TCP/IP的協定
  2. 預設端口号是8080
  3. 基于請求/響應的:一次請求對應一次響應
  4. 無狀态的:每次請求之間是互相獨立的,不能互動資料
  5. 版本:
  1. 1.0 版本:每一次請求響應都會建立新的連接配接
  2. 1.1 版本:複用連接配接

3.2 請求消息資料的格式

  1. 請求行:
  1. 請求方式:POST、GET
  1. GET:
  1. 請求的參數在請求行中,拼接在位址後
  2. 請求位址的長度有限制,64K
  3. 不安全
  1. POST:
  1. 請求的參數封裝在請求體中
  2. 請求的位址沒有限制的限制
  3. 相對安全
  1. 請求的位址:http://localhost/day41_05_login_register/register
  2. 請求協定/版本:http/1.1
  1. 請求頭

    格式:" 請求頭名稱 : 請求頭值 "

    請求頭是用戶端告知伺服器的資訊

    常見的請求頭:

  1. Referer:告知伺服器,目前請求從哪個頁面過來,常用于防盜鍊
  2. User-Agent:告知伺服器,目前浏覽器的版本資訊,常用于解決浏覽器的相容性問題
  1. 請求體:封裝了POST送出方式的請求參數

3.3 響應消息資料的格式

  1. 響應行:
  1. 組成:協定/版本 響應狀态碼 狀态碼的描述,例如:http/1.1 200 ok
  2. 響應狀态碼:伺服器告知浏覽器本次請求和響應的狀态
  1. 狀态碼都是3位數字
  2. 分類:
  1. 1xx:伺服器接收到了浏覽器的消息,但是還沒有接收完畢,需要等待
  2. 2xx:表示成功。例如:200 成功
  3. 3xx:表示重定向。例如:302(重定向)、304(通路緩存)
  4. 4xx:用戶端錯誤。例如:404(資源找不到)、405(請求方式沒有對應的doXxx方法)
  5. 5xx:伺服器錯誤、例如:500(伺服器内部出現異常)
  1. 響應頭:
  1. 組成:" 響應頭的名稱 : 響應頭的值 "
  2. 常見的響應頭:
  1. Content-Type:伺服器告知浏覽器本次響應的資料要以何種編碼格式解析
  2. Content-disposition:伺服器告知浏覽器以什麼格式打開響應的資料
  1. inline:(預設)響應的資料在頁面中顯示
  2. attachment;filename=檔案名 :告知浏覽器指定檔案不要解析,以附件形式打開(這就是檔案下載下傳)
  1. 響應體:伺服器傳輸給浏覽器的資料