JavaWeb - JSTL、EL 表达式

一、EL表达式

  1. 简介
      - EL表达式介绍及作用:Expression Language(表达式语言),目的是替代JSP页面中的复杂代码。
      - EL表达式语法:“${变量名}”。
    JavaWeb - JSTL、EL 表达式_第1张图片
  2. EL表达式的语法有两个要素:$ 和 {}。
    例如: 
    点号记法:${BeanName.beanProperty}
    数组记法:${BeanName[“beanProperty”]}
    
    //获取输出bean中的suser属性值;
    ${userBean.suser}  或  ${userBean[“suser”]}
    //获取map中key为id对应的值;
    ${mcType[“id”]} 

     

  3. EL表达式可以使用 “.” 或者 “[]” 操作符在相应的作用域中取得某个属性的值。
  4. EL是JSP2.0规范的一部分,只要容器支持Servlet2.4/JSP2.0,就可以在JSP2.0网页中直接使用EL。
  5. 作用域
    JavaWeb - JSTL、EL 表达式_第2张图片
    PS:使用EL的时候,默认会以一定顺序(pageContext、request、session、application)搜索四个作用域,将最先找到的变量值显示出来。
  6. 运算符
    JavaWeb - JSTL、EL 表达式_第3张图片
    JavaWeb - JSTL、EL 表达式_第4张图片
  7. 开启和关闭EL表达式
    (1)开启方法:在servlet2.4之后默认方法为false,即可以不写或写成 <%@ page isELIgnored="false" %>
    (2)关闭方法:<%@ page isELIgnored="true" %>
    附:还有一种批量禁用EL的方法,可以在WEB-INF/web.xml中使用jsp-property-group标签批量禁用el,web.xml中进行如下配置。
    
    
        
            
                *.jsp
                true
            
        
    
  8. EL表达式教辅1——属性的范围
    JavaWeb - JSTL、EL 表达式_第5张图片
    JavaWeb - JSTL、EL 表达式_第6张图片
    JavaWeb - JSTL、EL 表达式_第7张图片
  9. EL表达式教辅2——“.”和“[]”的使用
    JavaWeb - JSTL、EL 表达式_第8张图片
    JavaWeb - JSTL、EL 表达式_第9张图片
    JavaWeb - JSTL、EL 表达式_第10张图片
  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. 通用标签详解
    JavaWeb - JSTL、EL 表达式_第11张图片
  7. 条件标签详解
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
    
    
    
    
    jstl中的if标签和choose标签
    
    
    	
    	
    	<%-- 
    		您的年龄为12岁
    	
    	hello world --%>
    
    	
    您的年龄为12岁 您的年龄不为12岁

     

  8. 迭代标签详解
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	//1、首先创建一个List集合,我们往这个List集合中存放多条数据
    	Map datamap1=new HashMap();
    	datamap1.put("shopName", "联想笔记本");
    	datamap1.put("address", "北京");
    	datamap1.put("price", 4999.99);
    	Map datamap2=new HashMap();
    	datamap2.put("shopName", "神州笔记本");   
    	datamap2.put("address", "南京");
    	datamap2.put("price", 3999.99);
    	List> lists=new ArrayList>();
    	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"%>
    
    
    
    
    通过jstl和EL表达式迭代List集合
    
    
    	
    		${Map.shopName}
    ${Map.address}
    ${Map.price}
  9. JSTL标签库分类
     

    JavaWeb - JSTL、EL 表达式_第12张图片
     - core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。 
     - format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP页面的国际化。 
     - xml 库包含一些标记,这些标记用来操作通过XML表示的数据。
     - sql 库定义了用来查询关系数据库的操作。

  10. 优点
    JavaWeb - JSTL、EL 表达式_第13张图片

  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
    JavaWeb - JSTL、EL 表达式_第14张图片
    JavaWeb - JSTL、EL 表达式_第15张图片
    JavaWeb - JSTL、EL 表达式_第16张图片
    JavaWeb - JSTL、EL 表达式_第17张图片
    JavaWeb - JSTL、EL 表达式_第18张图片
    JavaWeb - JSTL、EL 表达式_第19张图片

  13. 待更新...


 

你可能感兴趣的:(#,前端,#,JavaWeb,#,JSTL,/,EL)