JSTL和EL 表达式

版权声明:原创内容是本人学习总结,仅限学习使用,禁止用于其他用途。如有错误和不足,欢迎评论指正补充。 https://blog.csdn.net/qian_qian_123/article/details/83650589

 

 

目录

1、为什么需要EL

1、JavaBean在JSP中的局限

2、解决办法

2、EL表达式简介

1、什么是EL

2、EL的功能

3、EL的特点

4、EL表达式语法

1、使用变量名获取值

2、变量属性范围名称

3、获取对象的属性值

3、EL隐式对象

4、为什么使用JSTL

5、什么是JSTL

6、JSTL 的优点

7、JSTL的环境搭建

使用JSTL的步骤

8、 JSTL标准标签库内的标签

1、set:设置指定范围内的变量值

2、out:计算表达式并将结果输出显示

3、remove:删除指定范围内的变量

4、if:实现Java语言中if语句的功能

5、choose:实现Java语言中if-else if-else语句的功能

6、 forEach:实现对集合中对象的遍历


1、为什么需要EL

1、JavaBean在JSP中的局限

  • 在JSP页面中嵌入大量的Java代码
  • 获取JavaBean属性必须要实例化
  • 强制类型转化
<%	
    Employee employee = (Employee)request.getAttribute("employee");
    Computer comp = employee.getComputer();
    String manufacturer = comp.getManufacturer();
%>

2、解决办法

使用EL表达式简化

${requestScope.employee.computer.manufacturer}

2、EL表达式简介

1、什么是EL

  • Expression Language(表达式语言)

2、EL的功能

  • 替代JSP页面中的复杂代码

3、EL的特点

  • 自动转换类型
  • EL得到某个数据时可以自动转换类型
  • 使用简单

4、EL表达式语法

${ EL exprission }

  • 使用变量名获取值
  • 获取对象的属性值
  • 获取集合

1、使用变量名获取值

  • ${变量名}
<%  request.setAttribute("username","LiYang"); %>
姓名: ${username}

2、变量属性范围名称

属性范围

EL中的名称

说明

page

pageScope

${pageScope.username},表示在page范围内查找username变量,找不到返回Null

request

requstScope

 

session

sessionScope

 

application

applicationScope

 
${requstScope.username}

3、获取对象的属性值

<%	
    User user = (User )request.getAttribute("user");
    user.getName();
%>
  • 点操作符
${user.name} 
  • [ ]操作符
${user["name"]}

使用EL表达式输出姓名

<%
    Map names = new HashMap();
    names.put("one","LiYang");
    names.put("two","WangHua");
    request.setAttribute("names",names);
%>
姓名:${names.one}<br/>
姓名:${names["two"] }<br/>
  • 关系操作符

    关系操作符

    说明

    示例

    结果

    ==(或eq)

    等于

    ${23==5}或${23 eq 5}

    ${"a" =="a"}或${"a" eq "a"}

    false

    true

    !=(或ne)

    不等于

    ${23!=5}或${23 ne 5}

    true

    <(或lt)

    小于

    ${23<5}或${23 lt 5}

    false

    >(或gt)

    大于

    ${23>5}或${23 gt 5}

    true

    <=(或le)

    小于等于

    ${23<=5}或${23 le 5}

    false

    >=(或ge)

    大于等于

    ${23>=5}或${23 ge 5}

    ture

  • 逻辑操作符

    逻辑操作符

    说明

    示例

    结果

    &&(或and)

    逻辑与

    如果A为true,B为false,则A&&B(或A and B)

    false

    ||(或or)

    逻辑或

    如果A为true,B为false,则A||B(或A or B)

    true

    ! (或not)

    逻辑非

    如果A为true,则!A (或not A)

    false

  • Empty操作符

变量 a不存在,则${empty a}返回的结果为true

${not empty a}或${!empty a}返回的结果为false

3、EL隐式对象

作用域访问对象:pageScope、requestScope、sessionScope、applicationScope

参数访问对象:param、paramValues

JSP隐式对象:pageContext

对象名称

说  明

pageScope

返回页面范围的变量名,这些名称已映射至相应的值

requestScope

返回请求范围的变量名,这些名称已映射至相应的值

sessionScope

返回会话范围的变量名,这些名称已映射至相应的值

applicationScope

返回应用范围内的变量,并将变量名映射至相应的值

param

返回客户端的请求参数的字符串值

paramValues

返回映射至客户端的请求参数的一组值

pageContext

提供对用户请求和页面信息的访问

4、为什么使用JSTL

虽然EL表达式可以访问JavaBean的属性,但是并不能实现在JSP中进行逻辑判断,因而要使用JSTL标签。

5、什么是JSTL

什么是JSTL JSP标准标签库(JavaServerPages Standard Tag Library)

JSTL通常会与EL表达式合作实现JSP页面的编码

6、JSTL 的优点

  • 提供一组标准标签
  • 可用于编写各种动态 JSP 页面

7、JSTL的环境搭建

使用JSTL的步骤

  • 在工程中引用JSTL的两个jar包和标签库描述符文件
  • 在JSP页面添加taglib指令
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    

    使用JSTL标签

8、 JSTL标准标签库内的标签

核心标签库

通用标签:set、out、remove

条件标签:if、choose

迭代标签:forEach

1、set:设置指定范围内的变量值

将value值存储到范围为scope的变量variable中

<c:set var="variable" value=" v " scope="  scope  "/>

将value值设置到对象的属性中

<c:set value="value" target="target" property="property" />
<%
    User user = new User(); 
    request.setAttribute("user", user);
%>
<c:set target="${user}" property="name" value="defaultName " />

2、out:计算表达式并将结果输出显示

不指定默认值

<c:out value="value" />

指定默认值

<c:out value="value" default="default" />
<%
    User user = new User(); 
    request.setAttribute("user", user);
%>
<c:set target="${user}" property="name" value="defaultName " />
<c:out value="${user.name}" default="noUserName" />

转义特殊字符

<p>${"<a href='http://www.baidu.com'>百度</a>"}</p>
<p>
    <c:out escapeXml="Y" value="<a href='http://www.baidu.com'>百度</a>"/>
</p>
<c:out value="<a href='http://www.baidu.com'>百度</a>"/>

3、remove:删除指定范围内的变量

<body>
<!-- 设置之前应该是空值 -->
设置变量之前的值是:msg=<c:out value="${msg}" default="null"/>

<!-- 给变量msg设值  使用set属性进行赋值 -->
<c:set var="msg" value="Hello ACCP!" scope="page"></c:set>

<!-- 此时msg的值应该是上面设置的"已经不是空值了" 使用out属性输出显示-->
设置新值以后:msg=<c:out value="${msg}"></c:out><br>

<!-- 把 msg变量从page范围内移除  使用remove属性移除-->
<c:remove var="msg" scope="page"/>

<!-- 此时msg的值应该显示null -->
移除变量msg以后:msg=<c:out value="${msg}“ default="null">
</c:out>
</body>	

通用标签的使用: 

引入使用核心标签的指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

<body>

set 标签用于给变量设置值和作用范围
scope= "page|request|session|application" 
<c:set var= "example" value="${100+1}" scope="session"  />	

out 标签在页面上显示信息或变量值 
<c:out value="${example}"/>

remove 标签用于删除作用域内的变量
<c:remove var= "example" scope="session"/>
</body>	

4、if:实现Java语言中if语句的功能

<c:if   test="codition"    var="name"    scope="applicationArea" >
	…
</c:if>	

判断登录:

<body>
<c:set var="isLogin" value="${empty sessionScope.user}"/>
<c:if test="${isLogin}">
…登录表单
</c:if>
<c:if test="${! isLogin}">
已经登录!
</c:if>
</body>

5、choose:实现Java语言中if-else if-else语句的功能

<c:choose var="varName" scope="scope">
	<c:when test="condition1">
		主体内容
 	</c:when>
	<c:when test="condition2">
		主体内容
 	</c:when>
	<c:otherwise>
		主体内容
	</c:otherwise>
</c:choose >

6、 forEach:实现对集合中对象的遍历

通过迭代标签显示商品列表:

<%
	List products = GoodsDao.getAllProducts();
	request.setAttribute("products", products);
%>
…
<!-- 循环输出商品信息 -->
<c:forEach var="product" items="${requestScope.products}" varStatus="status">
<!-- 如果是偶数行,为该行换背景颜色 -->
    <tr <c:if test="${status.index % 2 == 1 }">style="background-color:rgb(219,241,212);"</c:if>>
        <td>${product.name }</td>
        <td>${product.area }</td>
        <td>${product.price }</td>
    </tr>
</c:forEach>

通过迭代标签遍历Map:

<%
    Map<String,String> map=new HashMap<String,String>();
    map.put("tom", "美国");
    map.put("lily", "英国");
    map.put("jack","中国");
    request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${map}">
     ${entry.key}
     ${entry.value}<p>
</c:forEach>

 forEach:指定迭代的次数

<c:forEach  begin="start"   end="end"  step="count">

		…循环体代码…
</c:forEach>

<c:forEach  begin="1"   end="5"  step= "2">
	<c:out value="*"></c:out>
</c:forEach>

猜你喜欢

转载自blog.csdn.net/qian_qian_123/article/details/83650589