EL与JSTL

EL与JSTL

EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。

JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标签库有5个子库,但随着发展,目前常使用的是他的核心库。

1.EL表达式

EL表达式:${EL 表达式}

 <%
      //在session中设置值
      session.setAttribute("username","李明");
      //JSP方式获取session中的值
      String username = (String) session.getAttribute("username");
      //方式一
      out.println("JSP方式一获取:"+username);
  %>
  <br>
  <%--方式二--%>
  <%= "JSP方式二获取:"+ username%>

  <hr>
  <%--EL方式获取session中的值--%>
  EL方式获取:${username}

EL操作符:

获取对象的属性:操作符“.”

${sessionScope.user.username}
//等价于
${sessionScope.user["username"]}

获取集合中的对象:操作符“[]”

${sessionScope.user[0].username}

EL运算符:

运算符说明
( )改变执行的优先级,例如${3*(4+5)}
+,-,*,/,%算术运算符,例如${3+2}
==,!=,>,>=,<,<=关系运算符,例如 a = = b 或 {a==b}或 a==b{a eq b}
&&,||,!逻辑运算符,例如${true&&false}
?:条件运算符,例如${a>b?1:2}
empty用于检测变量名是否为空,是否等于NULL,例如${empty name}
关系运算符范例结果
== eq 5 = = 5 或 {5 == 5}或 5==5{5 eq 5}true
!= ne 5 ! = 5 或 {5 != 5}或 5!=5{5 ne 5}false
< lt 3 < 5 或 {3 < 5}或 3<5{3 lt 5}true
> gt${3 > 5}或{3 gt 5}false
<= le 3 < = 5 或 {3 <= 5}或 3<=5{3 le 5}true
>= ge 3 > = 5 或 {3 >= 5}或 3>=5{3 ge 5}false

三元表达式格式为:${user!=null?user.username :" "}。如果?前面结果为true则选择前面的数据,否则选择后面的。

EL功能:

  • 取得JavaBean对象的属性${news.title}
  • 取得数组、List、Map类型对象的元素${list[0]}
  • 使用各类运算符对原始数据进行简单处理${totalRecordCount/pageSize}
  • 屏蔽一些常见的异常${username}
  • 能实现简单的自动类型转换${news}相当于(News)request.getAttribute("news")

EL访问作用域:

作用域Java代码取值EL取值
请求作用域request.getAttribute(“news”);${ requestScope.news }
会话作用域session.getAttribute(“username”);${ sessionScope.username }
程序作用域application.getAttribute(“count”);${ applicationScope.count }
页面作用域pageContext.getAttribute(“userNum”);${ pageScope.userNum }

注意:

不指定作用域,直接${username}的话,默认会按照作用域的范围从小到大(page->request->session->application)依次查找,直到找到application为止。

如果四个作用域中都没有则返回空字符串(注意:不是null,而是" "),然后什么都不显示。

EL隐含对象总共有11个:

pageScope、requestScope、sessionScope、applicationScope、param 、paramValues、header、headerValues、initParam、cookie、pageContext

2.JSTL表达式

JSTL使用步骤:

  • 下载jstl.jar和standard.jar包
    • http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
  • 将这两个包复制到WEB-INF\lib目录
  • 在JSP页面中添加指令
    • <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSTL标签库:

Core (核心库) 标签库的URI:http://java.sun.com/jsp/jstl/core 常用前缀:c

I18N(国际化) 标签库的URI:http://java.sun.com/jsp/jstl/fmt 常用前缀:fmt

SQL 标签库的URI:http://java.sun.com/jsp/jstl/sql 常用前缀:sql

XML 标签库的URI:http://java.sun.com/jsp/jstl/xml 常用前缀:x

Functions 标签库的URI:http://java.sun.com/jsp/jstl/functions 常用前缀:fn

核心标签库:

JSTL的核心标签库标签共14个,这些标签能够完成JSP页面的基本功能,减少编码工作。从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。

  1. 表达式控制标签:out标签、set标签、remove标签、catch标签。
  2. 流程控制标签:if标签、choose标签、when标签、otherwise标签。
  3. 循环标签:forEach标签、forTokens标签。
  4. URL操作标签:import标签、url标签、redirect标签、param标签。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
uri:指定引入的标签库的路径
prefix:设置标签库中标签的前缀,解决标签重名的问题

普通标签:

<c:out/>标签:用于将结果输出。类似于JSP中的<%= %>表达式,或者是EL表达式${expression}

<%--取值--%>
<c:out value="${userName}"></c:out>
<c:out value="value" default="default" escapeXml="true|false" />
value:设置要输出到页面的数据,要使用EL表达式
default:设置一个默认值,当value所设置的EL表达式的值为null时,则将default所对应的值输出到页面
escapeXml:设置输出到页面中的内容是否转义,默认值为true,表示转义,即原样输出;若设置为false,表示不转义,输出到页面中的内容会被浏览器解析

<c:set>标签:用于把某一个对象存在指定的域范围内,或者将某一个对象存储到Map或者JavaBean对象中。

<%--设值--%>
<%--设置变量--%>
<c:set var="userName" value="liming" scope="session"></c:set>
<%--设置对象属性--%>
<c:set value= "value" target="target" property="propertyName" />
var:设置共享数据的属性名
value:设置共享数据的属性值
scope:设置共享数据的域对象的范围,若不指定域对象的范围,则默认在pageContext域对象中共享数据,scope="page(默认)|request|session|application"

<c:remove>标签:相较于<c:set>,作用是移除范围域中的变量。

<%--删除userName变量--%>
<c:remove var="userName"></c:remove>
var:要删除的域对象中共享数据的属性名
scope:要删除共享数据的域对象的范围,
scope="page|request|session|application",若不指定scope,则删除所有域对象中以var的值作为属性名的数据

<c:catch>标签:用于捕获在嵌套在标签体中的内容抛出的异常,并将异常信息保存到变量中。

<c:catch var="exception">
  int i=5/0;
</c:catch>

<c:out value="${exception}"/>
<%--此句相当于exception.getMessage--%>
<c:out value="${exception.message}"/>

条件标签:

<c:if>标签:和程序中的 if 语句作用相同,用来实现条件控制,但是没else功能。

<c:if test="testCondition" [var="varName"] [scope="page|request|session|application}"]>
       ...
</c:if>
test属性用于存放判断的条件,一般使用EL表达式来编写。
var属性用来存放判断的结果,类型为true或false。
scopes属性用来指定var属性存放的范围。
<%
    //在session中设置值
    session.setAttribute("score",70);
%>

<c:if test="${score>60}">
    <span>恭喜!及格了</span>
</c:if>

<c:choose><c:when><c:otherwise>标签:这三个标签通常一起使用,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。类似于程序中if-else,其中<c:when>表示if,<c:otherwise>表else。

<%
    //在session中设置值
    session.setAttribute("score",50);
%>

<c:choose>
    <c:when test="${score>60}">
        <span>恭喜!及格了</span>
    </c:when>
    <c:otherwise>
        <span>不好意思!不及格</span>
    </c:otherwise>
</c:choose>

循环标签:

<c:forEach>标签:该标签根据循环条件遍历集合(Collection)中的元素。

 <c:forEach
      var=”name”
      items=”Collection”
      [varStatus=”StatusName”]
      [begin=”begin”]
      [end=”end”]
      [step=”step”]>
    ...
</c:forEach>
var设定变量名用于存储从集合中取出元素。
items指定要遍历的集合。
varStatus设定变量名,该变量用于存放集合中元素的信息。其中varStatus有4个状态:index:当前循环的索引值、count:环的次数、frist:否为第一个位置、last:否为最后一个位置。
begin、end用于指定遍历的起始位置和终止位置(可选),默认下标从0开始。
step指定循环的步长,默认值为1。
<c:forEach var="user" items="${list}" varStatus="yy">
    <tr>
        <td>${yy.index+1}</td>
        <td>${user.id}</td>
        <td>${user.userCode}</td>
        <td>${user.userName}</td>
        <td>${user.userPassword}</td>
        <td>
            <c:if test="${user.gender==1}">
                男
            </c:if>
            <c:if test="${user.gender==0}">
                女
            </c:if>
        </td>
    </tr>
</c:forEach>

<c:forTokens>标签:该标签用于浏览字符串,并根据指定的字符将字符串截取。

<c:forTokens items=”strigOfTokens”
             delims=”delimiters”
            [var=”name”]
            [begin=”begin”]
            [end=”end”]
            [step=”len”]
            [varStatus=”statusName”] >
		...
</c:forTokens>
items指定被迭代的字符串。
delims指定使用的分隔符。
var指定用来存放遍历到的成员。
begin指定遍历的开始位置(int型从取值0开始)。
end指定遍历结束的位置(int型,默认集合中最后一个元素)。
step遍历的步长(大于0的整型)。
varStatus存放遍历到的成员的状态信息。

国际标签库:

<fmt:formatDate/>标签:实现格式化的日期和时间显示

<fmt:formatDate  value="date"  pattern="yyyy-MM-dd HH:mm:ss"/>

使用JSTL构建URL:

<c:url/>超链接标签

<c:param/>参数标签

<c:import/>导入标签

<c:url  value="url" />
<c:param name="name"  value="value"/>
<c:import url="URL" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值