一,伺服器
1.1 web 相關的概念
軟體結構C/S 和 B/S的對比:
- C/S:用戶端/服務端
- B/S:浏覽器/服務端
資源的分類:
- C/S 的頁面更加精美
- C/S 的寬帶占用更小
- B/S 的硬碟占用更小
- B/S 更易于更細維護
網絡通信的三要素:
- 靜态資源:任何使用者通路後,得到的結果就是一樣的就稱為靜态資源,靜态資源可以直接被浏覽器解析,例如:html、css、js
- 動态資源:每一個使用者通路後,得到的結果可能不同的就稱為動态資源,動态資源會先轉換成靜态資源,再傳回給浏覽器,例如:servlet、jsp
- ip:計算機裝置在網絡中的唯一辨別
- 端口:應用程式在計算機中的唯一辨別
- 傳輸協定:資料在網絡中傳輸的規則
1.2 web 伺服器
伺服器:安裝了伺服器軟體的計算機
伺服器軟體:接收使用者的請求,處理請求,做出響應
常見的 web 伺服器:
tomcat:
- tomcat:Apache組織的,中小型 JavaEE 伺服器。開源,免費。
- webLogic:Oracle公司的大型 JavaEE 伺服器。收費。
- webSphere:IBM公司的大型 JavaEE 伺服器。收費。
- 下載下傳位址:http://tomcat.apache.org
- 安裝:解壓即可,隻能解壓到純英文路徑下
- 目錄結構:
- bin:可執行檔案,裡面有 startup.bat、shutdown.bat
- conf:配置檔案,裡面有 web.xml、server.xml
- lib:依賴的 jar 包
- logs:日志檔案
- temp:臨時檔案
- webapps:存在 web 項目
- work:運作時産生的檔案或者資料
- 啟動伺服器:
運作 bin 下的 startup.bat
可能遇到的問題:
補充:
一閃:
原因:沒有正确配置環境變量
解決:去配啊
報錯:
原因:端口沖突
解決:
方法1. 殺死程序,在 cmd 中 通過 netstat -ano 找到端口号沖突進行的 pid ,在任務管理器中結束程序
方法2. 修改配置檔案的端口号,配置檔案是 conf 下的 server.xml
- 如果将預設的端口号從8080改成80,那麼通路伺服器時就不需要寫端口号了
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- 通路方式是在浏覽器的位址欄上輸入:
- 通路自己:http://localhost:8080
- 通路其他人:http://其他人的ip:8080
- 伺服器不要重複開啟
- 關閉伺服器:
- 運作 bin 下的 shutdown.bat
- ctrl + c
- 點選 x 關閉視窗
- 将項目部署到伺服器上:
- 直接将項目放到 webapps 目錄下,通過 http://ip位址:端口号/項目名/資源名 進行通路
- 在 conf 下的 server.xml 中的 Host 标簽 下配置:
- docBase:項目所在的檔案夾
- path:虛拟路徑
- 通過 http://ip位址:端口号/abc/項目名/資源名 進行通路
- 在 conf 下的 catalina 下的 localhost 目錄下建立任意檔案名的 abc.xml 檔案,配置:
- docBase:項目所在的檔案夾
- 該 xml 檔案的名字就是虛拟路徑
- 通過 http://ip位址:端口号/abc/項目名/資源名 進行通路
1.3 将 tomcat 部署到 eclipse
步驟:
- 點選 window,點選 preferences
- 找到 server,點選 runtime enviroments
- 點選 add,選擇 tomcat7.0,點選 next
- 點選 browse,選擇你所安裝的 tomcat 伺服器的根目錄,點選确定,點選 finish,點選 ok
- 建立項目,選擇動态網頁工程(dynamic web project)
1.4 eclipse 中建立 web 工程
步驟:
- 點選 file,點選 new
- 選擇動态網頁工程(dynamic web project)
- 給項目起個名字
選擇 2.5 或者 3.0 版本
注:如果選擇的是 3.0 系統将不會為你自動建立 web.xml
二,Servlet
2.1 概念和基本使用
概念:運作在伺服器端的程式,Server applet
Servlet是一個接口,它定義Java類能被伺服器通路到的規則
步驟:
- 定義一個類,實作 Servlet 接口
- 重寫方法
配置 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的執行原理:
- 當伺服器接收到用戶端請求時,會解析請求的位址,通路到Servlet資源的路徑
- 在 web.xml 中進行查找,是否有對應 url-pattern 标簽體中内容與隻比對
- 如果沒有,頁面會出現 404 (資源找不到)錯誤
- 如果有,會查找是否有一個servlet标簽下的servlet-name标簽體中的内容與該url-pattern所在映射下的servlet-name标簽體中的内容一緻的servlet标簽。
- 如果沒有,伺服器開啟過程中會報錯
- 如果有,就能根據全類名找到對應的 Java 類,執行其中的功能
2.3 Servlet 的生命周期
init():預設第一次通路時執行,隻執行一次
可以通過配置,将servlet的初始化從第一次通路執行修改成伺服器啟動時就執行
<!-- 配置該Servlet的初始化時機是在伺服器啟動時, n可以是任意整數, n為負數:表示第一次通路時執行 0或者整數:表示伺服器啟動時就初始化 數值越小,越優先啟動 --> <load-on-startup>n</load-on-startup>
service():每次通路時都執行一次
在這個方法中提供了tomcat伺服器已經封裝好了的請求和響應對象
destroy():正常關閉伺服器時執行,隻執行一次
一般用于釋放資源,隻有伺服器正常關閉時才會執行,執行後servlet被銷毀
2.4 Servlet 的體系結構
HttpServlet抽象類 -> GenericServlet抽象類 -> Servlet接口
HttpServlet:專門針對Http協定的一種Servlet接口的封裝,簡化了Servlet中的操作,并且明确了 get/post 請求時會通路到的相關方法。
使用步驟:
注:使用浏覽器直接通路servlet,預設的送出方法是get
- 建立類時,選擇Servlet
- 自定義Servlet的類名和url
- 選擇 doPost() 和 doGet() 方法
2.5 url-pattern 的配置
注:目錄比對和擴充名比對不能混用
- 完全比對:/xxx
- 目錄比對:/xxx/xxx/*
- 擴充名比對:*.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:端口/虛拟路徑 即可
注:
- 如果自己項目中沒有配置,也會遵循tomcat中的web.xml的首頁配置
- 在中,系統會從上到下依次查找項目中是否有該頁面,有的話就作為首頁,沒有就向下繼續查找,直到最後;如果沒有任何一個中配置的頁面,那麼會發生404。
三,Http
3.1 概念
概念:HyperText Transfer protocol 超文本傳輸協定
Http 它定義用戶端和伺服器在通信時發送資料和接收資料的格式
特點:
- 基于TCP/IP的協定
- 預設端口号是8080
- 基于請求/響應的:一次請求對應一次響應
- 無狀态的:每次請求之間是互相獨立的,不能互動資料
- 版本:
- 1.0 版本:每一次請求響應都會建立新的連接配接
- 1.1 版本:複用連接配接
3.2 請求消息資料的格式
- 請求行:
- 請求方式:POST、GET
- GET:
- 請求的參數在請求行中,拼接在位址後
- 請求位址的長度有限制,64K
- 不安全
- POST:
- 請求的參數封裝在請求體中
- 請求的位址沒有限制的限制
- 相對安全
- 請求的位址:http://localhost/day41_05_login_register/register
- 請求協定/版本:http/1.1
請求頭
格式:" 請求頭名稱 : 請求頭值 "
請求頭是用戶端告知伺服器的資訊
常見的請求頭:
- Referer:告知伺服器,目前請求從哪個頁面過來,常用于防盜鍊
- User-Agent:告知伺服器,目前浏覽器的版本資訊,常用于解決浏覽器的相容性問題
- 請求體:封裝了POST送出方式的請求參數
3.3 響應消息資料的格式
- 響應行:
- 組成:協定/版本 響應狀态碼 狀态碼的描述,例如:http/1.1 200 ok
- 響應狀态碼:伺服器告知浏覽器本次請求和響應的狀态
- 狀态碼都是3位數字
- 分類:
- 1xx:伺服器接收到了浏覽器的消息,但是還沒有接收完畢,需要等待
- 2xx:表示成功。例如:200 成功
- 3xx:表示重定向。例如:302(重定向)、304(通路緩存)
- 4xx:用戶端錯誤。例如:404(資源找不到)、405(請求方式沒有對應的doXxx方法)
- 5xx:伺服器錯誤、例如:500(伺服器内部出現異常)
- 響應頭:
- 組成:" 響應頭的名稱 : 響應頭的值 "
- 常見的響應頭:
- Content-Type:伺服器告知浏覽器本次響應的資料要以何種編碼格式解析
- Content-disposition:伺服器告知浏覽器以什麼格式打開響應的資料
- inline:(預設)響應的資料在頁面中顯示
- attachment;filename=檔案名 :告知浏覽器指定檔案不要解析,以附件形式打開(這就是檔案下載下傳)
- 響應體:伺服器傳輸給浏覽器的資料