El 表达式学习

1、 什么是 EL 表达式
全称:Expression Language,一种写法非常简介的表达式。语法简单易懂,便于使用。表达式语言的灵感来自于 ECMAScript 和XPath 表达式语言
2、 EL 表达式的作用
作用:让 jsp 书写起来更加的方便。简化在 jsp 中获取作用域或者请求数据的写法。也会搭配 Jstl 来进行使用。
3、 使用 EL 表达式
语法结构:${expression},提供.和[ ]两种运算符来存取数据。
使用:
a) 使用 EL 表达式获取请求数据
i. 获取用户请求数据
ii. 获取请求头数据
iii. 获取 Cookie 数据
b) 使用 EL 表达式获取作用域数据
i. 获取作用域数据
ii. 作用域查找顺序
iii. 获取指定作用域中的数据
c) 使用 EL 表达式进行运算
i. 算术运算
ii. 关系运算
iii. 逻辑运算
d) EL 表达式空值判断 empty

el示例
ElServlet

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bjsxt.pojo.Address;
import com.bjsxt.pojo.User;
/*** 问题:*    在servlet进行请求处理后,使用作用域对象作为数据流转的载体。将数据流转给对应的jsp文件。*    那么怎么在jsp中获取作用域中的数据呢?* 使用:*    传统方式:在jsp页面中使用java脚本段语句。*/
public class ElServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//设置请求编码格式req.setCharacterEncoding("utf-8");//设置响应编码格式resp.setContentType("text/html;charset=utf-8");//获取请求信息String uname=req.getParameter("uname");String pwd=req.getParameter("pwd");//处理请求信息System.out.println(uname+":"+pwd);//响应处理结果//使用request作用域进行数据流转//普通字符串req.setAttribute("str","今天的天气很清爽,适合学习");//对象类型User u=new User(1, "柳岩","拍电影",new Address("河南","商丘", "虞城县"));req.setAttribute("user", u);//集合类型//List集合//存储普通字符List<String> list=new ArrayList<String>();list.add("张家辉");list.add("关晓彤");list.add("刘诗诗");//存储对象User u2=new User(2, "古力娜扎","拍电影",new Address("新疆","乌鲁木齐","乌鲁木齐"));List<User> list2=new ArrayList<User>();list2.add(u2);req.setAttribute("list",list);req.setAttribute("list2",list2);//Map集合//存储普通字符Map<String,String> map=new HashMap<String,String>();map.put("a", "北京");map.put("b", "上海");map.put("c", "商丘");req.setAttribute("map",map);//存储对象Map<String,User> map2=new HashMap<String,User>();map2.put("a1", new User(3, "迪丽热巴","拍电影",new Address("新疆","吐鲁番","吐鲁番")));req.setAttribute("map2",map2);//空值判断req.setAttribute("s","");req.setAttribute("s1",new User());req.setAttribute("s2",new ArrayList());req.setAttribute("s3",new HashMap());      //请求转发req.getRequestDispatcher("/el.jsp").forward(req, resp); return;}
}

elDemo.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!-- 使用传统方式获取作用域对象的数据 -->
<h3>EL表达式学习:使用传统方式获取作用域对象的数据</h3>
<%--
<b><%=request.getParameter("uname")%></b><br />
<b><%=request.getAttribute("str") %></b><br />
<b><%=((User)request.getAttribute("user")).getAddr().getTown() %></b><br />
<b><%=((ArrayList)request.getAttribute("list")).get(2)%></b><br />
<b><%=((User)(((ArrayList)request.getAttribute("list2")).get(0))).getAddr().getPre() %></b><br />
<b><%=((HashMap)request.getAttribute("map")).get("c") %></b><br />
<b><%=((User)(((HashMap)request.getAttribute("map2")).get("a1"))).getAddr().getCity() %></b><br />
--%>
<%--传统方式获取作用域数据:缺点一:导入包缺点二:需要强转缺点三:获取数据的代码过于麻烦。使用El表达式获取作用域数据:作用:获取作用域对象中的数据。注意:获取的是pageContext、request、session、application四个对象中的数据,其他数据一概不理会。找到了则获取返回,找不到则什么都不做,也不报错。语法:${表达式}表达式:获取请求数据request对象存储了请求数据--->param.键名        返回值request对象存储了请求数据--->paramvalues.键名    返回的是数组通过setAttribute方法存储到作用域对象中的数据${键名} 返回键名所对应的值。注意:如果存储的是普通字符串则直接返回如果存储的是对象,则返回的是对象获取对象中的数据:普通对象${键名.属性名.属性名....}集合对象list集合--->${键名[角标]}map集合--->${键名.map集合存储的键名}作用域查找顺序:默认查找顺序:pageConext-->request--->session--->application注意:每次查找都是从小到大进行查找,找到了则获取,不再继续找了。指定查找:${pageScope.键名}---${requestScope.键名}--${sessionScope.键名}--${applicationScope.键名}El表达式的逻辑运算:${逻辑表达式}:&& || !${算术表达式}:+,-,*,/${关系表达式}:>,<,>=,==,!=,%特殊:三目运算注意:+表示加法运算,不表示字符链接。使用EL表达式进行字符链接会报错。EL的空值判断:${empty 键名}作用:判断键名对象的值是否存有数据。EL获取请求头数据和Cookie数据:请求头数据:${header}-->返回所有的请求头数据${header["键名"]}--->返回指定的键名的请求头数据${hedaerValues["键名"]}--->返回指定的键名(同键不同值)的值的数组。获取Cookie数据:${cookie}--->返回存储了所有的cookie对象的map集合${cookie.键名}---->返回指定的cookie对象${cookie.键名.name}--->返回指定的cookie对象存储的数据的键名。${cookie.键名.value}--->返回指定的cookie对象存储的数据的值。
--%>
<%String str2="哈哈哈";
%>
<!-- 使用EL表达式获取作用域对象数据 -->
<h3>EL表达式学习:使用EL表达式获取作用域对象的数据</h3>
<b>${param.uname}</b><br />
<b>${paramValues.fav[0]}</b><br />
<b>${str}</b><br />
<b>${user}</b><br />
<b>${list[2]}</b><br />
<b>${list2[0].addr.pre}</b><br />
<b>${map.c}</b><br />
<b>${map2.a1.addr.city}</b><br />
<b>-${str2}</b>
<hr />
<h3>EL的作用域查找顺序</h3>
<%pageContext.setAttribute("hello","hello pageContext");request.setAttribute("hello","hello request");session.setAttribute("hello","hello session");application.setAttribute("hello","hello application");
%>${pageScope.hello}---${requestScope.hello}--${sessionScope.hello}--${applicationScope.hello}
<h3>EL表达式的逻辑运算</h3>
${1+2}--${1*2}--${4/2}--${4-2}--${4%3}--${4==4}--na==na:${na==na }--${4>2}--${sex==1?'男':'女'}--${1+'2'}
<h3>EL表达式的空值判断</h3>
${empty s}--${empty s1}--${empty s2}---${empty s3}
<h3>EL获取请求头数据和Cookie数据</h3>${header}--${headerValues["accept-language"][0]} <br /><br /><br />${cookie}--${cookie.JSESSIONID}---${cookie.JSESSIONID.name}--${cookie.JSESSIONID.value}

JSTL 标签库

1、 什么是 JSTL 标签库
JSTL 是 apache 对 EL 表达式的扩展(也就是说 JSTL 依赖 EL),JSTL 是标签语言!JSTL 标签使用以来非常方便,它与 JSP 动作标签一样,只不过它不是 JSP 内置的标签,需要我们自己导包,以及指定标签库而已!如果你使用 MyEclipse 开发 JavaWeb,那么在把项目发布到 Tomcat 时,你会发现,MyEclipse 会在 lib 目录下存放 jstl 的Jar 包!如果你没有使用 MyEclipse 开发那么需要自己来导入这个JSTL 的 Jar 包:jstl-1.2.jar。
2、 JSTL 标签库的作用
用来提升在 JSP 页面的逻辑代码的编码效率,使用标签来
替换逻辑代码的直接书写,高效,美观,整洁,易读。
3、 使用 JSTL 标签库
a) 内容:
i. 核心标签库(学习)
ii. 格式化标签库(了解)
iii. 函数标签库(了解)
iv. XML 标签库(了解)
v. SQL 标签库(了解)
b) 使用:
i. 导包
ii. 使用 taglib 标签引入资源
iii. 核心标签库
iv. 格式化标签库
学习网址:http://www.runoob.com/jsp/jsp-jstl.html

jstlDemo.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--JSTL学习:作用:提高在jsp中的逻辑代码的编写效率,使用标签。使用:JSTL的核心标签库(重点)JSTL的格式化标签库(讲解)JSTL的SQL标签库(了解)JSTL的函数标签库(了解)JSTL的XML标签库(了解)JSTL的核心 标签库:1、导入jar包2、声明jstl标签库的引入(核心标签库)<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>3、内容:基本标签:<c:out value="数据" default="默认值"></c:out>数据可以为常量值也可以是EL表达式。作用:将数据输出给客户端。<c:set var="hello" value="hello pageContext" scope="page"></c:set>作用:存储数据到作用域对象中var:表示存储的键名value:表示存储的数据scope:表示要存储的作用域对象 page request session application<c:remove var="hello" scope="page"/>作用:删除作用域中的指定键的数据。var:表示要删除的键的名字scope:表示要删除的作用域(可选)注意:如果在不指定作用域的情况使用该标签删除数据,会将四个作用域对象中的符合要求的数据全部删除。逻辑标签:<c:if test="${表达式}">前端代码</c:if>作用:进行逻辑判断,相当于java代码的单分支判断。注意:逻辑判断标签需要依赖于EL的逻辑运算,也就是表达式中涉及到的数据必须从作用域中获取。<c:choose><c:when test="">执行内容</c:when><c:when test="">执行内容</c:when>...<c:otherwise>执行内容</c:otherwise></c:choose>作用:用来进行多条件的逻辑判断,类似java中的多分支语句注意:条件成立只会执行一次,都不成立则执行otherwise    循环标签:<c:forEach begin="1" end="4" step="2">循环体</c:forEach>作用:循环内容进行处理使用:begin:声明循环开始位置end:声明循环结束位置step:设置步长varStatus:声明变量记录每次循环的数据(角标,次数,是否是第一次循环,是否是最后一次循环)注意:数据存储在作用域中,需要使用EL表达式获取。例如:${vs.index}--${vs.count}--${vs.first}--${vs.last} items:声明要遍历的对象。结合EL表达式获取对象var:声明变量记录每次循环的结果。存储在作用域中,需要使用EL表达式获取。
--%>
<%request.setAttribute("str2","今天天气真好,适合学习");//request.setAttribute("hello","hello request");
%>
<!--基本标签学习  -->
<h3>基本标签学习</h3>
<c:out value="哈哈"></c:out>---哈哈--${str2}<br />
<c:out value="${str2}" default="嘿嘿"></c:out><br />
<c:set var="hello" value="hello pageContext" scope="page"></c:set><br />
<c:set var="hello" value="hello request" scope="request"></c:set><br />
<c:set var="hello" value="hello session" scope="session"></c:set><br />
<c:set var="hello" value="hello application" scope="application"></c:set><br />
<%-- <c:out value="${applicationScope.hello}"></c:out> --%>
<c:remove var="hello" scope="page"/><br />
<c:out value="${hello}"></c:out>
<hr />
<h3>逻辑标签学习</h3>
<!--传统方式:  -->
<%int  a=4;if(a>3){%>
<b>今天的天气有点热哦</b>
<%} %>
<!--jstl方式: -->
<c:set var="a" value="4"></c:set>
<c:if test="${a>3}"><b>今天的天气有点热哦</b>
</c:if>
<br />
<c:set var="score" value="68"></c:set>
<c:choose><c:when test="${score>=90}"><i>奖励吃鸡装配一套</i></c:when><c:when test="${score<90&&score>=80}"><i>奖励空投箱</i></c:when><c:when test="${score<80&&score>=70}"><i>无奖励无惩罚</i></c:when><c:otherwise><i>男女混合双打</i></c:otherwise>
</c:choose>
<hr />
<h3>JSTL的循环标签</h3>
<!--传统方式的表格  -->
<table border="1px"><tr><td>课程名称</td><td>教师</td><td>价格</td><td>重要性</td></tr><%for(int i=0;i<3;i++){if(i==2){%><tr><td>java</td><td>张老师</td><td>不要钱</td><td>非常重要</td></tr><%}} %>
</table>
<%ArrayList<String> list=new ArrayList<String>();list.add("a");list.add("b");list.add("c");list.add("d");request.setAttribute("list",list);HashMap<String,String> map=new HashMap<String,String>();map.put("a1", "哈哈哈");map.put("b1", "嘿嘿");request.setAttribute("map",map);%>
<!-- 使用JSTL方式完成循环 -->
<!--常量循环  -->
<c:forEach begin="0" end="4" step="1" varStatus="vs">1111---${vs.index}--${vs.count}--${vs.first}--${vs.last}<br />
</c:forEach>
<!--动态循环  -->
<c:forEach items="${list}" var="str">${str}<br />
</c:forEach>var data=[];
<c:forEach items="${list}" var="s" varStatus="vs">data[${vs.index}]=s;</c:forEach><c:set var="data" value=data></c:set>
<!--创建表格数据  -->
<table border="1px"><tr><td>课程名称</td><td>教师</td><td>价格</td><td>重要性</td></tr><c:forEach items="${list}" var="s" varStatus="vs"><tr><td> data[${vs.index}]</td><td>${s}</td><td>data[${vs.index}]</td><td>${vs.index} ${s}</td></tr></c:forEach>
</table>
<!--遍历map集合  -->
<c:forEach items="${map}" var="m">${m.key}--${m.value} <br />
</c:forEach>

El 表达式、jstl学习相关推荐

  1. 五、Web服务器——MVC开发模式 EL表达式 JSTL 学习笔记

    今日内容 1. JSP:1. 指令2. 注释3. 内置对象2. MVC开发模式 3. EL表达式 4. JSTL标签 5. 三层架构 JSP: 1. 指令* 作用:用于配置JSP页面,导入资源文件* ...

  2. EL 表达式 JSTL 标签库

    EL 表达式 & JSTL 标签库 1.什么是EL表达式?EL表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达式的什么作用:EL 表达式 ...

  3. javaweb(09) EL表达式JSTL标签库(jsp相关,了解)

    javaweb(09) EL表达式&JSTL标签库(jsp相关,了解) EL表达式 简介和基本使用 EL 表达式的全称是:Expression Language.是表达式语言. EL 表达式的 ...

  4. EL表达式+JSTL,forEach的两种用法

    <%@ page language="java" isELIgnored="false"contentType="text/html; char ...

  5. El表达式+jstl标签

    目录 前言 EL获取数据(从四大域中获取属性) 1.如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值 2.EL中的内置对象 1.域属性相关(4个) 2.其 ...

  6. JSP(EL表达式+JSTL)

    目录 文章目录 前言 一.什么是JSP 二.JSP语法 (一).jsp模板元素 (二).jsp脚本表达式 (三).jsp脚本片段(小脚本) (四).jsp声明(成员变量) (五).jsp注释 (六). ...

  7. EL表达式 JSTL(详解)

    相关JSTL.EL博客收集如下: JSTL 标签大全详解:http://blog.csdn.net/qq_25827845/article/details/53311722 EL表达式详解:http: ...

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

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

  9. JavaWeb12(域对象EL表达式JSTL)

    一.内置对象之域对象: pageContext:作用域仅限于当前jsp页面 request:作用域仅限于当前请求(仅转发有效) session:作用域仅限于当前会话(浏览器的打开和关闭称之为依次会话) ...

  10. EL表达式 JSTL标签库

    EL表达式 什么是EL表达式? 作用? 全称是Expression Langue 是表达式语言 EL表达式的作用主要是替代jsp页面中的表达式脚本在jsp页面中方进行输出,因为EL表达式在输出数据的时 ...

最新文章

  1. 老版本的Spring应用该如何应对这次的RCE漏洞?
  2. UA MATH571A QE练习 R语言 多重共线性与岭回归
  3. 回溯算法的题目,这样做,秒杀!!
  4. python tushare获取股票数据并可视化_荐Python获取股票数据及其可视化--基于tushare库...
  5. 超详细的Git提交规范引入指南
  6. AHCI 与 IDE
  7. 常用的Sql命令之造数据
  8. java 网络编程
  9. ORCAD原理图检查
  10. 本地机房连接阿里云专有网络VPC构建混合云解决方案
  11. 台式计算机上的硬磁盘,如何在台式计算机上安装机械硬盘驱动器?在台式计算机上安装机械硬盘驱动器的详细步骤...
  12. OSChina 周三乱弹 —— 余生指教NMB
  13. 一个男人的品味在于选择妻子
  14. easyrecovery2023免费绿色版电脑数据恢复软件
  15. 苹果浏览器(Safari浏览器)打开网页“不安全”警告的解决方案
  16. 全球及中国护肤品行业产量规模走势与销售前景研究报告2022版
  17. 电商页面设计 只需懂六个字
  18. freerdp 解压安装_linux下使用FreeRDP 连接 Windows 远程桌面
  19. 第三十六章 数词、日期和度量衡
  20. Tomcat启动中文乱码问题

热门文章

  1. Oracle 11g常用管理命令(用户、表空间、权限)
  2. LIDAR in Google Earth
  3. java abstract类和abstract方法
  4. C语言学习笔记(2)
  5. 如何pspice模型转成saber模型
  6. javascript window.open
  7. 【JS】教你如何在对象内任意位置插入任意属性
  8. JavaScript 浏览器对象BOM
  9. css3 中background的新增加的属性的用法(一)
  10. JS面试题-闭包异步-变量提升-引用传值-this