EL&JSTL表达式

EL&JSTL表达式

EL表达式

是为了简化咱们的jsp代码,具体一点就是为了简化在jsp里面写的那些java代码。

  • 语法结构

    ${expression }

  • 从指定的作用域取参数

    ${requestScope.表达式}

如果从作用域中取值,会先从小的作用域开始取,如果没有,就往下一个作用域取。 一直把四个作用域取完都没有, 就没有显示。

如何使用

  1. 取出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 }
  1. 如果域中所存的是数组
<%
String [] a = {"aa","bb","cc","dd"};
pageContext.setAttribute("array", a);
%>
      		
使用EL表达式取出作用域中数组的值<br>

${array[0] } , ${array[1] },${array[2] },${array[3] }
  1. 如果域中锁存的是集合
<%
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] }

  1. 取出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表达式配合

怎么使用

  1. 导入jar文件到工程的WebContent/Web-Inf/lib jstl.jar standard.jar

  2. 在jsp页面上,使用taglib 指令,来引入标签库

比如引入JSTL核心标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  1. 注意: 如果想支持 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上一篇传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值