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] }
- 如果域中锁存的是集合
<% String [] a = {"aa","bb","cc","dd"}; pageContext.setAttribute("array", a); %> 使用EL表达式取出作用域中集合的值<br> ${li[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.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}"> <p>My income is: <c:out value="${income}"/><p> </c:if>
- 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](
文章来源: https://blog.csdn.net/weixin_43311054/article/details/92166420