文章目录

  • EL概念和作用
  • 语法
  • EL使用
    • 1. 运算
      • 1.1 算数运算符
      • 1.2 比较运算符
      • 1.3 逻辑运算符
      • 1.4 空运算符
      • 1.5 三目运算
    • 2. 获取值
      • 2.1 el表达式只能从域对象中获取值
      • 2.2 语法
        • 2.2.1 ${域名称.键名}:从指定域中获取指定键的值。
        • 2.2.2 ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
    • 3. 隐式对象
  • JSTL概念
  • JSTL下载与导入
  • JSTL核心库的常用标签

EL概念和作用

EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写,现在的作用基本就是从域中获取值。

语法

${表达式}
注意:jsp默认支持el表达式的。如果要忽略el表达式

 1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式2. \${表达式} :忽略当前这个el表达式

代码演示

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="true" language="java" %>
<html>
<head><title>EL</title>
</head>
<body>${requestScope}<br>\${pageContext}
</body>
</html>

页面效果

EL使用

1. 运算

1.1 算数运算符

+ - * /(div) %(mod)

代码演示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>el</title>
</head>
<body>${5+5}<br>${5-5}<br>${5*5}<br>${5/5} or ${5 div 5}<br>${5%6} or ${5 mod 6}<br>
</body>
</html>

访问el.jsp

1.2 比较运算符

> < >= <= == !=

代码演示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>el</title>
</head>
<body>${5<5}<br>${5>5}<br>${5<=5}<br>${5>=5}<br>${5==5}<br>${5!=5}<br>
</body>
</html>

访问el.jsp

1.3 逻辑运算符

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

代码演示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>el</title>
</head>
<body>${5<5 && 5>5} or ${5<5 and 5>5}<br>${5<5 || 5>5} or ${5<5 or 5>5}<br>${!(5<5)} or ${!(5<5 or 5>5)}
</body>
</html>

访问el.jsp页面

1.4 空运算符

empty:功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0${empty list}:判断字符串、集合、数组对象是否为null或者长度为0${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0

代码演示

<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>el</title>
</head>
<body><%ArrayList<String> arrayList = new ArrayList<String>();request.setAttribute("arrayList",arrayList);%>${empty arrayList}
</body>
</html>

访问el.jsp页面

1.5 三目运算

${user==null?true:false}

2. 获取值

2.1 el表达式只能从域对象中获取值

2.2 语法

2.2.1 ${域名称.键名}:从指定域中获取指定键的值。

域名称:1. pageScope      --> pageContext2. requestScope   --> request3. sessionScope   --> session4. applicationScope --> application(ServletContext)

代码演示

<%@ page import="com.ginger.pojo.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>el</title>
</head>
<body><%/*向域中存储数据*/pageContext.setAttribute("shangdan", "蛮王");request.setAttribute("zhongdan","劫" );session.setAttribute("daye","盲僧" );application.setAttribute("adc", "奥巴马");/*向域中存储对象*/User user = new User("user对象中取值");request.setAttribute("user",user);/*向域中存储List集合*/ArrayList<String> list=  new ArrayList<String>();list.add("list集合中取值");request.setAttribute("list", list);/*向域中存储map集合*/Map<String,String> hm = new HashMap<String, String>();hm.put("hm","map集合中取值");request.setAttribute("map",hm);%><%--从指定域中取字符串数据--%>${pageScope.shangdan}<br>${requestScope.zhongdan}<br>${sessionScope.daye}<br>${applicationScope.adc}<br><%--通过的是对象的属性来获取setter或getter方法,去掉set或get,在将剩余部分,首字母变为小写。setName --> Name --> name--%><%--取出对象属性值--%>${requestScope.user.name}<br><%--取出list集合中的值--%>${requestScope.list[0]}<br><%--取出map集合中的值--%>${requestScope.map.hm}</body>
</html>

访问el.jsp

2.2.2 ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

获取对象、List集合、Map集合的值

 1. 对象:${键名.属性名}本质上会去调用对象的getter方法2. List集合:${键名[索引]}3. Map集合:${键名.key名称}${键名["key名称"]}

代码演示

<%@ page import="com.ginger.pojo.User" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%//储存自定义对象User user = new User();user.setName("张三");user.setAge(23);user.setBirthday(new Date());request.setAttribute("user",user);//存储list集合对象List<Object> list = new ArrayList<Object>();list.add("aaa");list.add("bbb");list.add(user);request.setAttribute("list", list);//存储map集合对象Map map = new HashMap();map.put("sname", "李四");map.put("gender", "男");map.put("suser", user);request.setAttribute("map", map);%><%--获取自定义对象中的值--%>${user.name}<br>${user.age}<br>${user.formBirthday}<br><hr><%--获取list集合中的值--%>${list[0]}<br>${list[1]}<br>${list[2].name}<br>${list[2].age}<br>${list[2].formBirthday}<br><hr><%--获取map集合中的值--%>${map.sname}<br>${map.gender}<br>${map.suser.name}<br>${map.suser.age}<br>${map["suser"].formBirthday}
</body>
</html>

访问el.jsp页面

3. 隐式对象

el表达式中有11个隐式对象,这11个隐式对象是严重使用JSP的年代使用的,所有代码都在JSP上实现提供的隐式对象,现在是使用的JavaEE三成架构,隐式对象除了一两个基本不使用。

变量名 描述
pageScope,requestScope,sessionScope,applicationScope 获取JSP中域中的数据。
param,paramValues 接收参数。相当于request.getParameter()和rquest.getParameterValues()。
header,headerValues 获取请求头信息。相当于request.getHeader(name)。
initParam 获取全局初始化参数。相当于this.getServletContext().getInitParameter(name)。
cookie WEB开发中cookie。相当于request.getCookies()。
pageContext(重要) WEB开发中的pageContext。

pageContext

获取jsp其他八个内置对象${pageContext.request.contextPath}:动态获取虚拟目录。相当于<%=pageContext.getRequest().getContextPath%> 这句代码不能实现获得WEB应用的名称因为<%=pageContext.getRequest().getContextPath%>获取request对象和${pageContext.request.contextPath}获取requets对象不一样,需要转一下。

JSTL概念

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

标签库 标签库的URI 前缀
Core http://java.sun.com/jsp/jstl/core c
I18N http://java.sun.com/jsp/jstl/fmt fmt
SQL http://java.sun.com/jsp/jstl/sql sql
XML http://java.sun.com/jsp/jstl/xml x
Functions http://java.sun.com/jsp/jstl/functions fn

JSTL下载与导入

JSTL下载:
从Apache的网站下载JSTL的JAR包。进入

“http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”网址下载

JSTL的安装包。jakarta-taglibs-standard-1.1.2.zip,然后将下载好的JSTL安装包 进行解压,此时,在lib目录下可以看到两个JAR文件,分别为jstl.jar和standard.jar。 其中,jstl.jar文件包含JSTL规范中定义的接口和相关类,standard.jar文件包含用于 实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)

将两个jar包导入我们工程的lib中

使用jsp的taglib指令导入核心标签库

JSTL核心库的常用标签

1. if:相当于java代码的if语句1. 属性:test 必须属性,接受boolean表达式。如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容。一般情况下,test属性值会结合el表达式一起使用。2. 注意:c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签。2. choose:相当于java代码的switch语句1. 使用choose标签声明      相当于switch声明。2. 使用when标签做判断      相当于case。3. 使用otherwise标签做其他情况的声明    相当于default。3. foreach:相当于java代码的for语句

<c:if test=“true”></c:if>代码演示

<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head><title>jstl</title>
</head>
<body><c:if test="true">且随疾风前行身后亦需留心。</c:if><br><%ArrayList<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb");request.setAttribute("list",list);request.setAttribute("number",4 );%><c:if test="${!empty list}">遍历集合....</c:if><br><c:if test="${number % 2==0}">${number}是偶数</c:if><br><c:if test="${number % 2!=0}">${number}是偶数</c:if><br></body>
</html>

访问jstl.jsp

<c:choose></c:choose>代码演示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>jstl2</title>
</head>
<body><%request.setAttribute("number", 50);%><c:choose><c:when test="${number==1}">今天是星期一</c:when><c:when test="${number==2}">今天是星期二</c:when><c:when test="${number==3}">今天是星期三</c:when><c:when test="${number==4}">今天是星期四</c:when><c:when test="${number==5}">今天是星期五</c:when><c:when test="${number==6}">今天是星期六</c:when><c:when test="${number==7}">今天是星期七</c:when><c:otherwise>输入数据有误</c:otherwise></c:choose>
</body>
</html>

访问jstl2.jsp

<c:forEach></c:forEach>代码演示

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jstl3</title>
</head>
<body><%--foreach:相当于java代码的for语句1. 完成重复的操作for(int i = 0; i < 10; i ++){}属性:begin:开始值end:结束值var:临时变量step:步长 (变量一次加多少)varStatus:循环状态对象index:容器中元素的索引,从0开始count:循环次数,从1开始2. 遍历容器List<User> list;for(User user : list){}属性:items:容器对象var:容器中元素的临时变量varStatus:循环状态对象index:容器中元素的索引,从0开始count:循环次数,从1开始--%><c:forEach begin="1" end="10" var="i" step="2" varStatus="s">variable:${i} couont:${s.count} index:${s.index}<br></c:forEach><%ArrayList<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb");list.add("ccc");request.setAttribute("list", list);%><hr><c:forEach items="${list}" var="var" varStatus="s">couont:${s.count}index:${s.index}var:${var}<br></c:forEach>
</body>
</html>

访问jstl3.jsp

JavaEE12_EL和JSTL相关推荐

  1. JSTL标签库学习笔记

    JSTL概述 apache的东西,依赖于EL 使用jstl需要导入jstl.jar包 标签库 core 核心标签库 fmt 格式化标签库 sql 数据库标签库,过时 xml xml标签库,过时 JST ...

  2. js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...

    原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...

  3. JSP中是EL表达式与JSTL

    EL语法:${ } EL取值来自于作用域对象 1.如何从指定作用域取值(默认从最小作用域取值) pageScope.requestScope.sessionScope.applicationScope ...

  4. SpringMVC学习手册(三)------EL和JSTL(上)

    1.含义 EL:       Expression Language , 表达式语言 JSTL:   Java Server Pages Standard Tag Library, JSP标准标签库  ...

  5. java,js,jstl,EL的简单交互

    EL全名Expression Language.EL提供了在JSP脚本编制元素范围外使用运行时表达式的功能. 脚本编制元素是指页面中能够用于在JSP文件中嵌入java代码的元素. JSP标准标记库(j ...

  6. 关于ognl+struts-tag与el+jstl互相代替,以及el和jstl的学习笔记

    昨晚在晚上看了许多文章,众多大牛说OGNL性能不行云云,乍一看似乎惨不忍睹,如下图: 于是考虑是否能使用EL+JSTL代替实现前台的标签. 以最近测试用的简单留言板的查看文章页面为例,以下皆省略get ...

  7. 【jstl】jstl的基本操作

    1.jstl不属于javaEE标准,所以需要额外引入jar包 2.引入后需要引入标签库 代码实现: <%@ taglib prefix="c" uri="http: ...

  8. jstl c:choose、c:when和c:otherwise标签

    在用spring mvc中,页面前端老用jstl,记录一下. <c:choose>.<c:when>和<c:otherwise>在一起连用,可以实现Java语言中的 ...

  9. JSTL 读取数组 和 字符串连接

    2019独角兽企业重金招聘Python工程师标准>>> JSTL读取数组: 从后台取得一个字符串,如:AA-50-3,通过-划分成字符串数组.然后读取每个字符串. <c:set ...

最新文章

  1. android qq三方登录授权失败,QQ第三方登陆授权失败110401原因及解决办法分享
  2. 《深入理解Hadoop(原书第2版)》——1.3大数据的编程模型
  3. Java 洛谷 P1089 津津的储蓄计划讲解
  4. 【玩转cocos2d-x之三十一】弱联网与服务器的通讯
  5. java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
  6. 网易北京:全员核酸检测为阴性 园区环境检测为阴性
  7. OPPO Reno3系列旗舰官宣:骁龙765G+正反双曲面设计
  8. 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)
  9. 总结 | 六大路径规划算法
  10. “真正的机器人测试” - 淘宝泛终端机器人自动化测试实践
  11. Ubuntu18.04关闭内核自动更新
  12. Macbook双系统 10.11及Ubuntu
  13. UEFI开发与调试---edk2中的应用模块/库模块/驱动模块
  14. 图网络embeding transE及node2vec方法
  15. 季节前面为什么用in_季节前面用in还是on
  16. 五子棋胜负判定c 语言,【C语言】五子棋胜负判定算法及源代码
  17. 【JZOJ4597】现世斩
  18. 中国移动光猫的拨号和桥接模式的区别
  19. SCT2450,SCT2450Q,降压DCDC
  20. iOS dismissViewController到指定页面或dismiss多层

热门文章

  1. 唐代韩愈的《祭十二郎文》
  2. vue-element日期选择器(默认显示当前年月日,并且只能选择当前及当前之前的日期)
  3. 啤酒和尿不湿?购物篮分析、商品关联分析和关联规则算法都给你搞清楚(上—理论篇)
  4. 走航式海洋多参数剖面测量系统(MVP)验收记录
  5. Python编程基础 第四章 编程练习 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体;2)具有用于初始化半径和高的构造方法;(3)具有计算圆柱体体积
  6. c语言见习报告,专业见习报告(汉语言文学)
  7. 深圳基因组所刘永鑫组招聘博士后3名(3年100万+文章奖励+项目绩效)
  8. R安装学习及包的管理
  9. ILSpy反编译工具
  10. Windows10自带键盘突然失灵