1. 程式人生 > 實用技巧 >javaweb學習筆記整理補課

javaweb學習筆記整理補課

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> 重定向...
						* 給伺服器使用:不需要加虛擬目錄
							* 轉發路徑