javaWeb之JSTL和EL表达式及区别

javaWeb之JSTL和EL表达式

原生的jsp中嵌套java代码的写法,使得整个jsp页面看着比较混乱,牵扯到有逻辑判断的时候,大多数情况都需要进行拼接,拼接是比较麻烦的且容易出现错误,所以就有了jstl标签库和el表达式。

el表达式

el表达式:通过一种特定的书写格式,能够简化小脚本中的代码量

<%
    Object obj = session.getAttribute("namekey");
    String name = (String)obj;
    out.println("name="+name);

    Object empObj = session.getAttribute("empkey");
    Emp emp = (Emp)empObj;
    String ename = emp.getEname();
    String sex = emp.getSex();
    out.println(ename+"--"+sex);
%>

<hr>
name:${namekey }
<!-- 该语法底层其实还是通过调用getter的方法来实现 -->
ename:${empkey.ename },
sex:${empkey.sex }

EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。

pageContext–>request–>session–>application

假如途中找到username,就直接回传,不再继续找下去,

例如:${sessionScope.username}是取出Session范围的username 变量。这种写法是不是比之前JSP 的写法:

String username =(String) session.getAttribute(“username”);容易、简洁许多

但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。

指定作用域获取数据:

  • ​ ${pageScope.键名} 指明获取pageContext作用域中的数据
  • ​ ${requestScope.键名} 指明获取request作用域中的数据
  • ​ ${sessionScope.键名} 指明获取session作用域中的数据
  • ​ ${applicationScope.键名} 指明获取application作用域中的数据

el表达式中的运算符

关系运算符说明
== 或 eq判断是否相等
gt 或 >大于
< 或 lt小于
!= 或 ne不等于
<= 或 le小于等于
>= 或 ge大于等于
empty判断是否为null
not empty不为null
${ A ? B : C}条件运算符

如果需要在支持表达式语言的页面中正常输出“ ” 符 号 , 则 在 “ ”符号,则在“ ”符号前加转义字符“\”,否则系统以为“$”是表达式语言的特殊标记。

缺点:

el表达式是不能做逻辑运算的,如果需要做逻辑运算,那就需要使用jstl标签库

JSTL标签库

为了简化jsp的代码编写。替换<%%>这种写法。一般与EL表达式配合

流程:

1、导入jar包

需要导入两个jar包:jstl.jar(标签库的jar)、standard(标签库的语言规范jar).jar

2、引入标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSTL常用标签:

  1. <c:out> 用于在JSP中显示数据,就像<%= … >

    <%=request.getAttribute("str") %>--${str}--<c:out value="${str}"
     default="我是out标签"></c:out>
     <br />
    
    属性描述是否必要默认值
    value要输出的内容
    default输出的默认值主体中的内容
    escapeXml是否忽略XML特殊字符true
  2. <c:set> </c:set> 用于保存数据

    声明了一个对象name,对象的值是zhangsan,存储到了page(默认)。指定是session

    <c:set var =“name” value=“zhangsan” scope=“session”></c:set>

    取出:${sessionScope.name}

    属性描述是否必要默认值
    value要存储的值主体的内容
    target要修改的属性所属的对象
    property要修改的属性
    var存储信息的变量
    scopevar属性的作用域Page

    如果指定了target属性,那么property属性也需要被指定。

  3. <c:if></c:if>

    1).判断test里面的表达式是否满足,如果满足,就执行c:if标签中的输出。c:if 没有else

    <c:set var=“age” value=“18”></c:set>

    <c:if test="${age > 25 }">

    年龄大于25岁

    </c:if>

    2).定义一个变量名flag,去接收前面表达式的值。然后存在session域中

    <c:if test ="${age > 25}" var = “flag” scope=“session”>

    年龄大于25岁

    </c:if>

    属性描述是否必要默认值
    test条件
    var用于存储条件结果的变量
    scopevar属性的作用域page

  4. <c:forEach></c:forEach>

    基础迭代标签,接受多种集合类型

    <%
    		String[] arr = {"Joke","Jack","Haha","heihei"};
    		//将数组存储到域中
    		pageContext.setAttribute("arr", arr);
    		
    		List<String> list = new ArrayList();
    		list.add("name");
    		list.add("age");
    		list.add("sex");
    		pageContext.setAttribute("list", list);
    		
    		Map<String,Object> map = new HashMap();
    		map.put("name","haha");
    		map.put("age",20);
    		pageContext.setAttribute("map", map);
    	%>
    	<!-- 
    		items:指的是要遍历的对象
    		begin:起始下标
    		end:结束下标
    		step:阶梯,每次间隔几个数 1:i++ 2:i+2 默认是1
    		var:每次遍历的对象 arr[i]
    		varStatus:其中存储的是下标 
    	 -->
    	<c:forEach items="${arr }" step="1" var="str" varStatus="status">
    		${str },${status.index }
    	</c:forEach>
    	<hr>
    	
    	<c:forEach items="${list }" var="key" varStatus="status">
    		${key },${status.index }
    	</c:forEach>
    	
    	<hr>
    	<c:forEach items="${map }" var="user" varStatus="status">
    		${user.key },${user.value },${status.index }
    	</c:forEach>
    	
    	<hr>
    	<c:forEach begin="0" end="9" var="index">
    		${index }
    	</c:forEach>
    
    属性描述是否必要默认值
    items要被循环的信息
    begin开始的元素(0=第一个元素,1=第二个元素)0
    end最后一个元素(0=第一个元素,1=第二个元素)Last element
    step每一次迭代的步长1
    var代表当前条目的变量名称
    varStatus代表循环状态的变量名称
  5. <c:remove>
    移除

    <%-- <%
    	pageContext.removeAttribute("hello",4);
    //request.removeAttribute("hello");
    //session.removeAttribute("hello");
     %>  --%>
    <c:remove var="hello" scope="request"/>
    ${hello}
     <br />
    
    属性描述是否必要默认值
    var要移除的变量名称
    scope变量所属的作用域所有作用域
JSTL和EL区别

JSTL(JSP Standard Tag Library,JSP标准标签库)是一个bai不断完善的开放源代码的duJSP标签库,是由apache的jakarta小组来维护的。zhiJSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上dao,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。
JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
JSTL标准标签库包括核心标签库和SQL标签库,核心标签库常用的是if和forEach

EL即Expression Language(表达式语言)
EL的语法:${ EL exprission }
${ bean.name } 或 ${ bean[‘name’] }
说白了,EL是用来显示数据的,功能跟<%=表达式%> 一样,EL是不需要引入什么东西的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值