JavaWeb - JSTL、EL 表达式

简介: JavaWeb - JSTL、EL 表达式

一、EL表达式

  1. 简介
     - EL表达式介绍及作用:Expression Language(表达式语言),目的是替代JSP页面中的复杂代码。
     - EL表达式语法:“${变量名}”。image.png
  2. EL表达式的语法有两个要素:$ 和 {}。
例如: 
点号记法:${BeanName.beanProperty}
数组记法:${BeanName[“beanProperty”]}
//获取输出bean中的suser属性值;
${userBean.suser}  或  ${userBean[“suser”]}
//获取map中key为id对应的值;
${mcType[“id”]} 
  1. EL表达式可以使用 “.” 或者 “[]” 操作符在相应的作用域中取得某个属性的值。
  2. EL是JSP2.0规范的一部分,只要容器支持Servlet2.4/JSP2.0,就可以在JSP2.0网页中直接使用EL。
  3. 作用域

image.png

  1. 运算符

image.png

image.png

  1. 开启和关闭EL表达式

(1)开启方法:在servlet2.4之后默认方法为false,即可以不写或写成 <%@ page isELIgnored="false" %>

(2)关闭方法:<%@ page isELIgnored="true" %>

附:还有一种批量禁用EL的方法,可以在WEB-INF/web.xml中使用jsp-property-group标签批量禁用el,web.xml中进行如下配置。


8.EL表达式教辅1——属性的范围

image.pngimage.png

image.png


9.EL表达式教辅2——“.”和“[]”的使用

image.pngimage.pngimage.png


10.Javascript 使用 EL表达式 是否需要加引号问题

如果${sessionScope.userName}从服务器端获取到的值是张三,那么最终浏览器解释执行得到的就是如下这样的结果


var message = 张三;


这样肯定是不行的,javascript中字符串肯定是要用引号引起来的,像var message = "张三";或者是像var message = '张三';这样才对,所以这下知道为什么在javascript中使用el表达式一定要用引号引起来了吧,不管是单引号还是双引号,总之就是要用引号引起来。


像alert(${sessionScope.userName});这种写法浏览器最终解释执行得到的结果就是alert(张三);所以这样写肯定会有问题,只有alert("${sessionScope.userName}");这样写或者alert('${sessionScope.userName}');这样写才可以,浏览器最终解释执行得到的结果就是alert("张三");和alert('张三');


还有就是如果${sessionScope.age}从服务器取出的是一个数字呢?比如${sessionScope.age}从服务器取出的值是16,那么要不要加引号呢?


alert(${sessionScope.age});浏览器最终解释执行得到的结果就是alert(16);你们自己想想,javascript的语法中,数字要不要加引号呢?,在javascript中定义一个数字类型的变量像var age =16;这样写是没有任何问题的,然后alert(age);可以正常弹出16,没问题,如果我们像var age = "16" 或者像var age = '16'这样写呢?也没问题,只不过这里加了引号的16就是一个字符串了。所以不管EL表达式从服务器上取到的值是字符串的还是数字,最好都加上引号,这样做比较保险,也比较省事,不管是单引号还是双引号,总之加上引号肯定没问题。如果EL表达式从服务器上取到的值是数字,在javascript中给这个数字加上引号也没关系,如果客户端要用这个加了引号的数字做数学运算,我们可以利用javascript中的函数把这个加了引号的数字转换成数字类型再做运算! 比如var age = "${sessionScope.age}" ,浏览器解释执行后得到的结果是var age = "16";大不了我们在客户端利用javascript的转换函数,把age = "16"从字符串类型转换为数字类型再做数学运算即可!


11.待更新...


二、JSTL表达式

  1. JSTL介绍:JSP标准标签库(JavaServerPages Standard Tag Library),是由apache的jakarta小组来维护的。JSTL1.0 由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器组成。 如果要使用JSTL,则必须引用jstl.jar和 standard.jar两个包。
  2. 与EL表达式关系:JSTL通常会与EL表达式合作实现JSP页面的编码。
  3. JSTL开发准备:在JSP页面添加taglib指令:<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>。
  4. 为什么要使用JSTL标签?

- 在jsp中不建议直接书写Java代码(规范性问题)。

- EL表达式虽然可以解决“不用书写java代码”问题,但是对于复杂的数据(如数组、集合等)取值会很麻烦。

- 使用JSTL标签配合EL表达式能够很好的解决取复杂类型数据的问题,简化代码书写。

5.JSTL常用标签介绍
- 通用标签:set,out、remove
- 条件标签:if、choose
- 迭代标签:forEach

6.通用标签详解image.png

7.条件标签详解

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>jstl中的if标签和choose标签</title>
</head>
<body>
  <c:set var="age" value="12" scope="request"></c:set>
  <!-- if标签:
    test:接判断的条件,如果条件为true,这执行标签体中的内容
  -->
  <%-- <c:if test="${age==12 }">
    您的年龄为12岁
  </c:if>
  hello world --%>
  <hr>
  <!-- choose标签 -->
  <c:choose>
    <c:when test="${age==12 }">
    您的年龄为12岁
    </c:when>
    <c:otherwise>
    您的年龄不为12岁
    </c:otherwise>
  </c:choose>
</body>
</html>

8.迭代标签详解

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  //1、首先创建一个List集合,我们往这个List集合中存放多条数据
  Map<String,Object> datamap1=new HashMap<String,Object>();
  datamap1.put("shopName", "联想笔记本");
  datamap1.put("address", "北京");
  datamap1.put("price", 4999.99);
  Map<String,Object> datamap2=new HashMap<String,Object>();
  datamap2.put("shopName", "神州笔记本");   
  datamap2.put("address", "南京");
  datamap2.put("price", 3999.99);
  List<Map<String,Object>> lists=new ArrayList<Map<String,Object>>();
  lists.add(datamap1);
  lists.add(datamap2);
  //2、将存在多条数据的List集合保存到request域中去
  request.setAttribute("lists", lists);
  //3、我们再将5.jsp中取出request域中存放的list集合
  request.getRequestDispatcher("/5.jsp").forward(request, response);
}
<%@ page language="java" contentType="text/html; charset=utf-8"
  pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>通过jstl和EL表达式迭代List集合</title>
</head>
<body>
  <c:forEach items="${lists }" var="Map">
    ${Map.shopName}<br/>
    ${Map.address}<br/>
    ${Map.price}<br/>
  </c:forEach>
</body>
</html>

9.JSTL标签库分类

image.png

- core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。

- format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP页面的国际化。

- xml 库包含一些标记,这些标记用来操作通过XML表示的数据。

- sql 库定义了用来查询关系数据库的操作。


10.优点

image.png

11.引入标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

12.fmt

image.pngimage.pngimage.pngimage.pngimage.pngimage.png

13.待更新...

目录
相关文章
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
497 37
|
2月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
39 2
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
80 5
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
|
3月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
129 2
|
3月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
5月前
|
存储 程序员
JavaWeb之Listener监听器
JavaWeb之Listener监听器
94 0
|
6月前
|
前端开发 JavaScript 算法
javaweb(四)——过滤器与监听器
javaweb(四)——过滤器与监听器
|
6月前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
221 0
|
6月前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
42 0