07-EL表达式和JSTL标签库

1.EL表达式

定义

全称是Expression Language,表达式语言。

作用

主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出,因为EL表达式在输出数据的时候要比jsp表达式脚本更加简洁。

格式

${表达式}
  • EL表达式输出null值的时候,输出的是空串
  • jsp表达式脚本输出null值的时候,输出的是null字符串
<body>
    <%
        request.setAttribute("key", "value");
    %>
		jsp表达式脚本输出key的值是:
    <%=request.getAttribute("key")%><br/>
    EL表达式输出key的值是:${key}
</body>

EL表达式搜索域数据的顺序

当四个域中都有相同key的数据的时候,EL表达式会按照四个域从大到小的顺序去搜索,找到就输出。

<body>
   <%
    //向四个域中都保存相同的key的数据
    request.setAttribute("key", "request");
    session.setAttribute("key", "session");
    application.setAttribute("key", "application");
    pageContext.setAttribute("key", "pageContext");
   %>
    ${key}
</body>

EL表达式输出Bean的普通、数组、List集合、map集合属性

  1. 例:输出Person类中普通属性、数组属性、List集合属性、map集合属性
  • Person类:
public class Person {
    private String name;
    private String[] phone;
    private List<String> cities;
    private Map<String,Object> map;
    private int age = 18;

    public int getAge() {
        return age;
    }
}
  • jsp页面代码:
<body>
    <%
        Person person = new Person();
        person.setName("张三");
        person.setPhone(new String[]{"123456"});
        ArrayList<String> cities = new ArrayList<>();
        cities.add("北京");
        cities.add("上海");
        cities.add("深圳");
        person.setCities(cities);
        Map<String,Object> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        person.setMap(map);

        pageContext.setAttribute("person", person);
    %>

    输出Person:${person}<br/>
    输出Person的name属性:${person.name}<br/>
    输出Person的phone属性的第一个值:${person.phone[0]}<br/>
    输出Person的cities属性的第一个值:${person.cities[0]}<br/>
    输出Person的map属性的key1的值:${person.map.key1}<br/>
    输出Person的age属性:${person.age}<br/>

</body>

EL表达式的运算

EL表达式支持如下运算符:

1.关系运算

关系运算符说明示例
“== 或 eq”等于${1 == 1} 或 ${1 eq 1}
“!= 或 ne”不等于${1 != 1} 或 ${1 ne 1}
“< 或 lt”小于${1 < 2} 或 ${1 lt 2}
“> 或 gt”大于${2 > 1} 或 ${2 gt 1}
“<= 或 le”小于等于${1 <= 2} 或 ${1 le 2}
“>= 或 ge”大于等于${2 >= 1} 或 ${2 ge 1}

2.逻辑运算

逻辑运算符说明示例
“&& 或 and”与运算${1 == 1 && 1< 2} 或 ${1 == 1 and 1< 2}
“|| 或 or”或运算${1 == 1 || 1< 2} 或 ${1 == 1 or 1< 2}
“! 或 not”取反运算${!true} 或 ${not true}

3.算术运算

算术运算符说明示例
“+”加法${1 + 1}
“-”减法${1 - 1}
“*”乘法${1 * 1}
“/ 或 div”除法${1 /1} 或 ${1 div 1}
“% 或 mod”取模${14 % 10} 或 ${ 14 mod 10}

4.empty运算

  1. empty运算可以判断一个数据是否为空,如果为空,则输出true,不为空则输出false。

  2. 以下几种情况为空:

  • 值为null时,为空;
  • 值为空串时,为空;
  • 值是Object类型数组,长度为0时,为空;
  • list集合,元素个数为0时,为空;
  • map集合,元素集合为0时,为空。

例:

<body>

    <%
//    1、值为 null 值的时候,为空
        request.setAttribute("emptyNull", null);
//    2、值为空串的时候,为空
        request.setAttribute("emptyStr", "");
//    3、值是 Object 类型数组,长度为零的时候
        request.setAttribute("emptyObj", new Object[]{});
//    4、list 集合,元素个数为零
        List<String> list = new ArrayList<>();
        request.setAttribute("emptyList",list);
//    5、map 集合,元素个数为零
        Map<String,Object> map = new HashMap<String, Object>();
        request.setAttribute("emptyMap", map);
    %>

    ${empty emptyNull}<br>
    ${empty emptyStr}<br>
    ${empty emptyObj}<br>
    ${empty emptyList}<br>
    ${empty emptyMap}<br>

</body>

5.三元运算

  1. 表达式1 ? 表达式2 : 表达式3
  • 如果表达式1的值为真,则返回表达式2的值;
  • 如果表达式1的值为假,则返回表达式3的值。

例:

${1 != 1 ? "1为真","为假"}

6.“.”运算和[]中括号运算符

  1. 点运算可以输出Bean对象中某个属性的值。
  2. []中括号运算,可以输出有序集合中某个元素的值,并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值。

EL表达式的11个隐含对象

EL表达式中的11个隐含对象,是EL表达式本身已定义,可以直接使用。

变量类型作用
pageContextpageContextImpl可以获取jsp中的九大内置对象
pageScopeMap<String,Object>可以获取PageContext域中的数据
requestScopeMap<String,Object>可以获取Request域中的数据
sessionScopeMap<String,Object>可以获取session域中的数据
applicationScopeMap<String,Object>可以获取ServletContext域中的数据
paramMap<String,String>可以获取请求参数的值
paramValuesMap<String,String[]>可以获取多个请求参数的值
headerMap<String,String>可以获取请求头的信息
headerValuesMap<String,String[]>可以获取多个请求头的信息
cookieMap<String,Cookie>可以获取当前请求的Cookie信息
initParamMap<String,String>可以获取在web.xml中配置的context-param上下文参数

1.EL获取四个特定域中的属性

  1. pageScope————pageContext域
  2. requestScope————Request域
  3. sessionScope————Session域
  4. applicationScope————ServletContest域

例:

<body>
    <%
        pageContext.setAttribute("key1", "pageContext1");
        pageContext.setAttribute("key2", "pageContext2");
        request.setAttribute("key1", "request1");
        request.setAttribute("key2", "request2");
    %>
    ${pageScope.key1}<br>
    ${requestScope.key1}
</body>

2.pageContext对象的使用

  1. request.getScheme()————可以获取请求的协议
  2. request.getServerName()————可以获取请求的服务器ip或域名
  3. request.getServerPort()————可以获取请求的服务器端口号
  4. request.getContextPath()————可以获取当前工程路径
  5. request.getMethod()————可以获取请求的方式
  6. request.getRemoteHost()————可以获取客户端的ip地址
  7. session.getId()————可以获取会话的唯一标识

例:

<body>
    <%
        pageContext.setAttribute("req", request);
    %>
  
    1. 协议:${req.scheme}<br>
    2. 服务器ip:${req.serverName}<br>
    3. 服务器端口:${req.serverPort}<br>
    4. 获取工程路径:${req.contextPath}<br>
    5. 获取请求方法:${req.method}<br>
    6. 获取客户端 ip 地址:${req.remoteHost}<br>
    7. 获取会话的 id 编号:${req.session.id}<br>

</body>

3.EL表达式其他隐含对象的使用

变量类型作用
paramMap<String,String>可以获取请求参数的值
paramValuesMap<String,String[]>可以获取多个请求参数的值

例:

输出请求参数username的值:${param.username}

输出请求参数hobby的值:${paramValues.hobby[0]}
输出请求参数hobby的值:${paramValues.hobby[1]}
变量类型作用
headerMap<String,String>可以获取请求头的信息
headerValuesMap<String,String[]>可以获取多个请求头的信息

例:

输出请求头【User-Agent】的值:${header['User-Agent']}

输出请求头【Connection】的值:${header.Connection}

输出请求头【User-Agent】的值:${headerValues['User-Agent'][0]}
变量类型作用
cookieMap<String,Cookie>可以获取当前请求的Cookie的信息

例:

获取Cookie的名称:${cookie.JESSIONID.name}

获取Cookie的值:${cookie.JESSIONID.value}
变量类型作用
initParamMap<String,String>可以获取在web.xml中配置的context-param上下文参数

例:

  • web.xml中的配置:
<context-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
</context-param>

<context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql:///test</param-value>
</context-param>
  • 代码:
Context-param中username的值:${initParam.username}

Context-param中url的值:${initParam.url}

2.JSTL标签库

定义

  • JSTL标签库全称是指JSP Standard Tag Library,是一个不断完善的开放源代码的JSP标签库。

作用

  • 为了替代代码脚本,使jsp页面更加简洁。

组成

  1. JSTL标签库由五个不同功能的标签库组成。
功能范围前缀
核心标签库c
格式化fmt
函数fn
数据库sql
XMLx

使用步骤

  1. 先导入JSTL标签库的jar包
  2. 使用taglib指令引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

core核心库使用

1.< c:set/ >

  1. 作用:set标签可以往域中保存数据。
  2. 格式:
保存之前:${requestScope.abc}<br>
<c:set scope="request" var="abc" value="abcValue"/>
保存之后:${requestScope.abc}<br>
  1. 说明:
  • scope属性设置保存到哪个域,默认是保存到pageContext域
  • var属性设置key;
  • value属性设置值。

2.< c:if / >

  1. 作用:用来做if判断。
  2. 格式:
<c:if test="${12 == 12}">
		<h1>12等于12</h1>
</c:if>
  1. 说明:
  • test属性表示判断的条件,使用EL表达式输出。

3.< c:choose >< c:when >< c:otherwise >标签

  1. 作用:进行多路判断。
  2. 格式:
<%
        request.setAttribute("height", 148);
    %>

    <c:choose>
        <c:when test="${requestScope.height > 190}">
            <h2>巨人</h2>
        </c:when>

        <c:when test="${requestScope.height > 180}">
            <h2>小巨人</h2>
        </c:when>

        <c:when test="${requestScope.height > 170}">
            <h2>正常</h2>
        </c:when>

        <c:otherwise>
            <c:choose>
                <c:when test="${requestScope.height > 160}">
                    <h3>大于160</h3>
                </c:when>

                <c:when test="${requestScope.height > 150}">
                    <h3>大于150</h3>
                </c:when>

                <c:when test="${requestScope.height > 140}">
                    <h3>大于140</h3>
                </c:when>
                <c:otherwise>
                    <h3>小于140</h3>
                </c:otherwise>
            </c:choose>

        </c:otherwise>
    </c:choose>
  1. 说明:
  • choose标签开始选择判断;
  • when标签表示每一种判断情况;
  • test属性表示当前这种判断情况的值;
  • otherwise标签表示剩下的情况。
  1. 注意事项:
  • 标签里不能使用html注释,要使用jsp注释
  • when标签的父标签一定是choose标签

4.< c:forEach />

  1. 作用:遍历输出使用。
遍历1到10并输出
  1. 格式:
<c:forEach begin="1" end="10" var="i">
		${i}
</c:forEach>
  1. 说明:
  • begin属性设置开始的索引;
  • end属性设置结束的索引;
  • var属性表示循环的变量。
遍历Object数组
  1. 格式:
<%
		request.setAttribute("arr", new String[]{"123","456"});
%>
<c:forEach items="${requestScope.arr}" var="item">
     ${item}
</c:forEach>
  1. 说明:
  • items属性表示遍历的数据源(集合);
  • var属性表示循环的变量。
遍历Map集合
  1. 格式:
<%
		Map<String,Object> map = new HashMap<String, Object>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    map.put("key3", "value3");
    request.setAttribute("map", map);
%>
<c:forEach items="${requestScope.map}" var="entry">
      ${entry.key} = ${entry.value}<br>
</c:forEach>
  1. 说明:
  • items属性表示遍历的数据源;
  • var属性表示循环的变量。
遍历List集合
  1. 格式:
  • Student类:
public class Student {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String phone;
}
  • jsp代码:
<%
    List<Student> studentList = new ArrayList<Student>();
    for (int i = 1; i <= 10; i++) {
         studentList.add(new Student(i,"username" + i,"password" + i,18 + i,"phone" + i));
    }
    request.setAttribute("stus", studentList);
%>

<c:forEach begin="2" end="7" step="2" varStatus="status" items="${requestScope.stus}" var="stu">
    <tr>
        <td>${stu.id}</td>
        <td>${stu.username}</td>
        <td>${stu.password}</td>
        <td>${stu.age}</td>
        <td>${stu.phone}</td>
        <td>${status.step}</td>
</c:forEach>
  1. 说明:
  • items属性表示遍历的数据源;
  • var属性表示循环的变量;
  • begin属性表示遍历开始的索引值;
  • end属性表示遍历结束的索引值;
  • step属性表示遍历的步长值;
  • varStatus属性表示当前遍历到的数据的状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值