javaweb學習筆記整理補課
阿新 • • 發佈:2020-08-05
javaweb學習筆記整理補課
* JavaWeb: * 使用Java語言開發基於網際網路的專案 * 軟體架構: 1. C/S: Client/Server 客戶端/伺服器端 * 在使用者本地有一個客戶端程式,在遠端有一個伺服器端程式 * 如:QQ,迅雷... * 優點: 1. 使用者體驗好 * 缺點: 1. 開發、安裝,部署,維護 麻煩 2. B/S: Browser/Server 瀏覽器/伺服器端 * 只需要一個瀏覽器,使用者通過不同的網址(URL),客戶訪問不同的伺服器端程式 * 優點: 1. 開發、安裝,部署,維護 簡單 * 缺點: 1. 如果應用過大,使用者的體驗可能會受到影響 2. 對硬體要求過高 * B/S架構詳解 * 資源分類: 1. 靜態資源: * 使用靜態網頁開發技術釋出的資源。 * 特點: * 所有使用者訪問,得到的結果是一樣的。 * 如:文字,圖片,音訊、視訊, HTML,CSS,JavaScript * 如果使用者請求的是靜態資源,那麼伺服器會直接將靜態資源傳送給瀏覽器。瀏覽器中內建了靜態資源的解析引擎,可以展示靜態資源 2. 動態資源: * 使用動態網頁及時釋出的資源。 * 特點: * 所有使用者訪問,得到的結果可能不一樣。 * 如:jsp/servlet,php,asp... * 如果使用者請求的是動態資源,那麼伺服器會執行動態資源,轉換為靜態資源,再發送給瀏覽器 * 靜態資源: * HTML:用於搭建基礎網頁,展示頁面的內容 * CSS:用於美化頁面,佈局頁面 * JavaScript:控制頁面的元素,讓頁面有一些動態的效果
1. 概念: 一個前端開發的框架,Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JavaScript 的,它簡潔靈活,使得 Web 開發更加快捷。 * 框架:一個半成品軟體,開發人員可以在框架基礎上,在進行開發,簡化編碼。 * 好處: 1. 定義了很多的css樣式和js外掛。我們開發人員直接可以使用這些樣式和外掛得到豐富的頁面效果。 2. 響應式佈局。 * 同一套頁面可以相容不同解析度的裝置。個前端開發的框架,Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JavaScript 的,它簡潔靈活,使得 Web 開發更加快捷。 * 框架:一個半成品軟體,開發人員可以在框架基礎上,在進行開發,簡化編碼。 * 好處: 1. 定義了很多的css樣式和js外掛。我們開發人員直接可以使用這些樣式和外掛得到豐富的頁面效果。 2. 響應式佈局。 * 同一套頁面可以相容不同解析度的裝置。
1. 軟體架構 1. C/S:客戶端/伺服器端 2. B/S:瀏覽器/伺服器端 2. 資源分類 1. 靜態資源:所有使用者訪問後,得到的結果都是一樣的,稱為靜態資源.靜態資源可以直接被瀏覽器解析 * 如: html,css,JavaScript 2. 動態資源:每個使用者訪問相同資源後,得到的結果可能不一樣。稱為動態資源。動態資源被訪問後,需要先轉換為靜態資源,在返回給瀏覽器 * 如:servlet/jsp,php,asp.... 3. 網路通訊三要素 1. IP:電子裝置(計算機)在網路中的唯一標識。 2. 埠:應用程式在計算機中的唯一標識。 0~65536 3. 傳輸協議:規定了資料傳輸的規則 1. 基礎協議: 1. tcp:安全協議,三次握手。 速度稍慢 2. udp:不安全協議。 速度快
* 伺服器:安裝了伺服器軟體的計算機
* 伺服器軟體:接收使用者的請求,處理請求,做出響應
* web伺服器軟體:接收使用者的請求,處理請求,做出響應。
* 在web伺服器軟體中,可以部署web專案,讓使用者通過瀏覽器來訪問這些專案
* web容器
* Servlet的init方法,只執行一次,說明一個Servlet在記憶體中只存在一個物件,Servlet是單例的
* 多個使用者同時訪問時,可能存線上程安全問題。
* 解決:儘量不要在Servlet中定義成員變數。即使定義了成員變數,也不要對修改值
2. 提供服務:執行service方法,執行多次
* 每次訪問Servlet時,Service方法都會被呼叫一次。
3. 被銷燬:執行destroy方法,只執行一次
* Servlet被銷燬時執行。伺服器關閉時,Servlet被銷燬
* 只有伺服器正常關閉時,才會執行destroy方法。
* destroy方法在Servlet被銷燬之前執行,一般用於釋放資源
* Servlet3.0:
* 好處:
* 支援註解配置。可以不需要web.xml了。
* 步驟:
1. 建立JavaEE專案,選擇Servlet的版本3.0以上,可以不建立web.xml
2. 定義一個類,實現Servlet介面
3. 複寫方法
4. 在類上使用@WebServlet註解,進行配置
* @WebServlet("資源路徑")
* 快速入門:
1. 建立JavaEE專案
2. 定義一個類,實現Servlet介面
* public class ServletDemo1 implements Servlet
3. 實現介面中的抽象方法
4. 配置Servlet
在web.xml中配置:
<!--配置Servlet -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
* 執行原理:
1. 當伺服器接受到客戶端瀏覽器的請求後,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
2. 查詢web.xml檔案,是否有對應的<url-pattern>標籤體內容。
3. 如果有,則在找到對應的<servlet-class>全類名
4. tomcat會將位元組碼檔案載入進記憶體,並且建立其物件
5. 呼叫其方法
* Servlet中的生命週期方法:
1. 被建立:執行init方法,只執行一次
* Servlet什麼時候被建立?
* 預設情況下,第一次被訪問時,Servlet被建立
* 可以配置執行Servlet的建立時機。
* 在<servlet>標籤下配置
1. 第一次被訪問時,建立
* <load-on-startup>的值為負數
2. 在伺服器啟動時,建立
* <load-on-startup>的值為0或正整數
* 概念:執行在伺服器端的小程式
* Servlet就是一個介面,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
* 將來我們自定義一個類,實現Servlet介面,複寫方法。
* JavaEE:Java語言在企業級開發中使用的技術規範的總和,一共規定了13項大的規範
* Tomcat:web伺服器軟體
1. 下載:http://tomcat.apache.org/
2. 安裝:解壓壓縮包即可。
* 注意:安裝目錄建議不要有中文和空格
3. 解除安裝:刪除目錄就行了
4. 啟動:
* bin/startup.bat ,雙擊執行該檔案即可
* 訪問:瀏覽器輸入:http://localhost:8080 回車訪問自己
http://別人的ip:8080 訪問別人
* 可能遇到的問題:
1. 黑視窗一閃而過:
* 原因: 沒有正確配置JAVA_HOME環境變數
* 解決方案:正確配置JAVA_HOME環境變數
2. 啟動報錯:
1. 暴力:找到佔用的埠號,並且找到對應的程序,殺死該程序
* netstat -ano
2. 溫柔:修改自身的埠號
* conf/server.xml
* <Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8445" />
* 一般會將tomcat的預設埠號修改為80。80埠號是http協議的預設埠號。
* 好處:在訪問時,就不用輸入埠號
5. 關閉:
1. 正常關閉:
* bin/shutdown.bat
* ctrl+c
2. 強制關閉:
* 點選啟動視窗的×
6. 配置:
* 部署專案的方式:
1. 直接將專案放到webapps目錄下即可。
* /hello:專案的訪問路徑-->虛擬目錄
* 簡化部署:將專案打成一個war包,再將war包放置到webapps目錄下。
* war包會自動解壓縮
2. 配置conf/server.xml檔案
在<Host>標籤體中配置
<Context docBase="D:\hello" path="/hehe" />
* docBase:專案存放的路徑
* path:虛擬目錄
3. 在conf\Catalina\localhost建立任意名稱的xml檔案。在檔案中編寫
<Context docBase="D:\hello" />
* 虛擬目錄:xml檔案的名稱
* 靜態專案和動態專案:
* 目錄結構
* java動態專案的目錄結構:
-- 專案的根目錄
-- WEB-INF目錄:
-- web.xml:web專案的核心配置檔案
-- classes目錄:放置位元組碼檔案的目錄
-- lib目錄:放置依賴的jar包
1. 請求訊息:客戶端傳送給伺服器端的資料
* 資料格式:
1. 請求行
2. 請求頭
3. 請求空行
4. 請求體
2. 響應訊息:伺服器端傳送給客戶端的資料
* 資料格式:
1. 響應行
1. 組成:協議/版本 響應狀態碼 狀態碼描述
2. 響應狀態碼:伺服器告訴客戶端瀏覽器本次請求和響應的一個狀態。
1. 狀態碼都是3位數字
2. 分類:
1. 1xx:伺服器就收客戶端訊息,但沒有接受完成,等待一段時間後,傳送1xx多狀態碼
2. 2xx:成功。代表:200
3. 3xx:重定向。代表:302(重定向),304(訪問快取)
4. 4xx:客戶端錯誤。
* 代表:
* 404(請求路徑沒有對應的資源)
* 405:請求方式沒有對應的doXxx方法
5. 5xx:伺服器端錯誤。代表:500(伺服器內部出現異常)
2. 響應頭:
1. 格式:頭名稱: 值
2. 常見的響應頭:
1. Content-Type:伺服器告訴客戶端本次響應體資料格式以及編碼格式
2. Content-disposition:伺服器告訴客戶端以什麼格式開啟響應體資料
* 值:
* in-line:預設值,在當前頁面內開啟
* attachment;filename=xxx:以附件形式開啟響應體。檔案下載
3. 響應空行
4. 響應體:傳輸的資料
* 重定向的特點:redirect
1. 位址列發生變化
2. 重定向可以訪問其他站點(伺服器)的資源
3. 重定向是兩次請求。不能使用request物件來共享資料
* 轉發的特點:forward
1. 轉發位址列路徑不變
2. 轉發只能訪問當前伺服器下的資源
3. 轉發是一次請求,可以使用request物件來共享資料
* forward 和 redirect 區別
* 路徑寫法:
1. 路徑分類
1. 相對路徑:通過相對路徑不可以確定唯一資源
* 如:./index.html
* 不以/開頭,以.開頭路徑
* 規則:找到當前資源和目標資源之間的相對位置關係
* ./:當前目錄
* ../:後退一級目錄
2. 絕對路徑:通過絕對路徑可以確定唯一資源
* 如:http://localhost/day15/responseDemo2 /day15/responseDemo2
* 以/開頭的路徑
* 規則:判斷定義的路徑是給誰用的?判斷請求將來從哪兒發出
* 給客戶端瀏覽器使用:需要加虛擬目錄(專案的訪問路徑)
* 建議虛擬目錄動態獲取:request.getContextPath()
* <a> , <form> 重定向...
* 給伺服器使用:不需要加虛擬目錄
* 轉發路徑