EL和JSTL

EL(表达式语言)

  表达式语言(Expression Language,EL)是JSP2.0中新增的功能。使用表达式语言,可以方便地访问标志位(page,request,session和application标志位)中的属性内容,可以避免出现许多的Scriptlet代码。语法如下:  

${属性名称}

 

  注:Scriptlet:在JSP中,Scriptlet被称为脚本小程序,所有嵌入在HTML代码中的Java程序都必须使用Scriptlet标记起来。一共有三种:

     第一种:<% %>    第二种:<%!%>   第三种:<%= %>

 

  EL表达式可以方便得访问对象中的属性、提交的参数或者是进行各种数学运算,EL表达式最大的特点是如果输出内容为null,则会自动使用空字符串(“”)表示。EL表达式语言可以输出4种范围中的内容,如在不同的属性范围中设置了同一个属性名称,则将按照如下顺序查找:

    page --> request --> session --> application

<%
  pageContext.setAttribute(“info”,”page范围属性”);
  request.setAttribute(“info”,” request范围属性”);
  session.setAttribute(“info”,” session范围属性”);
  application.setAttribute(“info”,” application范围属性”);
%>
${info}

 

   以上代码的运行结果是:page范围属性。

 

  当然要指定一个要取出属性的范围,可以添加标记

属性范围

范例

说明

page

${pageScpe.属性}

取出page范围的属性内容

request

${requestScpe.属性}

取出request范围的属性内容

session

${sessionScpe.属性}

取出session范围的属性内容

application

${applicationScpe.属性}

取出application范围的属性内容

 

接受请求参数

  使用表达式语言可以显示接收的请求参数,功能和request.getParameter()类似,语法如下:

    接收一个参数    ${param.参数名}

    接收一组参数    ${paramValues.参数名称}

  接收到一组参数,如果想要取出,需要分别指定下标。

  对集合的操作(Collection、Map集合中的内容)将集合保存在request范围中,使用EL表达式输出时,直接通过集合的下标即可访问。

<%
    List list = new Arraylist();
    list.add(“a”);
    list.add(“b”);
    list.add(“c”);
    request.setAttribute(“list”,list);
%>
第一个元素:${list[0]}
第二个元素:${list[1]}
第三个元素:${list[2]}

 

  以上代码的运行结果是:  

    第一个元素:a

    第二个元素:b

    第三个元素:c

 

运算符

算术运算符

描述

范例

结果

+

加法

${4+6}

10

-

减法

${4-6}

-2

*

乘法

${4*6}

24

/或div

除法

${4/6} 或 ${4 div 6}

0.666

%或mod

取模(余数)

${4%6} 或 ${4 mod 6}

4

 

特别注意

    “+”在EL中只代表加法,不表示连接;

${a+”20”}    //20
${a+”20a”} //异常
${10/0}  //Infinity
${“abc” < “b”} //true 比较的是位置的字符Unicode码
${empty ulist} //返回的是boolean,即ulist是否为空。

 

 

 JSTL(JSP标准标签库)

  JSP标准标签库

    使用标签库可以避免过多的Scriptlet代码,但是采用自定义的标签库的做法,非常繁琐且不通用,所以可以借助一些开源工具使用一些公共的标签来完成代码的开发。JSTL(JSP Standard Tag Library,JSP标准标签库)是一个开放源代码的标签组件。核心标签库是JSTL中最重要的部分,也是在开发中最常用的部分,在核心标签库中主要完成的就是流程控制、迭代输出等操作。

  核心标签库中的主要标签

 

功能分类

标签名称

描述

基本标签

<c:out>

输出属性内容

<c:set>

设置属性内容

<c:remove>

删除指定属性

<c:catch>

异常处理

流程控制

<c:if>

条件判断

<c:choose>

多条件判断,可设置<c:when>和<c:otherwise>标签

迭代标签

<c:forEach>

输出数组,集合

<c:forTokens>

字符串拆分及输出操作

包含标签

<c:import>

将指定的路径包含到当前页

生成URL标签

<c:url>

根据路径和参数生成一个新URL

客户端跳转

<c:redirect>

客户端跳转

 

  使用核心标签库之前,必须在JSP页面中引入标签库配置文件。

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

 

<c:if>标签

  语法:

<c:if test=”判断条件” var=”存储判断结果”>
</c:if>

 

  例子

<c:if test=”${username != null}”>
        欢迎,${username}
</c:if>

 

 

<c:choose>标签

   <c:if>的功能只是针对一个条件的判断,如果要判断多个条件,可以使用<c:choose>标签,<c:choose>只能作为<c:when>和<c:otherwise>的父标签出现,不能单独使用。

  例子:

<% 
  request.setAttribute(“num”,12);
%>
<c:choose> <c:when test=”${num == 10}”> num属性的值为10 </c:when>   <c:when test=”${num == 20}”> num属性的值为20 </c:when> <c:otherwise> 没有一个条件满足 </c:otherwise> </c:choose>

 

 以上代码输出结果为:没有一个条件满足

   <c:otherwise>标签是当所有的<c:when>都不满足时执行的,所以编写时一定要放在所有<c:when>标签的最后。

 

<c:forEach>标签

  <c:forEach>标签的主要功能为循环控制,可以将集合中的成员进行迭代输出,功能与Iterator接口类似。

<c:forEach [var=”每一个对象的属性名称”] items=集合” [varStatus=”存放当前对象的成员信息”] [begin=”集合的开始输出位置”] [end=”集合的结束输出位置”] [step=”每次增长的步长]>
  标签体
</c:forEach>

   varStatus属性可以用来当做集合的编号具体编写如下:

<%
    String info[] = {"a", "b", "c"};
    request.setAttribute("info",info);
%><c:forEach var ="s" items="${info}" varStatus="vs">
    ${vs.count} --> ${s}、
</c:forEach>

  以上代码的输出结果是:

  1 --> a、2 --> b、3 --> c 

  例子:

<%
    String info[] = {“a”, “b”, “c”, “d”, “e”, “f”, “g”};
    request.setAttribute(“info”,info);
%>    
例一:
<c:forEach var =”s” items=”${info}” >
    ${s}、
</c:forEach>
例二:
<c:forEach var =”s” items=”${info}” step=”2”>
    ${s}、
</c:forEach>
例三:
<c:forEach var =”s” items=”${info}” begin=”1” end=”2”>
    ${s}、
</c:forEach>

 

以上代码输出结果为:

  例一:a、b、c、d、e、f、h、

       例二:a、c、e、h、

       例三:b、c、

 

  使用<c:forEach>输出时,不仅可以输出List,也可以输出Set,即只要是Collection接口的子接口或类都可以输出。<c:forEach>也可以输出Map集合,但是Map集合中的元素都是按照键值对来存储的,要想得到key和value,则需要通过元素提供的getKey()和getValue()方法。

  例子:

<%
    Map m = new HaspMap();
    m.put(“1”,”first”);
    m.put(“2”,”second”);
    request.setAttribute(“m”,m);
%>    
<c:forEach var =”s” items=”${m}” >
    ${m.key} --> ${m.value}
</c:forEach>

 

以上代码输出结果为:

  1 --> first

  2 --> second

 

原文地址:https://www.cnblogs.com/ghq120/p/8168852.html