EL表达式

Expression Language 表达式语言,常用于取值
我们之前在JSP中写java代码必须写在<%%>里面。并且取值代码比较繁琐。
而EL表达式可以使我们的取值代码更加简洁

语法非常简单

${}

看个小例子:

我们在一个表单填写账号和密码提交后在成功页面显示出账号密码。

这里就直接贴成功页面的代码

<%--Created by IntelliJ IDEA.User: YZQDate: 2018/7/29Time: 20:16To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录成功</title>
</head>
<body><h1>登录成功</h1><h3>传统的取值方式</h3>
用户名:<%=request.getAttribute("account")%>
<br>
密码:<%=request.getAttribute("pwd")%><h3>EL表达式取值</h3><%--使用EL表达式取值--%>
用户名:${requestScope.account}
<br>
密码: ${pwd}
</body>
</html>

运行结果:

可以看到,使用EL表达式取值非常的简单,直接 ${account} 即可,我们的jsp页面主要就是用来显示数据的,那么,使用EL表达式则可以减少很多取值的代码。这些值是从哪取的呢,实际上就是从四大作用域中获取的。
servlet中的四个作用域分别为 pagerequestsessionapplication
我们可以指定在某个作用域中取数据。
例如

<%--从 page 作用域中查找account--%>
${pageScope.account}
<%--从 request 作用域中查找account--%>
${requestScope.account}
<%--从 session 作用域中查找account--%>
${sessionScope.account}
<%--从 application 作用域中查找account--%>
${applicationScope.account}

如果我们不指定作用域的话,直接 ${account}的话,默认会按照作用域的范围从小到大依次查找,找到第一个为止,都找不到的话则为空
作用域从小到大:page->request->session->application


JSTL

JSP标准标签库(JavaSeverPages Standard Tag Libary)
同样的也是为了简化我们的jsp代码,一般与EL表达式结合使用
EL表达式多用于取值操作,而JSTL则可以方便我们对集合进行遍历,对数据进行判断等操作。

首先,下载Standard Taglib

点击download

目前最新版本是1.2.5,将下面四个jar包下载后倒入到项目中即可。

然后我们在jsp页面添加如下指令后,即可使用jstl标签了

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

下图可知,JSTL有好几种标签,

<%--JSTL 核心标签--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--JSTL 格式化标签--%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--JSTL SQL标签--%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%--JSTL XMLb标签--%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%--JSTL 函数标签--%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

其中prefix表示前缀,前缀的值我们可以自己定义,但是不要使用关键字,会有冲突。为了保证可读性,一般都跟标签类型相对应

语法格式:前缀名:标签

平时最常使用的就是核心标签了,我们来看看核心标签中都有哪些常用标签

set标签:将值保存在指定的作用域中

<%-- var="变量名"  value="值" scope="保存在哪个作用域(page、request、session、application)"--%>
<c:set var="userName" value="yzq" scope="page"></c:set>
<span>${userName}</span><%--配合EL表达式取值--%>

out标签:将结果输出

<%--取值--%>
<c:out value="${userName}"></c:out>

remove标签:删除某个值

<%--删除userName的值--%>
<c:remove var="userName"></c:remove>

if标签:判断

在之前的jsp中我们如果要对数据进行判断后显示符合条件的数据,要这么写。

<%--JSP程序脚本--%><%/** 这里可以写变量声明,表达式,程序逻辑等* 是局部的,相当于Java中的普通方法* */String name = "yzq";int age = 23;if (age > 20) {%><span>奔三的人了</span>
<%} else {%><span>奔二的人了</span>
<%}
%>

看起来是不是很费劲,当然写起来更费劲。
而是用JSTL的if标签就很简单了
test接收判断条件的值

<c:if test="${age>20}"><span>奔三的人了</span></c:if>

choose:选择,跟java中的switch语句类似

作为when标签和otherwise标签的父标签

<c:set var="age" scope="page" value="40"></c:set>
<c:choose><%--符合该条件时执行--%><c:when test="${age>20&&age<30}"><span>奔三的人了</span></c:when><%--符合该条件时执行--%><c:when test="${age<20}"><span>还是小鲜肉</span></c:when><%--之前条件都不满足时,执行这个--%><c:otherwise><span>可以考虑养生了</span></c:otherwise>
</c:choose>

forEach标签:用于迭代集合

我们来一个servlet,用于创建一个集合数据,放到request中,User中就两个属性,name和age。

package servlet;import data.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@WebServlet(name = "JstlServlet",urlPatterns = "/jstl")
public class JstlServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<User> users = new ArrayList<>();for (int i = 0; i < 10; i++) {users.add(new User("yzq", i));}request.setAttribute("users", users);request.getRequestDispatcher("/jstl.jsp").forward(request, response);}
}

在jsp中迭代集合并显示数据,其中items表示集合数据,var表示迭代出的数据的变量名

<%--迭代标签 用于迭代集合--%>
<c:forEach items="${users}" var="user"><span>${user.name}</span>:<span>${user.age}</span><br></c:forEach>

执行结果

foreach标签还有一些其他的属性

begin  :从哪个下标开始迭代,默认值为0
end:迭代到第几个,默认值为集合的长度
step:迭代的步长
varStatus:迭代项的状态变量名,可以获取迭代项的相关状态

我们来看看用法

<%--迭代标签 用于迭代集合--%>
<c:forEach items="${users}" var="user" begin="2" end="6" step="2" varStatus="userStatus"><hr><span>${user.name}</span>:<span>${user.age}</span><br>计数:${userStatus.count} <br>步长:${userStatus.step} <br>开始位置: ${userStatus.begin} <br>结束位置:${userStatus.end} <br>下标:${userStatus.index} <br>是否是第一个:${userStatus.first} <br>是否是最后一个:${userStatus.last}<br></c:forEach>

执行结果:

EL表达式和JSTL常用的基本上就这些,比较简单.
还是那句话,jsp相关的技术简单了解知道怎么回事就行,不必花太多时间去学习。

下一篇,我们来实际的走一个网络请求的流程:

Java Web之Ajax


如果你觉得本文对你有帮助,麻烦动动手指顶一下,可以帮助到更多的开发者,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

Java Web之EL表达式和JSTL相关推荐

  1. JAVA Web基础6-EL表达式与JSTL标签库

    一.EL表达式语言 1.EL表达式全称expression language,用于在JSP页面获取其内置对象的内容 语法:${...} 在jsp中page指令有一个属性是isELIgnored, 用来 ...

  2. el表达式与jstl的用法

    课上顺便整理了下java中的El表达式和jstl的用法,下面以举例的方式来阐述各个标签的作用: 一. 使用el表达式将Map集合中的数据显示出来: 先给Map集合里面放一些数据库,通过EL表达式显示在 ...

  3. java el表达式 if else_jsp EL表达式和JSTL标签if-else if-else用法

    java web javaEE ,jsp EL表达式和JSTL标签if-else if-else四种用法 一.条件运算符 ${user.gender==?'男':'女'} 二.if() code.. ...

  4. 大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL

    JSP标签.EL表达式.JSTL (一)JSP标签技术 一.JSP标签技术概述 jsp本质上是一种动态web资源开发技术 , 看起来像是html , 但其中可以写java代码 , 非常方便用来开发动态 ...

  5. java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...

    昆明理工大学信息工程与自动化学院学生实验报告 ( 2013 -2014 学年第一学期) 课程名称:Java EE技术开课实验室:系机房444 2013 年 12月2 日年级.专业.班计科111 学号姓 ...

  6. Web.17.EL表达式JSTL标签的使用

    本节主要是上节课的加精 目录 本节主要是上节课的加精 一.购物车主页面java代码的分离 二.使用分页面板展示购物车所有商品的主页面 一.购物车主页面java代码的分离 注意: 当一个jsp文件同时存 ...

  7. EL表达式和JSTL标签:简化JSP的Java代码

    JSP页面接收.展示后端的数据,再JSP页面写很多的Java代码会造成书写麻烦.难以阅读.不利于团队协作的缺点,因此我们使用EL表达式和JSTL标签,代替并简化了JSP页面 EL表达式 语法:${st ...

  8. jsp java el_jsp之EL表达式

    EL表达式 1. 什么是EL表达式 jsp中的EL(express language)表达式技术:它仅仅是表达式. EL表达式的功能: 获取4个内置对象(域)中的数据,或自定义对象中的数据,或数组.集 ...

  9. java 代码执行el,专属于java的漏洞——EL表达式注入

    前言"FSRC经验分享"系列文章,旨在分享焦点科技信息安全部工作过程中的经验总结,包括但不限于漏洞分析.运营技巧.sdl推行.等保合规.自研工具等等. 欢迎各位安全从业者持续关注~ ...

  10. spring mvc学习(37):JavaEE-JSP基础-EL表达式和JSTL标签库(Taglibs)

    EL表达式和JSTL标签库: 在JSP页面代替java代码,便于编写 一.EL表达式 作用: ${} 简化脚本表达式 <%= %> j2ee1.4以前版本需指定<%@ page is ...

最新文章

  1. (完全解决)ValueError: Invalid RGBA argument: 0.2
  2. python自动化_Python自动化测试入门必读
  3. C++11 作用域内枚举
  4. 1.3tf的varible\labelencoder
  5. 网络操作系统 第七章 管理TCP/IP网络
  6. Fusionapp历史记录加收藏夹加清除缓存.fas源码
  7. mysql容器重启数据是否丢失_docker容器重启 数据会丢吗
  8. Android WebView 调起H5支付,提示商家参数格式有误
  9. mysql无法修改表字段
  10. ArcGIS动态表格扩展模块Mapping and Charting Solutions使用教程及下载地址
  11. 【unity】学习之路
  12. 用大白菜装centos7_大白菜安装centos7 踩坑记
  13. 【头歌实验】五、Python循环结构
  14. JavaWeb自学笔记02
  15. 揭秘可变剪切研究的本质
  16. android webview将网页内容导出为图片和PDF方法
  17. VMware虚拟机运行时报The CPU has been disabled by the guest operating system错误的解决方法
  18. 搭建最炫酷的 Windows Terminal 全新命令行更新以及美化指南 微软新版终端工具安装美化教程
  19. CSS3选择器-组合选择器
  20. oracle数据如何导入pg库,【oracle数据库如何导入到pg库中】-其它论坛-ZOL中关村在线...

热门文章

  1. android 隐藏桌面图标
  2. 南昌大学2021年811考研真题+答案详解
  3. KALI应用篇(一)压力测试
  4. 富士康计划将苹果生产线转移到越南,是什么原因呢?
  5. 一文带你详细了解光纤传感器
  6. WIN7的便签使用快捷键
  7. net.sf.json.JSONObject.fromObject()方法的一个小秘密
  8. SQL数据库置疑修复说明文档
  9. python支付_玩转京东支付(python)
  10. JAVA代码走查审查规范