一、EL表达式

什么是 EL 表达式
全称:Expression Language,一种写法非常简介的表达式。语法 简单易懂,便于使用。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言。
EL 表达式的作用
让 jsp 书写起来更加的方便。简化在 jsp 中获取作用域或者请求数据的写法。也会搭配 Jstl 来进行使用。
EL 表达式 语法结构
${expression},提供.和[ ]两种运算符来存取数据。
如何使用:
a) 使用 EL 表达式获取请求数据

  1. 获取用户请求数据
  2. 获取请求头数据
  3. 获取 Cookie 数据

b) 使用 EL 表达式获取作用域数据

  1. 获取作用域数据
  2. 作用域查找顺序
  3. 获取指定作用域中的数据

c) 使用 EL 表达式进行运算

  1. 算术运算
  2. 关系运算
  3. 逻辑运算

d) EL 表达式空值判断 empty
具体实例
源码地址:https://github.com/hlc0216/EL

  • Servlet(elServlet)
package com.hlc.servlet;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.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;import com.hlc.ov.Address;
import com.hlc.ov.User;public class elServlet extends HttpServlet {@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {//设置编码格式res.setCharacterEncoding("utf-8");res.setContentType("text/html;charset=utf-8");req.setCharacterEncoding("utf-8");//获取请求信息String uname=req.getParameter("uname");String pwd=req.getParameter("pwd");//处理请求信息System.out.println("name="+uname+"pwd="+pwd);//响应处理结果//使用request作用域进行数据流转req.setAttribute("str", "今天的天使很美");//对象类型User u = new User("libai","123",new Address("北京","海淀区","七里胡同"));req.setAttribute("user", u);//集合类型//List类型//存储普通字符List<String>list=new ArrayList<String>();list.add("百里守约");list.add("李白");list.add("雅典娜");req.setAttribute("list", list);//存储对象List<User>list2=new ArrayList<User>();User u1=new User("鲁班", "123", new Address("陕西","西安","长安街"));list2.add(u1);req.setAttribute("list2", list2);//map类型//存储普通字符Map<String, String>map=new HashMap<String, String>();map.put("中国", "北京");map.put("日本","东京");map.put("美国","华盛顿");req.setAttribute("map", map);//存储对象Map<String,User>map2=new HashMap<String, User>();map2.put("person", new User("小齐","123",new Address("湖南","长沙","岳麓书院")));req.setAttribute("map2", map2);req.getRequestDispatcher("/el.jsp").forward(req, res);return ;
}
}
  • JSP部分(el.jsp)
<%@ page language="java" import="java.util.*,com.hlc.ov.*"pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<h3>使用传统方式获取作用域数据</h3>
<%=request.getParameter("uname")%></br>
<%=request.getAttribute("str")%></br>
<%=((User) request.getAttribute("user")).getAdd().getTown()%></br>
<%=((ArrayList) request.getAttribute("list")).get(2)%></br>
<%=((User) ((ArrayList) request.getAttribute("list2")).get(0)).getAdd().getTown()%></br>
<%=((HashMap) request.getAttribute("map")).get("中国")%></br>
<%=((User) ((HashMap) request.getAttribute("map2")).get("person")).getAdd().getTown()%>
<%--传统方式获取作用域数据:缺点一:需要导入包缺点二:需要跳转缺点三:获取数据得代码麻烦使用EL表达式获取作用域数据作用:获取作用域对象中的数据注意:获取的是pageContext、request、session、application四个对象中的数据。语法:${}表达式:获取请求数据request对象存储的请求数据:param.键名    返回值parpmvalues.键名  返回数组通过setAttribute方法存储到作用域对象中的数据如果存储的是普通字符串则直接返回如果存储的是对象则返回的是对象作用域查找顺序:默认查找顺序pageContext-->request-->session-->application注意:每次查找都是从小到大进行查找,找到了则获取,不再继续查找。指定查找${pageScope.键名 }${requestScope.键名 }${sessionScope.键名 }${applicationScope.键名 }EL表达式的逻辑运算${逻辑表达式}   && || !${算术表达式}  + - * / %${关系表达式}  > < == != 等注意:+表示加法运算,不表示字符连接,也可以使用三目运算      EL的空值判断:${empty 键名}作用:判断键名对象的值是否存有数据。EL获取请求头数据和Cookie数据:(了解即可)请求头数据:${header}-->返回所有的请求头数据${header["键名"]}--->返回指定的键名的请求头数据${hedaerValues["键名"]}--->返回指定的键名(同键不同值)的值的数组。获取Cookie数据:${cookie}--->返回存储了所有的cookie对象的map集合${cookie.键名}---->返回指定的cookie对象${cookie.键名.name}--->返回指定的cookie对象存储的数据的键名。${cookie.键名.value}--->返回指定的cookie对象存储的数据的值。--%>
<!-- 使用EL表达式获取作用域数据-->
<h3>使用EL表达式获取作用域数据</h3>
${param.uname}
</br>
${str }
</br>
${user.add.town }
</br>
${list[2] }
</br>
${list2[0].add.town }
</br>
${map.中国 }
</br>
${map2.person.add.town }<h3>EL的作用域查找顺序</h3>
<%pageContext.setAttribute("hello", "hellopageContext");request.setAttribute("hello", "helloRequest");session.setAttribute("hello", "hello session");application.setAttribute("hello", "hello application");
%>${hello }
${pageScope.hello}---${requestScope.hello}--${sessionScope.hello}--${applicationScope.hello}
<h3>EL表达式的逻辑运算</h3>
${1+2}--${1*2}--${4/2}--${4-2}--${4%3}--${4==4}--${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标签库

什么是 JSTL 标签库
JSTL 是 apache 对 EL 表达式的扩展(也就是说 JSTL 依赖 EL)。

JSTL 是标签语言!JSTL 标签使用以来非常方便,它与 JSP 动作标签一样,只不过它不是 JSP内置的标签,需要我们自己导包,以及指定标签库而已! 如果你使用 MyEclipse 开发 JavaWeb,那么在把项目发布 到 Tomcat 时,你会发现,MyEclipse 会在 lib 目录下存放 jstl 的 Jar 包!如果你没有使用 MyEclipse 开发那么需要自己来导入这个 JSTL 的 Jar 包:jstl-1.2.jar。

JSTL 标签库的作用
用来提升在 JSP 页面的逻辑代码的编码效率,使用标签来替换逻辑代码的直接书写,高效,美观,整洁,易读。
使用 JSTL 标签库

  • 内容:
  1. 核心标签库(学习)
  2. 格式化标签库(了解)
  3. 函数标签库(了解)
  4. XML 标签库(了解)
  5. SQL 标签库(了解)
  • 使用方式:
  1. 导包
  2. 使用 taglib 标签引入资源
  3. 核心标签库
  4. 格式化标签库 学习网址:http://www.runoob.com/jsp/jsp-jstl.html
  • 具体实例
<%@ 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("str","今天天气真好,适合学习");//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>
<!--创建表格数据  -->
<table border="1px"><tr><td>课程名称</td><td>教师</td><td>价格</td><td>重要性</td></tr><c:forEach items="${list}" var="s"><tr><td>${s}</td><td>${s}</td><td>${s}</td><td>${s}</td></tr></c:forEach>
</table>
<!--遍历map集合  -->
<c:forEach items="${map}" var="m">${m.key}--${m.value} <br />
</c:forEach>

运行截图

EL表达式JSTL标签库小结相关推荐

  1. EL 表达式 JSTL 标签库

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

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

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

  3. EL表达式 JSTL标签库

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

  4. el表达式,JSTL标签库

    1.el表达式    表达式语言(Expression Language,简称EL) EL主要作用:       获取数据:       EL表达式主要用于替换JSP页面中的脚本表达式,检索reque ...

  5. El表达式+jstl标签

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

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

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

  7. Java Web - EL表达式和JSTL标签库

    在使用servlet和jsp的过程中,两者之间的数据流转是十分常见的,jsp实际上也是一种servlet,也就是两个servlet之间的数据流转,我们根据不同的使用场景选择使用,请求转发(在reque ...

  8. Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

    来自:http://blog.csdn.net/love_you_99/article/details/8184797 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极 ...

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

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

  10. el表达式 循环_EL表达式和JSTL标签库(百战程序员047天)

    1.EL表达式 介绍:是一种非常简洁的表达式,语法简单,便于使用,灵感来源于ECMAScript和Xpath的表达式语言 样式: ${表达式} 作用:简化jsp中获取作用域或者请求数据的写法. 获取请 ...

最新文章

  1. 图像分割:Python的SLIC超像素分割
  2. Kaggle经典数据分析项目:泰坦尼克号生存预测!
  3. springboot + rabbitmq 用了消息确认机制,感觉掉坑里了
  4. 通过COLA看应用架构
  5. Scanpy(四).细胞分化轨迹推断
  6. Opengl-几何着色器(劫持顶点的家伙)
  7. Scala集合常用方法:reduceLeft/reduceRight
  8. MyBatisPlus(基于starter和Bean方式)
  9. Hibernate 自动创建表
  10. 回来不是为了留下,而是为了重新出发 -- 生死阅读影评
  11. python下载问题_初学者下载使用Python遇到的问题看它就行了
  12. 遇到暴风影音 activeX 漏洞
  13. 机器翻译是否能替代人工翻译?从前世今生说起
  14. BUUCTF-Crypto-Quoted-printable题解
  15. Windows防火墙的配置与应用
  16. SpringBoot整合Elasticsearch BBoss
  17. 老司机 iOS 周报 #62 | 2019-04-08
  18. C++ error C2059: 语法错误:“常数”
  19. 类似于语雀、石墨文档私有化部署开源代替品,你尝试了吗?
  20. 上海富士康 软件测试 工程师 bcb 职责,富士康面试测试题.doc

热门文章

  1. 俄勒冈之旅_我在俄勒冈州SAO软件协会上通过A hrefhttpdbsaoorgcalendarofeventseventdescription进行介绍...
  2. AppleScript开机自动登录ChinaUnicom
  3. ES部分查询方法,elasticsearch查询方法
  4. mysql-order by分页复杂排序条件替换union-limit(使用if和case when实现复杂排序)
  5. 学习大数据需要哪些数学知识?
  6. 微软产品下载中心--MSDN,我告诉你
  7. 小程序源码:图片秒加水印制作生成
  8. c++智能指针转化:static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_cast
  9. 有限体积法求解二维方腔流(三)——代码以及与icoFoam结果对比
  10. linux桌面版无线鼠标不能用,无线鼠标没反应怎么回事 无线鼠标没反应解决方法...