EL&JSTL表達式

EL&JSTL表達式

1.EL表達式

​ EL(Express Lanuage)表達式(${ })可以嵌入在jsp頁面內部,減少jsp腳本的編寫,EL 出現的目的是要替代jsp頁面中腳本的編寫

EL表達式最主要的作用是從域中獲取值

		<!-- 在域中存值 -->
	<%
		request.setAttribute("name", "張三");
	
		User user=new User();
		user.setId(1);
		user.setName("李四");
		user.setPassword("123");
		session.setAttribute("user", user);
		
		List<User> list=new ArrayList<User>();
		User user1=new User();
		user1.setId(1);
		user1.setName("王五");
		user1.setPassword("123");
		list.add(user1);
		User user2=new User();
		user2.setId(1);
		user2.setName("趙二");
		user2.setPassword("123");
		list.add(user2);
		application.setAttribute("list", list);
	%>
	
	<!-- 通過腳本來取值 -->
	<%=request.getAttribute("name") %>
	<%
		User sessionuser=(User)session.getAttribute("user");
		out.write(sessionuser.getName());
	%>
	<hr>
	<!-- 通過EL表達式來取值 不需要通過方法來返回屬性值,可以直接.屬性名來獲取值 注意!!屬性不是成員變量!!-->
	${requestScope.name}
	${sessionScope.user.name}<!-- 不需要通過user對象中的getName()來獲取name的值,直接.name就可以 -->
	${applicationScope.list[1].name}
	
	<hr>
	<!-- 通過EL表達式全局取值 默認從最小的域開始找,直到找到就結束-->
	${name}
	${user.name}
	${list[1].name}

requestScope、applicationScope、sessionScope是EL中的內置對象,代表的是從指定的域對象中獲取相應的屬性

注意:屬性和成員變量是不同的概念!!!!!

屬性:屬性是通過set()和get()來設置的,setAAA(),getAAA()中AAA就是屬性。

成員變量:private int XXX,這是成員變量,只不過我們通常將成員變量和屬性設置成一樣的。

但需要注意的是EL是通過屬性來獲取成員變量的,不能直接獲取成員變量!

2.通過EL表達式獲取項目路徑

​ 一般通過**${pageContext.request.contextPath}**來動態獲取項目名稱路徑類似於request.getContextPath();

3.EL內部支持表達式

​ 例如:${1=1}

​ ${empty user}

​ ${user==null?true:false}

2.JSTL

​ JSTL(JSP Standard Tag Library),JSP標準標籤庫,可以嵌入在jsp頁面中使用標籤的形式完成業務邏輯等功能。jstl出現的目的同el一樣也是要代替jsp頁面中的腳本代碼。

​ 目前一般只是用jstl的核心庫Core,具體步驟:

  1. 導入jstl.jar包 這個可以去Apache官網下載

  2. 通過taglib指令導入核心庫

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>

1.JSTL核心庫的常用標籤

​ 1.<c: if>標籤

<c:if test="id==1">
	xxxxxx
</c:if>
test中是返回boolean條件,並沒有else,只能通過
<c:if test="id!=1">
	xxxxxx
</c:if>

​ 2.<c: forEach>標籤 有兩種表現形式

<!--第一種 
items代表的是集合或者數組 var表示的是集合中的元素
相當於:
List<String> list=new ArrayList<String>()
for(String str:list){
	sys(str)		
}
-->
<c:forEach items="list" var="str">
	${str}
</c:forEach>

<!-- 第二種
相當於:
for(int i=0;i<=5;i++){
	xxx
}
-->
<c:forEach begin="0" end="5" var="i">
	${i}
</c:forEach>

JSTL&EL遍歷List和Map集合:

<!-- 通過jstlforEach標籤和EL表達式來遍歷List和Map集合 -->
	<%
		List<String> list=new ArrayList<String>();
		list.add("aaaaa");
		list.add("bbbbb");
		list.add("ccccc");
		request.setAttribute("list", list);
		
		
		Map<String,User> map=new HashMap<String,User>();
		List<User> userlist=new ArrayList<User>();
		User user1=new User();
		user1.setName("王五");
		userlist.add(user1);
		User user2=new User();
		user2.setName("趙二");
		userlist.add(user2);
		
		map.put("key1",user1);
		map.put("key2",user2);
		session.setAttribute("map", map);
	%>
	
	<!-- forEach標籤與EL遍歷集合 -->
	<!-- items代表的是集合或者是數組  str代表是的集合中的某一元素
		for(String str:list){
			sys(str);
		}
	-->
	<c:forEach items="${list}" var="str">
		${str}<br>
	</c:forEach>
	<!-- entry代表的是鍵值對,EL表達式直接通過.key獲取鍵值,同樣.value獲取相應的值
		這裏的value是User對象所以可以通過.name獲得name的值
	 -->
	<c:forEach items="${map}" var="entry">
		${entry.key}=======${ entry.value.name}<br>
	</c:forEach>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章