JavaEE基础八之EL与JSTL相关知识(过时不谈)

本文详细解析了EL表达式语言和JSTL标签库的功能与应用,涵盖EL的基本语法、内置对象、作用域检索顺序及运算符,同时深入介绍了JSTL的属性操作、条件分支、迭代和其他标签,通过实例演示如何简化JSP开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • EL

    • 功能

      • 动态输出内容 替代JSP中的表达式元素<%=%>简化jsp 主要就是取值
    • 一般格式

      • ${ EL表达式}
    • 内置对象 牢记!!因为其他也是差不多

      • param/paramValues 方便输出请求参数
      • pageScope/requestScopre/sessionScope/applicationScope 输出各范围的属性
      • header/headerValues 与请求头相关
      • cookie/initParam
      • pageContext
      ${param.name} / ${paramValues.hobbies[0]}
      ${header.accept} / ${headerValues.cookie[0]}
      ${cookie.JSESSIONID.value}/${initParam.path}
      pageContext  可以调用PageContext类所有符合规范的getXXX方法
      	例如:public abstract ServletRequest getRequest()
      	${pageContext.request}
      	如果该EL返回的是真正的请求对象,可以继续调用HttpServletRequest中的其他getXXX方法
      	${pageContext.request.remoteAddr}  //调用请求中的getRemoteAddr方法
      
    • 获取数据的作用域检索顺序

      • 与获取属性数据相关对象
        • pageScope:页面范围
        • requestScope:请求范围
        • sessionScope:会话范围
        • applicationScope:上下文范围
      • 检索顺序:不指定范围时,例如${user.pwd},将自动从pageScope开始查找,直到applicationScope,如果没查到,则什么也不显示
    • 强制使用某作用域属性

      • ${requestScope.user.pwd}
    • 运算符

      • 算术运算符 + - * / % mod
      • 比较运算符 ==/eq、!=/ne、</lt 、>/gt 、<=/le 、>=/ge
      • 逻辑运算符 &&/and、||/or、!/not
      • 注:EL运算符多结合jstl使用
      • 集合运算符等特殊运算符 ${requestScope.productList[0].productName}
        • empty
        • ${A?B:C}
        • ()
    • 调用静态方法的方式

    //1 定义TestELStatic类,定义静态方法
    public class TestELStatic {
    	public  static int sum(int x,int y){
    		return x+y;
    	}
    }
    //2 WEB-INF下定义test.tld【必须为.tld文件】,将静态方法定义为函数
    <?xml version="1.0" encoding="UTF-8" ?>
    <taglib 
    	xmlns="http://java.sun.com/xml/ns/javaee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_3.xsd"
    	version="2.3">
    
    	<display-name>Custom Functions</display-name>	
    	<tlib-version>1.0</tlib-version>
     	<uri>http://www.etc.com</uri><!-- uri为tld文件的唯一标记-->
    
    	<function>
    		<name>sum</name>  <!--EL使用该函数的名字-->
    		<function-class>com.chinasofti.chapter09.section01.TestELStatic</function-class><!--方法所在类全类名-->
    		<function-signature>int sum(int,int)</function-signature>
              <!--方法声明形式->
    	</function>
    </taglib>
    //3 WEB-INF下web.xml中 配置test.tld文件          
    <jsp-config>    
        <taglib>    
            <taglib-uri>http://www.etc.com</taglib-uri>    
            <taglib-location>/WEB-INF/test.tld</taglib-location>    
        </taglib>    
    </jsp-config>
    //4 在JSP中引入tld方法,调用静态方法
    <%@taglib uri="http://www.etc.com" prefix="t" %>
    调用静态方法:${t:sum(10,12)}
    
  • JSTL------------与HTML代码完全的分隔,不要考虑,写就是了

    • 标签库作用

      • 标签库:标签处理器类+tld文
        • 实现动态内容 – 用于大大简化jsp
        • 可重复使用,便于维护
      • 取代jsp中所写的代码!!!!----对应thymeleaf
    • JSTL简介

      • 包括标签处理器类(.jar形式)及描述文件tld
    • JSTL使用步骤

      1. 引入包
      2. taglib指令 -》使用
    • JSP taglib指令标签

      <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
      
    • JSTL属性操作标签

      标签名   所在标签库    作用:方法作用 			属性 :即方法参数
      set    c.tld  指定范围内,将对象保存为属性   var:属性名、scope:属性范围、value:使用EL
      remove  c.tld 指定范围内,删除属性 		var:属性名 、scope:属性范围
      例如:在会话属性存一个属性
      <c:set var="loggedin" scope="session" value="true"/>
      
    • JSTL条件分支标签

      if         c.tld  	 条件为true,执行标签体内容   test:返回值为布尔值的表达式,作为分支条件
      choose     c.tld  实现if/else if/else 需要与when,otherwise结合  
      when       c.tld   实现else if逻辑与choose、otherwise配合 test:返回布尔值表达式
      otherwise  c.tld  实现else逻辑,与choose、when配合
      例如:  test为条件
      <c:if test="${not empty a}">
      	<c:out value="${a}"></c:out>
      </c:if>
      <c:choose>
      	<c:when test="${score>100||score<0}">错误分数:${score}</c:when>
        	<c:when test="${score>=90}">A级</c:when>
        	<c:otherwise>E级</c:otherwise>
       </c:choose>
      
    • JSTL迭代标签

      forEach 	c.tld 	迭代集合或数组		items:需要迭代的数组或集合对象,可使用EL
      									var:迭代过程中的临时变量
      forToken	c.tld	迭代字符串		items:指定迭代的字符串,delims:表示分隔符,									var:表示分隔符分割items产生的字符串
      例如:
      <c:forEach var="c" items="${cities}">
        	${c.key}=${c.value}<br/>
      </c:forEach>
      <c:forToken items="a:b:c:d" delims=":" var="token">
      	<c:out value="${token}"></c:out>
      </c:forToken>
      
    • JSTL其他标签

      <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
      <%  
          Date date = new Date();  
          pageContext.setAttribute("d", date);  
      %>  
      <fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/> //用于格式化日期 在fmt.tld
      
    • 自定义标签的实现方法

      • 标签处理器类
      • tld文件
    • 实现自定义国际化标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值