EL+jstl 用法
一、EL表達式
1. 概念:
Expression Language 表達式語言
2. 作用:
替換和簡化jsp頁面中java代碼的編寫
3. 語法:
${表達式}
4. 注意:
jsp默認支持el表達式的。如果要忽略el表達式
- 設置jsp中page指令中:
isELIgnored="true"
忽略當前jsp頁面中所有的el表達式 \${表達式}
:忽略當前這個el表達式
5. 使用:
1. 運算:
運算符:
算數運算符: + - * /(div) %(mod)
比較運算符: > < >= <= == !=
邏輯運算符: &&(and) ||(or) !(not)
空運算符: empty
功能:用於判斷字符串、集合、數組對象是否爲null或者長度是否爲0
${empty list}:判斷字符串、集合、數組對象是否爲null或者長度爲0
${not empty str}:表示判斷字符串、集合、數組對象是否不爲null 並且 長度>0
2. 獲取值
- el表達式
只能從域對象中獲取值
- 語法:
${域名稱.鍵名}:從指定域中獲取指定鍵的值
域名稱:
pageScope --> pageContext
當前頁面requestScope --> request
一次請求sessionScope --> session
當前會話applicationScope --> application
(ServletContext)全局,所有用戶共享
舉例:在request域中存儲了name=張三
獲取:${requestScope.name}
-
${鍵名}:
表示依次從最小的域中查找是否有該鍵對應的值,直到找到爲止。 -
獲取對象、List集合、Map集合的值
-
對象:
${域名稱.鍵名.屬性名} 本質上會去調用對象的getter方法 -
List集合:
${域名稱.鍵名[索引]} -
Map集合:
1. ${域名稱.鍵名.key名稱}
2. ${域名稱.鍵名[“key名稱”]}
-
-
隱式對象:
el表達式中有11個隱式對象
request,response,outpageContext
,session,applicationpage,config,exception
pageContext
:獲取jsp其他八個內置對象
例子:
${pageContext.request.contextPath}:動態獲取虛擬目錄
二、JSTL
1. 概念:
JavaServer Pages Tag Library JSP
標準標籤庫 是由Apache組織提供的開源的免費的jsp標籤 <標籤>
2. 作用:
用於簡化和替換jsp頁面上的java代碼
3. jstl 使用步驟:
- 導入jstl相關jar包
提取碼: shjm
- 引入標籤庫:taglib指令: <%@ taglib %>
<%--引用標籤庫--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
4. 常用的JSTL標籤
1. if:相當於java代碼的if語句
屬性
:test 必須屬性,接受boolean表達式如果表達式爲true,則顯示if標籤體內容,如果爲false,則不顯示標籤體內容一般情況下,test屬性值會結合el表達式一起使用注意
:
c:if標籤沒有else情況,想要else情況,則可以在定義一個c:if標籤
實例
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%--引用標籤庫--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>if標籤</title>
</head>
<body>
<c:if test="true">
我是真的
</c:if>
<%--java--%>
<%
List list=new ArrayList();
list.add("aaaa");
request.setAttribute("list",list);
request.setAttribute("number",9);
%>
<%--jstl代碼塊--%>
<c:if test="${not empty list}">
遍歷循環。。。。。。。。。。。。。。。。
</c:if>
<c:if test="${number%2!=0}">
${number}爲基數
</c:if>
<%--c:if標籤沒有else情況,想要else情況,則可以在定義一個c:if標籤--%>
<c:if test="${number%2==0}">
${number}爲基數
</c:if>
</body>
</html>
2. choose:相當於java代碼的switch語句
1. 使用choose標籤聲明 相當於switch聲明
2. 使用when標籤做判斷 相當於case
3. 使用otherwise標籤做其他情況的聲明 相當於default
實例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>choose標籤</title>
</head>
<body>
<%--choose:相當於java代碼的switch語句--%>
<%--1. 使用choose標籤聲明 相當於switch聲明--%>
<%--2. 使用when標籤做判斷 相當於case--%>
<%--3. 使用otherwise標籤做其他情況的聲明 相當於default--%>
<%
request.setAttribute("number",3);
%>
<c:choose>
<c:when test="${number==1}">星期一</c:when>
<c:when test="${number==2}">星期二</c:when>
<c:when test="${number==3}">星期三</c:when>
<c:when test="${number==4}">星期四</c:when>
<c:when test="${number==5}">星期五</c:when>
<c:when test="${number==6}">星期六</c:when>
<c:when test="${number==7}">星期日</c:when>
<c:otherwise>不符合規則</c:otherwise>
</c:choose>
</body>
</html>
3. foreach:相當於java代碼的for語句
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>foreach標籤</title>
</head>
<body>
<%--
for(int i=0 ;i<=6;i++){
}
var 臨時變量----> i
begin 開始 -----> int i=0
end 結束 -----> i<=6
step 步長 -----> i++
varStatus循環狀態對象
index 容器中元素的索引,從0開始
count 循環次數
--%>
<c:forEach begin="1" end="6" var="i" step="1">
${i}
</c:forEach>
<hr>
<%--
for(int i:list ){
}
items:容器對象 --->list
var 容器中元素的臨時變量----->i
varStatus循環狀態對象
index 容器中元素的索引,從0開始
count 循環次數,從1開始
--%>
<%
List list=new ArrayList();
list.add("aaa");
list.add("bbb");
request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="str" varStatus="s">
${s.index} ${s.count} ${str}} <br>
</c:forEach>
</body>
</html>
三、 練習:
需求:在request域中有一個存有User對象的List集合。需要使用jstl+el將list集合數據展示到jsp頁面的表格table中
javaBean類
import java.text.SimpleDateFormat;
import java.util.Date;
public class User {
private String name;
private int age;
private Date data;
//格式化日期
public String getBirStr(){
if ( data!=null){
SimpleDateFormat spm=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return spm.format(data);
}else {
return "";
}
}
//構造方法
public User() {
}
public User(String name, int age,Date data) {
this.name = name;
this.age = age;
this.data = data;
}
//get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
}
jsp代碼
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page import="cn.itcast.javaBean.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
List list=new ArrayList();
list.add(new User("張三",19,new Date()));
list.add(new User("李四",20,new Date()));
list.add(new User("王五",21,new Date()));
list.add(new User("趙六",21,new Date()));
request.setAttribute("list",list);
%>
<table style="color: aquamarine" width="400px" border="1px" align="center">
<tr>
<th>編號</th>
<th>名字</th>
<th>年齡</th>
<th>出生日期</th>
</tr>
<c:forEach items="${list}" var="i" varStatus="s">
<c:if test="${s.count% 2== 0}">
<tr style="background-color: lightpink">
<td>${s.count}</td>
<td>${i.name}</td>
<td>${i.age}</td>
<td>${i.BirStr}</td>
</tr>
</c:if>
<c:if test="${s.count% 2!= 0}">
<tr style="background-color: cornflowerblue">
<td>${s.count}</td>
<td>${i.name}</td>
<td>${i.age}</td>
<td>${i.birStr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>
瀏覽器出現效果