1. 程式人生 > >**表示式_EL表示式與JSTL表示式 [web基礎day17] *

**表示式_EL表示式與JSTL表示式 [web基礎day17] *

今日內容:

1.JSP:
	* 指令
	* 註釋
	* 內建物件		
2.MVC開發模式
3.EL表示式
4.JSTL標籤
5.三層架構

JSP:

1.指令
	* 作用:用於配置JSP頁面,匯入資原始檔
	* 格式:
		<% 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2... %>
	* 分類:
		1.page:用於配置JSP頁面
			* contentType:等同於response.setContentType()  如:contentType="text/html;charset=UTF-8"
				1.設定響應體的檔案編碼,字符集
				2.設定當前JSP頁面編碼(這是高階的ide工具讀取了該程式碼然後自動編寫的)
				3.如果使用低階工具(如記事本),則需要設定pageEncoding="GBK"來進行編碼。
			 * pageEncoding="GBK":設定當前頁面編碼
			 * import:導包    如:import java.util.lang.String
			 * errorPage:當前頁面發生異常後9,會自動跳轉到指定的錯誤頁面  如:errorpage="500.jsp"
			 * isErrorPage:標識當前頁面是否是錯誤頁面  isErrorPage="false"
					* true:是,可以使用內建物件exception  可以列印錯誤資訊,返回錯誤原因,以後可以列印在日誌上。
					* false:否。預設值。不可以使用內建物件exception   
					
			 * language:當前頁面的型別:只有一個值,language="java":就是說jsp頁面用的是java語言。  
			 * buffer:緩衝區,可以寫資料到瀏覽器上去。
			 
		2.include:頁面包含的。匯入頁面的資原始檔
			<%@include file="top.jsp"%>


		3.taglib:匯入資源:用JSTL就用c:字首
			* <%@taglib prefix="c" uri="http://java.sun.com/jap/jstl/core"%>
				* prefix:字首,自定義的,呼叫標籤的時候需要加字首
2.註釋:
	1.html註釋:
		* <!-- -->:只能註釋html片段
	2.jsp註釋:
		* <%-- --%>:可以註釋所有,既可以註釋html內容也可以註釋jsp內容		
		* 推薦使用jsp註釋;
		
3.內建物件(九個):
	-- 在jsp頁面中不需要建立,直接使用的物件。它們是在jsp建立過程中已經宣告好了的內建物件那個。  注意:isErrorPage如果為flase時,則不建立exception物件,就只有八個了。
* 域物件:	(面試的時候可能考:請寫出內建的九個物件。)			-- 使用物件的時候是java程式碼,所以需要用<% %>進行。	
		變數名					真實型別						作用:
	* pageContext:    		PageContext					當前頁面共享資料			可以獲取其他八個物件,使用方法:pageContext.getxxx	
	* request:				HttpServletRequest			一次請求訪問的多個資源()轉發
	* session				HttpSession					一次會話的多個請求間
	* application			ServletContext				所有使用者間共享資料 (慎用,空間大)
* 響應物件:
	* response:				HttpServletResponse			響應物件
	* page					Object						當前頁面(Servlet)的物件  this
	* out:					ServletConfig				輸出物件,資料輸出到頁面上,基本都用它
	* config				ServletConfig   			Servlet的配置物件
	* exception:			Throwable					異常物件
	
		* request存資料,轉發-->request 取資料
		* pageContext一般不用於共享,但是它可以呼叫其他八個物件。
		* request和session常用,一個用於一次請求的轉發,一個用於一次會話的多個請求
		* out使用較多,輸出方法中建議用它。

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. 獲取客戶端的輸入
		2. 呼叫模型
		3. 將資料交給檢視展示
		
	* 優點:
		* 耦合性低,方便維護,可以利於分工協作(jsp,模型,servlet都可以分工找人寫)
		* 重用性高。(將model模型的資料封裝成方法,可以重用)
		* 部署快,有利於工程管理
	* 缺點:
		* 使得專案架構變得複雜,對開發人員要求高。
	
			-- jsp介面只做展示資料的工作。
			-- servlet獲取使用者輸入與資料庫返回的結果進行比較再交給jsp
			-- model獲取資料庫內的內容,返回給servlet

EL表示式: 最重要的作用就是:將在域物件中的資料取出來

1.概念:Expression Language 表示式語言
2.作用:替換和簡化jsp頁面中java程式碼的編寫
3.語法:${表示式}
4.注意:
	* jsp預設支援el表示式
	* isElignored="true"   -- <%@ page 中寫這個的時候,el表示式將被忽略,不被瀏覽器解析isElignored="true"  %>
	* \${表示式}:忽略當前這個el表示式
5.使用:
	1.運算:
		1.算數運算子:+-* /(div)  %(mod)
		2.比較運算子:><= <= == !=
		3.邏輯運算子:&&(and) ||(or) !(not)
		4.空運算子:empty
			* 功能:用於判斷字串、集合、陣列物件是否為null或者長度是否為0;
			* ${empty list}:判斷該集合為null並且長度為0或者長度為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=張三			
					* request.setAttribute("name","張三")
					* session.setAttribute("age","23")
						* 獲取:${requestScope.name}
						* ${sessionScope.age}
				* 注意:如果沒有該值,不會報錯,只是不會顯示該頁面。
			2.${鍵名}:表示依次從最小的域中查詢是否有該鍵對應的值,直到找到位置。
				${name}:首先從pageScope,再從requestScope->sessionScope->applicationScope依次查詢。
			3.獲取物件、List集合、Map集合的值
				1.物件:${域名稱.鍵名.屬性名}
					* 本質上會去呼叫物件的getter方法。
				2.List集合:${域名城.鍵名.key名稱}
			
				3.Map集合:
					* ${域名城.鍵名.屬性值}
					* ${域名城.鍵名稱.[屬性值]}
				

	3.隱式物件
		* el表示式中有11個隱式物件
		* pageContext:
			* 獲取jsp其他八個物件
			* 動態獲取虛擬目錄:  ${pageContext.request.contextPath}   在需要寫虛擬目錄的地方就寫這個。

JSTL

1.概念:JavaServer Pages Tag Library JSP標準標籤庫
	* 是由Apache組織提供的開源的免費的jsp標籤
2.作用:用於簡化和替換jsp頁面上的java程式碼

3.使用步驟:
	1.匯入jstl相關jar包  :  -->   <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
	2.引入標籤庫:taglib指令:<%@taglib %> 引入標籤庫的時候要加字首,參照上面。
	3.使用標籤
4.常用標籤:
	1.if:相當於java的if語句
		* <c:if test=""></c:if>
		* 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
			* <%   
			* <c:choose>
			* <c:when test="${number==1}">星期一</c:when>
			* </c:choose>
			* %>
	3.foreach:相當於java程式碼的for語句
		* 使用foreach語句能做什麼事情?
			* 完成重複的操作
				* 屬性:
					-- begin: 開始值
					-- end:結束值
					-- var:臨時變數
					-- step:步長
					-- varStatus:迴圈的狀態
						* index	:容器中迴圈的索引,
						* count	:迴圈的次數
			* 遍歷容器
				* 屬性:
					-- items:容器物件  
					-- var:容器中的臨時變數
					

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

三層架構:

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

	* 在資料訪問層中,定義了對於資料庫最基本的CRUD操作   dao:Data Access Object Catalog Access Object      cn.itcast.專案名.dao
	* 業務邏輯層:組合DAO層中的簡單方法,形成複雜的功能(業務邏輯操作)		cn.itcast.專案名.service
	* 接收使用者引數,封裝資料,呼叫業務邏輯層完成處理,轉發jsp頁面完成顯示。		cn.itcast.專案名.web

* 三大框架:
	* web層:SpringMVC框架
	* dao層:MyBatis框架
	* Service:Spring框架			-- web框架中的靈魂框架,它也可以呼叫其他框架。

案例:使用者資訊列表展示

1.需求:使用者資訊的增刪改查操作
2.設計:
	1.技術選型:
		Servlet+JSP+MYSQL+JDBCTempleat+Duird+BeanUtils+Tomcat
	2.資料庫設計:
		create datebase 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.部署運維

include匯入資源的程式碼演示

JSTL標籤庫foreach迴圈重複

JSTL標籤庫迴圈遍歷容器的程式碼演示

JSTL表示式中if條件語句判斷集合是否為空