EL&JSTL

学习内容:

  1. 目录

    学习内容:

    EL 介绍

    传统的JSP代码缺点

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

    EL表达式概述和EL基础语法

    EL表达式的运算符(四个)

    JSTL 介绍

    JSTL 核心标签库

    1.EL 介绍

    2.传统的JSP代码缺点

    3.ELEL 的表达式搜索域数据的顺序

    4.EL表达式概述和EL基础语法

    5.EL表达式的运算符(四个)

    6.JSTL 核心标签库

    6.1.添加依赖

    6.2.添加指令

    7.JSTL 介绍

    需要注意的是:

    8.在JSTL中包括两种常用标签库内容:



1.EL 介绍

  • EL表达式全称:Expression Language,即表达式语言
  • EL表达式作用:代替JSP页面中表达式脚本进行数据的输出(只能获取数据,不能设置数据)
  • EL表达式的格式是:${表达式} ,注:EL表达式写在jsp页面中,表达式一般是域对象的key

2.传统的JSP代码缺点

1.可读性差,

2.编鞋代码复杂,

下面的是使用JS的使用小脚本和表达式去编写,我们使用EL表达式就会很简单的写出

这样代码就不会冗余

<table>
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>称号</th>
        <th>头像</th>
    </tr>
    <%
        Object obj = request.getAttribute("list");
        List<UserInfo> list = (List<UserInfo>) obj;
        for (UserInfo u : list) {
    %>
    <tr>
        <td><%=u.getId()%></td>
        <td><%=u.getName()%></td>
        <td><%=u.getTitle()%></td>
        <td><img src="<%=u.getImg()%>" alt=""></td>
    </tr>
    <% } %>
</table>

3.ELEL 的表达式搜索域数据的顺序

  • EL表达式主要是输出域对象中的数据,当四个域对象都有同一个key的值时,EL表达式会按照四个域对象的范围从小到大进行搜索,(page<request<session<application)找到就输出,与四个域对象声明的先后顺序无关

4.EL表达式概述和EL基础语法

news:${news}<br>

news:${news.name} <br>

str:${str.length()}<br>

list:${list}<br>

${list[0]} <br>

${list[1]} <br>

map:${map} <br>

map:${map.username}

4.1控制层的语句(Servlet):

package com.csi.news.controller.EL;

import com.csi.news.domain.News;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ELController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        News news = new News() ;

        news.setId(001);
        news.setName("国际");
        news.setIllustrate("国际新闻");

        req.setAttribute("news",news);

        req.setAttribute("str","今天是周二");

        List<String> list = new ArrayList<>() ;
        list.add("hello");
        list.add("word");

        HttpSession session = req.getSession();
        session.setAttribute("list",list);

        Map<String,String> map = new HashMap<>() ;
        map.put("username","郑圣勇");
        map.put("age","18") ;

        session.setAttribute("map",map);

        req.getRequestDispatcher("/el.jsp").forward(req,resp);



    }
}

5.EL表达式的运算符(四个)

  • 算术运算符
  • 逻辑与算符
  • 关系运算符
  • empty运算符

算术运算符

 +   -     *     /==div       %==mod

 逻辑运算符

&(and)  | (or )    !(not)

关系运算符

==(eq) >(gt)   >=(ge)   <(lt)  <=(le)  !=(ne)

empyt运算符

empty: 代表判断元素是否为 null或者是是否包含元素           not empty: 代表代表判断元素是否不为 null或者是是否不包含元素

作用域的访问对象

正常情况下,在使用 EL 表达式时,需要在表达式中添加对应的作用域,例如 ${sessionScope.xxx} ,如果我没有书写作用域访 问对象,此时, EL 表达式就会从 page requet 中查询,如果 request 没有对应的值就会找到 session 查询, session 如果范围内也没有,就会 最后找到 application ,如果几个作用域都不包含 要查找的值或对象,就会返回 null 状态。此时如 果我们调用某个对象的某个属性或方法,此时 EL 表达式如果没有找到对象就会直接输出空白。
参数访问对象
param 相当于是在页面中调用了request.getParameter("") 来获取参数中的内 容。
paramValues 相当于在页面中调用了request.getParameterValues("") 来获取同名对 象的多个值,返回一个数组类型
JSP隐式对象
可以通过 pageContext 对象获取到该对象中的某个值,同时还可以获取到页面中衍生出的各类内 置对象,例如可以通过 pageContext.request.contextPath 获取到当前
项目的上下文路径。

6.JSTL 核心标签库

6.1.添加依赖

<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>jstl</artifactId> 
<version>1.2</version> 
</dependency>

6.2.添加指令

格式化库 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/f mt" %>
 核心库 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/c ore" %>

3.使用标签库

  <c:set var = " 变量名 " value = " " scope = "request|session|application" />
  <c:set var = "num" value = "100" />
  将一个对象中的属性进行修改
  target: 代表要修改的对象
  property: 要修改的对象中的属性
  value: 要修改的属性值
  <c:set target = "${userInfo}" property = "username" value = "zhangsan" />
<%--
value: 代表要输出的内容,如果直接 写了内容,就会按照普通输出的方式显示在 页面上
default ;如果没有找到对应的变量, 就会采用 default 作为值输出
--%>

4.输出内容:<c:out value="${num}" />

5. 删除属性 :<c:remove var="变量" />

6.条件标签:

if 表达式是没有 else 的相关操作的,如果需要多层判断,则需要多谢一些 if 的语法
  <c:if test = " 条件表达式 " >
  </c:if>
<c:if test = "${empty userInfo}" >  / /对象为空的时候
  您还没有登录!
  </c:if>
  <c:if test = "${not empty userInfo}" >   //对象不为空的时候
  您好, ${userInfo.username}
  </c:if>
  <choose>
  <c:when test = " 条件表达式 " >
  // 满足条件
  </c:when>
  ...
  <c:otherwise>
  // 多个条件都不满足,就会执行该段
语句
  </c:otherwise>
  </choose>
<c:choose>
<c:when test = "${empty userInfo}" >
  您还没有登录!
  </c:when>
  <c:otherwise>
  您好,
${userInfo.username}
  </c:otherwise>
  </c:choose>
8.循环控制:
<c:forEach var = " 循环时的变量 " items = " 集合 | 数组 " begin = " 起始值 end = " 结束值 " step = " 迭代步长 varStatus = " 循环属性变量 " >
// 循环体
</c:forEach>
// 遍历集合
<c:forEach var = "str"  items = "${strings}" >
${str}
  </c:forEach>
// 按普通的值遍历
<c:forEach var = "i" begin = "0" end = "10" step = "1" >
<a href = "#" > ${i} </a>
</c:forEach>
// 遍历 map 集合
<c:forEach var = "m" items = "${map}" >
${m.key} --- ${m.value}
</c:forEach>
// 获取 varStatus 中的变量内容
  <c:forEach var = "str"
items = "${strings}"
varStatus = "status" >
<% -- $ { status . index + 1 } $ { str } - - %>
${status.last}
</c:forEach>

7.JSTL 介绍

  • JSTL(Java Server Page Standard Tag Library),标准标签库。是为了能够提高JAVA WEB开发的效率以及维 护性。
  • 它主要提供给JavaWeb开发人员一个标准通用的标签,开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

    需要注意的是:

  • jstl中需要获取值的地方一般都要配合EL表达式去使用。
  • jstl在jsp中使用的,如果项目中没有jsp就不能用。

8.JSTL中包括两种常用标签库内容:

  • 核心标签:核心标签库是整个 JSTL 中最常用的部分,主要由以下几部分组成:基本输入输出、流 程控制、迭代操作和 URL 操作。负责 Web 应用的 常见工作,如:循环、表达式赋值、基本输入输 出等
  • I18N 格式标签库:用来格式化显示数据的工作 ----如:对不同区域的日期格式化等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值