EL&JSTL表达式
EL表达式
是为了简化咱们的jsp代码,具体一点就是为了简化在jsp里面写的那些java代码。
-
语法结构
${expression }
-
从指定的作用域取参数
${requestScope.表达式}
如果从作用域中取值,会先从小的作用域开始取,如果没有,就往下一个作用域取。 一直把四个作用域取完都没有, 就没有显示。
如何使用
- 取出4个作用域中存放的值。
<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
按普通手段取值<br>
<%= pageContext.getAttribute("name")%>
<%= request.getAttribute("name")%>
<%= session.getAttribute("name")%>
<%= application.getAttribute("name")%>
<br>使用EL表达式取出作用域中的值<br>
${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }
- 如果域中所存的是数组
<%
String [] a = {"aa","bb","cc","dd"};
pageContext.setAttribute("array", a);
%>
使用EL表达式取出作用域中数组的值<br>
${array[0] } , ${array[1] },${array[2] },${array[3] }
- 如果域中锁存的是集合
<%
List<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
pageContext.setAttribute("li", list);
%>
使用EL表达式取出作用域中集合的值<br>
${list[0] } , ${li[1] },${li[2] },${li[3] }
- 取出Map集合的值
<%
Map map = new HashMap();
map.put("name", "zhangsna");
map.put("age",18);
map.put("address","北京..");
map.put("address.aa","深圳..");
pageContext.setAttribute("map", map);
%>
使用EL表达式取出作用域中Map的值<br>
<!-- map的key中有特殊字符时,我们必须用[]这种方式来获取值 -->
${map.name } , ${map.age } , ${map.address } , ${map["address.aa"] }
EL表达式 的11个内置对象。
${ 对象名.成员 }
- pageContext
作用域相关对象
- pageScope
- requestScope
- sessionScope
- applicationScope
头信息相关对象
- header
- headerValues
参数信息相关对象
-
param
-
paramValues
-
cookie
全局初始化参数
- initParam
JSTL
全称 : JSP Standard Tag Library jsp标准标签库
简化jsp的代码编写。 替换 <%%> 写法。 一般与EL表达式配合
怎么使用
-
导入jar文件到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
-
在jsp页面上,使用taglib 指令,来引入标签库
比如引入JSTL核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 注意: 如果想支持 EL表达式,那么引入的标签库必须选择1.1以上的版本,1.0的版本不支持EL表达式。
JSTL标签分类
核心标签(最核心、最重用)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
表达式控制标签
- out
属性名 含义 是否必须 value 输出值,如果是常量直接赋值, 如果是变量需要通过EL表达式取值 是 default 当value为null时, 输出default属性配置的值 否 escapeXml 是否转义XML特殊字符,取值true/false, 默认是true 否 - set
属性名 含义 是否必须 value 搭配var属性使用,设置变量的值;搭配property和target使用,设置javabean属性的值 是 var 定义的变量名称 否 scope 变量保存到的作用域,默认是pageContext 否 target 给javabean设置属性,指定那个javabean。需配合<jsp:useBean>标签和property、value属性使用 否 property 设置javabean的哪个属性的值 否 - remove
属性名 含义 是否必须 var 删除指定的变量,只能删除变量,不能删除javabean的属性 是 - catch
属性名 含义 是否必须 var 存储错误信息 是 <%-- <c:catch>用于包裹其他容易出错的标签,比如 --%> <c:catch var="error"> <!-- aa为没有实例化的javabean --> <c:set target="aa" property="name" value="zhangsan" /> </c:catch> <c:out value="${error}" />
-
流程控制标签
- if
<c:if test="${income > 8000}" var="ret"> <p>My income is: <c:out value="${income}"/><p> </c:if> <!-- var属性ret存储的是test运算的结果 --> ${ret}
- choose&when&otherwise
<c:choose> <c:when test="${income <= 1000}"> Income is not good. </c:when> <c:when test="${income > 10000}"> Income is very good. </c:when> <c:otherwise> Income is undetermined... </c:otherwise> </c:choose>
- forEach
<% List<String> students = new ArrayList<>(); students.add("张三"); students.add("李四"); students.add("王五"); students.add("赵六"); request.setAttribute("stus", students); %> <!-- forEach遍历全部元素 --> <c:forEach var="stu" items="${stus}"> <c:out value="${stu}" /> <br /> </c:forEach> <!-- forEach遍历部分元素 --> <c:forEach var="stu" items="${stus}" begin="1" end="3"> <c:out value="${stu}" /> <br /> </c:forEach> <!-- forEach遍历部分元素,指定步长 --> <c:forEach var="stu" items="${stus}" begin="1" step="2"> <c:out value="${stu}" /> <br /> </c:forEach> <!-- 用法四:部分遍历并带状态 --> <c:forEach var="stu" items="${stus}" begin="1" end="3" varStatus="status"> <c:out value="${stu}——四个属性:"></c:out><br> <c:out value="index属性:${status.index}"></c:out><br> <c:out value="count属性:${status.count}"></c:out><br> <c:out value="first属性:${status.first}"></c:out><br> <c:out value="last属性:${status.last}"></c:out><br> <c:out value="----------"></c:out><br> </c:forEach> <!-- varStatus变量的几个属性:index从0开始;count从1开始;first是否第一个(boolean);last是否最后一个(boolean)。 -->
- forTokens
<c:forTokens items="zhangsan,lisi,wangwu" delims="," var="item"> <c:out value="${item}" /> <br /> </c:forTokens> <!-- 另外forTokens也支持begin、end、step、varStatus几个属性,用法和forEach一样 -->
-
URL操作标签
- url
<c:url value="http://localhost:8080/Test/index.jsp" var="newUrl" scope="session"> <c:param name="username">zhangsan</c:param> <c:param name="password">a123456</c:param> </c:url> <a href="${newUrl}">New URL</a>
- redirect
<c:redirect url="www.baidu.com"> <c:param name="username">zhangsan</c:param> <c:param name="password">a123456</c:param> </c:redirect>
- param
一般作为其他标签的子标签使用,为其附加参数
格式化标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
- 格式化时间
<%
Date date = new Date();
pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>
- 格式化数字
<%
double d1 = 3.5;
double d2 = 4.4;
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<fmt:formatNumber value="${d2 }" pattern="#.##"/>
SQL标签
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
- setDataSource
<sql:setDataSource var="db" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
user="root" password="1234"/>
- query
<sql:query dataSource="${db}" var="rs">
SELECT * from Students;
</sql:query>
- update
<sql:update dataSource="${db}" var="count">
INSERT INTO Students VALUES (154,'Nasreen', 'jaha', 25);
</sql:update>
- param & dateParam
<%
Date DoB = new Date("2000/10/16");
int studentId = 151;
%>
<sql:update dataSource="${db}" var="count">
UPDATE Student SET dob = ? WHERE Id = ?
<sql:dateParam value="<%=DoB%>" type="DATE" />
<sql:param value="<%=studentId%>" />
</sql:update>
- transaction
<sql:transaction dataSource="${db}">
<sql:update var="count">
UPDATE Student SET First_Name = 'Suraj' WHERE Id = 150
</sql:update>
<sql:update var="count">
UPDATE Student SET Last_Name= 'Saifi' WHERE Id = 153
</sql:update>
<sql:update var="count">
INSERT INTO Student
VALUES (154,'Supriya', 'Jaiswal', '1995/10/6');
</sql:update>
</sql:transaction>
XML标签
用的不多,这里不在列举
ps: 更多详细内容,参见:https://www.javatpoint.com/jstl
jsp和el&jstl常混合用所以都要掌握哦
jsp上一篇传送门