EL表达式JSTL

EL表达式

EL表达式只能在 JSP 文件中写

Expression Language 表达式语言,替代 JSP 页面中数据访问时的复杂编码,可以非常便捷地取出域对象(pageContexe、request、session、application)中保存的数据,前提是一定要先 setAttribute ,EL就相当于在简化 getAttribute。

${变量名} 变量名就是 setAttribute 对应的 key 值。

<%
	String name = (String) request.getAttribute("name");
%>
<%=name%>
<hr/>
${name}

EL表达式底层是 getAttribute

JSP中其实都是中间层的东西

  • EL 对于 4 种域对象的默认查找顺序:

    pageContext —> request —> session —> application

    按照上述的顺序进行查找,找到后立即返回,在 application 中也无法找到,则返回 null

  • 指定作用域进行查找

    pageContext:${pageScope.name}

    request: ${requestScope.name}

    sesssion: ${sessionScope.name}

    application: ${applicationScope.name}

    数据级联:

    <%
        User user = new User(1,"张三",89);
        pageContext.setAttribute("User",user);
    %>
    编号:${user.id}
    姓名:${user.name}
    成绩:${user.score}
    

JSTL

JSP Standard Tag Library JSP 标准标签库,JSP 为开发者提供的一系列的标签,使用这些标签可以完成一些逻辑处理,比如循环遍历集合,让代码更加简洁,不在出现 JSP 脚本穿插的情况。

实际开发中 EL 和 JSTlL 集合起来使用,JSTL 侧重于逻辑处理,EL 负责展示数据。

JSTL 的使用:

​ 1、需要导入 jar 包(jstl.jar standard.jar)存放的位置 web/WEB-INF/lib

​ 2、在 JSP 页面开始的地方导入 JSTL 标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

​ 3、在需要得放使用

<table>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>成绩</th>
    </tr>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.score}</td>
        </tr>
    </c:forEach>    
</table>
  • 如果不用 JSTL 在 jsp 中循环遍历时的代码

    <table>
          <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>成绩</th>
          </tr>
          <%
            List<User> list = (List<User>) request.getAttribute("users");
            for(User user : list){
              request.setAttribute("user",user);
          %>
              <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.score}</td>
              </tr>
          <%
            }
          %>
     <table>
    

我们可以看出需要频繁的 <% %>,且需要setAttribute,消耗内存,不方便,容易出错

JSTL 优点

  • 提供了统一的标签
  • 可以用于编写各种动态功能

核心标签库 常用标签

引入标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
set、out、remove、catch
  • set:向域对象中添加数据

    替代的是:

    <%
    	request.setAttribute("name","tom");
    %>
    
    <c:set var="name" value="tom" scope="request"></c:set>
    
  • out:输出域对象中的数据

    <!--和 EL 表达式功能相同-->
    <c:set var="name" value="tom" scope="request"></c:set>
    <c:out value="${name}" ></c:out>
    <!--比 EL 表达式多了一个功能:可以再找不到指定 key 时打印的不是 null 而是可以显示自定义的东西-->
    <c:out value="${age}" default="未定义" ></c:out>
    
  • remove:删除域对象中的数据

    <c:set var="name" value="Allan" scope="request"></c:set>
    <c:out value="${name}" ></c:out>
    <c:remove var="name" scope="request"></c:remove>
    <c:out value="${name}" default="未定义" ></c:out>
    
  • catch:捕获异常,将最重要的错误信息存在 error 中

    <c:catch var="error">
        <%
        int a = 10/0;
        %>
    </c:catch>
    ${error}
    
条件标签:if、choose
<C:set var="num1" value="1"></C:set>
<C:set var="num2" value="2"></C:set>
<c:if test="${num1>num2}">fail</c:if>
<c:if test="${num1<num2}">ok</c:if>

<hr>

<c:choose>ch
    <c:when test="${num1>num2}">fail</c:when>
    <c:otherwise>ok</c:otherwise>
</c:choose>
迭代标签:forEach
<%
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    list.add("e");
    list.add("f");
    request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="str">
    ${str}<br/>
</c:forEach>

格式化标签库常用标签

引入标签库

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
    request.setAttribute("date",new Date());
%>
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值