JavaWeb - JSTL、EL 表达式

版权声明:https://blog.csdn.net/Dream_Weave https://blog.csdn.net/Dream_Weave/article/details/83088144

一、EL表达式

  1. 简介
      - EL表达式介绍及作用:Expression Language(表达式语言),目的是替代JSP页面中的复杂代码。
      - EL表达式语法:“${变量名}”。
    这里写图片描述
  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. 作用域
    这里写图片描述
    PS:使用EL的时候,默认会以一定顺序(pageContext、request、session、application)搜索四个作用域,将最先找到的变量值显示出来。
  6. 运算符
    这里写图片描述
    这里写图片描述
  7. 开启和关闭EL表达式
    (1)开启方法:在servlet2.4之后默认方法为false,即可以不写或写成 <%@ page isELIgnored="false" %>
    (2)关闭方法:<%@ page isELIgnored="true" %>
    附:还有一种批量禁用EL的方法,可以在WEB-INF/web.xml中使用jsp-property-group标签批量禁用el,web.xml中进行如下配置。
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
        <jsp-config>
            <jsp-property-group>
                <url-pattern>*.jsp</url-pattern>
                <el-ignored>true</el-ignored>
            </jsp-property-group>
        </jsp-config>
    </web-app>
  8. EL表达式教辅1——属性的范围


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


  10. 待更新...

 

二、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. 通用标签详解
  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. 待更新...


猜你喜欢

转载自blog.csdn.net/Dream_Weave/article/details/83088144