天天看點

JavaWeb_Day17_EL&JSTL筆記今日内容

今日内容

1. JSP:
	1. 指令
	2. 注釋
	3. 内置對象

2. MVC開發模式
3. EL表達式
4. JSTL标簽
5. 三層架構
           

JSP:

1. 指令
	* 作用:用于配置JSP頁面,導入資源檔案
	* 格式:
		<%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ... %>
	* 分類:
		1. page		: 配置JSP頁面的
			* contentType:等同于response.setContentType()
				1. 設定響應體的mime類型以及字元集
				2. 設定目前jsp頁面的編碼(隻能是進階的IDE才能生效,如果使用低級工具,則需要設定pageEncoding屬性設定目前頁面的字元集)
			* import:導包
			* errorPage:目前頁面發生異常後,會自動跳轉到指定的錯誤頁面
			* isErrorPage:辨別目前也是是否是錯誤頁面。
				* true:是,可以使用内置對象exception
				* false:否。預設值。不可以使用内置對象exception


		2. include	: 頁面包含的。導入頁面的資源檔案
			* <%@include file="top.jsp"%>
		3. taglib	: 導入資源
			* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
				* prefix:字首,自定義的
2. 注釋:
	1. html注釋:
		<!-- -->:隻能注釋html代碼片段
	2. jsp注釋:推薦使用
		<%-- --%>:可以注釋所有


3. 内置對象
	* 在jsp頁面中不需要建立,直接使用的對象
	* 一共有9個:
			變量名					真實類型						作用
		* pageContext				PageContext					目前頁面共享資料,還可以擷取其他八個内置對象
		* request					HttpServletRequest			一次請求通路的多個資源(轉發)
		* session					HttpSession					一次會話的多個請求間
		* application				ServletContext				所有使用者間共享資料
		* response					HttpServletResponse			響應對象
		* page						Object						目前頁面(Servlet)的對象  this
		* out						JspWriter					輸出對象,資料輸出到頁面上
		* config					ServletConfig				Servlet的配置對象
		* exception					Throwable					異常對象
           

MVC:開發模式

1. jsp演變曆史
	1. 早期隻有servlet,隻能使用response輸出标簽資料,非常麻煩
	2. 後來又jsp,簡化了Servlet的開發,如果過度使用jsp,在jsp中即寫大量的java代碼,有寫html表,造成難于維護,難于分工協作
	3. 再後來,java的web開發,借鑒mvc開發模式,使得程式的設計更加合理性

2. MVC:
	1. M:Model,模型。JavaBean
		* 完成具體的業務操作,如:查詢資料庫,封裝對象
	2. V:View,視圖。JSP
		* 展示資料
	3. C:Controller,控制器。Servlet
		* 擷取使用者的輸入
		* 調用模型
		* 将資料交給視圖進行展示


	* 優缺點:
		1. 優點:
			1. 耦合性低,友善維護,可以利于分工協作
			2. 重用性高

		2. 缺點:
			1. 使得項目架構變得複雜,對開發人員要求高
           

EL表達式

1. 概念:Expression Language 表達式語言
2. 作用:替換和簡化jsp頁面中java代碼的編寫
3. 文法:${表達式}
4. 注意:
	* jsp預設支援el表達式的。如果要忽略el表達式
		1. 設定jsp中page指令中:isELIgnored="true" 忽略目前jsp頁面中所有的el表達式
		2. \${表達式} :忽略目前這個el表達式


5. 使用:
	1. 運算:
		* 運算符:
			1. 算數運算符: + - * /(div) %(mod)
			2. 比較運算符: > < >= <= == !=
			3. 邏輯運算符: &&(and) ||(or) !(not)
			4. 空運算符: empty
				* 功能:用于判斷字元串、集合、數組對象是否為null或者長度是否為0
				* ${empty list}:判斷字元串、集合、數組對象是否為null或者長度為0
				* ${not empty str}:表示判斷字元串、集合、數組對象是否不為null 并且 長度>0
	2. 擷取值
		1. el表達式隻能從域對象中擷取值
		2. 文法:
			1. ${域名稱.鍵名}:從指定域中擷取指定鍵的值
				* 域名稱:
					1. pageScope		--> pageContext
					2. requestScope 	--> request
					3. sessionScope 	--> session
					4. applicationScope --> application(ServletContext)
				* 舉例:在request域中存儲了name=張三
				* 擷取:${requestScope.name}

			2. ${鍵名}:表示依次從最小的域中查找是否有該鍵對應的值,直到找到為止。

			
			
			3. 擷取對象、List集合、Map集合的值
				1. 對象:${域名稱.鍵名.屬性名}
					* 本質上會去調用對象的getter方法

				2. List集合:${域名稱.鍵名[索引]}

				3. Map集合:
					* ${域名稱.鍵名.key名稱}
					* ${域名稱.鍵名["key名稱"]}


	3. 隐式對象:
		* el表達式中有11個隐式對象
		* pageContext:
			* 擷取jsp其他八個内置對象
				* ${pageContext.request.contextPath}:動态擷取虛拟目錄
           

JSTL

1. 概念:JavaServer Pages Tag Library  JSP标準标簽庫
	* 是由Apache組織提供的開源的免費的jsp标簽		<标簽>

2. 作用:用于簡化和替換jsp頁面上的java代碼		

3. 使用步驟:
	1. 導入jstl相關jar包
	2. 引入标簽庫:taglib指令:  <%@ taglib %>
	3. 使用标簽

4. 常用的JSTL标簽
	1. if:相當于java代碼的if語句
		1. 屬性:
            * test 必須屬性,接受boolean表達式
                * 如果表達式為true,則顯示if标簽體内容,如果為false,則不顯示标簽體内容
                * 一般情況下,test屬性值會結合el表達式一起使用
   		 2. 注意:
       		 * c:if标簽沒有else情況,想要else情況,則可以在定義一個c:if标簽
	2. choose:相當于java代碼的switch語句
		1. 使用choose标簽聲明         			相當于switch聲明
        2. 使用when标簽做判斷         			相當于case
        3. 使用otherwise标簽做其他情況的聲明    	相當于default

	3. foreach:相當于java代碼的for語句

5. 練習:
	* 需求:在request域中有一個存有User對象的List集合。需要使用jstl+el将list集合資料展示到jsp頁面的表格table中
           

三層架構:軟體設計架構

1. 界面層(表示層):使用者看的得界面。使用者可以通過界面上的元件和伺服器進行互動
2. 業務邏輯層:處理業務邏輯的。
3. 資料通路層:操作資料存儲檔案。
           

案例:使用者資訊清單展示

1. 需求:使用者資訊的增删改查操作
2. 設計:
	1. 技術選型:Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat
	2. 資料庫設計:
		create database day17; -- 建立資料庫
		use day17; 			   -- 使用資料庫
		create table user(   -- 建立表
			id int primary key auto_increment,
			name varchar(20) not null,
			gender varchar(5),
			age int,
			address varchar(32),
			qq	varchar(20),
			email varchar(50)
		);

3. 開發:
	1. 環境搭建
		1. 建立資料庫環境
		2. 建立項目,導入需要的jar包

	2. 編碼


4. 測試
5. 部署運維