一、EL表达式
- 简介
- EL表达式介绍及作用:Expression Language(表达式语言),目的是替代JSP页面中的复杂代码。
- EL表达式语法:“${变量名}”。 - EL表达式的语法有两个要素:$ 和 {}。
例如: 点号记法:${BeanName.beanProperty} 数组记法:${BeanName[“beanProperty”]} //获取输出bean中的suser属性值; ${userBean.suser} 或 ${userBean[“suser”]} //获取map中key为id对应的值; ${mcType[“id”]}
- EL表达式可以使用 “.” 或者 “[]” 操作符在相应的作用域中取得某个属性的值。
- EL是JSP2.0规范的一部分,只要容器支持Servlet2.4/JSP2.0,就可以在JSP2.0网页中直接使用EL。
- 作用域
- 运算符
- 开启和关闭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——属性的范围
9.EL表达式教辅2——“.”和“[]”的使用
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表达式
- JSTL介绍:JSP标准标签库(JavaServerPages Standard Tag Library),是由apache的jakarta小组来维护的。JSTL1.0 由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器组成。 如果要使用JSTL,则必须引用jstl.jar和 standard.jar两个包。
- 与EL表达式关系:JSTL通常会与EL表达式合作实现JSP页面的编码。
- JSTL开发准备:在JSP页面添加taglib指令:<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>。
- 为什么要使用JSTL标签?
- 在jsp中不建议直接书写Java代码(规范性问题)。
- EL表达式虽然可以解决“不用书写java代码”问题,但是对于复杂的数据(如数组、集合等)取值会很麻烦。
- 使用JSTL标签配合EL表达式能够很好的解决取复杂类型数据的问题,简化代码书写。
5.JSTL常用标签介绍
- 通用标签:set,out、remove
- 条件标签:if、choose
- 迭代标签:forEach
6.通用标签详解
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标签库分类
- core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。
- format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP页面的国际化。
- xml 库包含一些标记,这些标记用来操作通过XML表示的数据。
- sql 库定义了用来查询关系数据库的操作。
10.优点
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
13.待更新...