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,具體步驟:
-
導入jstl.jar包 這個可以去Apache官網下載
-
通過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>