Servlt-JSP之EL表达式与JSTL标签

一、EL表达式

1. EL表达式的意义及作用

EL(Expression Language)是为了JSP写起来更加的简单。

EL表达式的灵感来自于EXMAScript和XPath表达式语言,它提供了JSP中简化表达式的方法,使JSP的代码更加简化。 —— 摘自百度百科

2. 语法结构

${expression}

3. 运算符.与[]
  • EL表达式提供了.与[]2种方式存取数据。例如:
${user.name}  	//相当于request.getAttribute("user").getName();
${user["name"]}	//相当于request.getAttribute("user").getName();
  • 当存取的属性中存在特殊字符,如_或-等非字母或数字的符号时,就一定要使用[]来获取。例如:
${user["user_name"]}
  • 如果需要动态取值,也要使用[]来获取,.无法做到动态取值。例如:
${sessionScope.user["data"]}//其中data是变量

注:这里的user.name用到的类反射属性,其中name是Bean属性。

Bean属性: 与get/set方法对应的属性称为Bean属性。

对象属性: 不与get/set方法对应的属性成为对象属性。

4. EL的取值范围
  • EL默认从如下4个对象中依次取值

    注:EL默认是从以下4个对象中一次取值,如果中途找到了相应的属性,就直接回传,不在继续找下去。

    ​ 如果4个对象都找完依然没有找到相应的属性,就返回“”。

    1. page			//EL中的名称: pageScope
    2. request		//EL中的名称: requestScope	
    3. session		//EL中的名称: sessionScope
    4. application	//EL中的名称: applicationScope
    
  • EL指定取值范围,例如:

    ${requestScope.user.nam}
    
5. 支持运算
  • 算术型(+、-、*、/、%、…)

    ${user.age + 3} //年龄+3
    
  • 逻辑型(&&、||、!、and、or、not)

  • 关系型(==、!=、>、<、>=、<=、…)

    ${user.age>=20 && user.age<=30}//判断年龄在20~30之间
    
  • 空(empty)

    ${empty user}
    
  • 条件型(A ? B : C)

    ${user.sex=="M" ? "男" : "女"}
    
6. 隐私对象

EL表达式定义了一些隐式对象,允许对以下对象简单访问。

对象语法说明
param${param.userId}将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 ${param . name}相当于 request.getParameter (name)。
pageContext${pageContext.response}JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会 话、输出、servletContext 等。例如,${pageContext.response} 为页面的响应对象赋值。
paramValues${paramvalues. name}将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name} 相当于 request.getParamterValues(name)。
header${header. name}将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式 ${header. name} 相当于 request.getHeader(name)。
headerValues${headerValues. name}将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
cookie${cookie. name .value}将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookie. name .value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用 ${headerValues. name} 表达式。
7. 特别注意
  • 注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
  • 注意 <%@ page isELIgnored=“true” %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。
  • 全局禁用EL表达式,在web.xml中进行如下配置:
<jsp-config>
	<jsp-property-group>
		<url-pattern>*.jsp</url-pattern>
		<el-ignored>true</el-ignored>
	</jsp-property-group>
</jsp-config>

二、JSTL

1. 什么是JSTL?

JSTL (JavaServer Pages Standard Tag Library), JSP标准标签库。

JSP标准标签库是一个JSP标签集合,它封装了JSP应用的通用核心功能。

根据JSTL提供的功能,可以将其分为以下5个类别:

  • 核心标签
  • 格式化标签
  • SQL标签
  • XML标签
  • JSTL函数
2. 如何使用JSTL?
  • step1: 导入jstl.jar包

    也可以从apache官网下载,将jstl.jar和standard.jar拷贝到/WEB-INF/lib/目录下。

  • step2:在JSP页面上使用taglib指令导入指定的标签库

    语法格式:<%@taglib prefix="" uri="" %>

    prefix: 标签库的别名,对应标签库中的short-name

    uri: 标签库的访问地址,对应标签库中的
    在这里插入图片描述

    例如(导入核心标签库):

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
  • step3: 在JSP代码中使用具体的标签,例如:

    //1.使用if标签(与java中的if作用一致)
    <c:if test="${user.sex=='M'}">男</c:if>
    <c:if test="${user.sex=='F'}">女</c:if>
    
    //2.使用choose标签(与java中的swith...case...语句作用一样,可以在众多选项中做出选择)
    <c:choose>
    	<c:when test="${user.sex}=='M'">
    		男
    	</c:when>
    	<c:when test="${user.sex}=='F'">
    		女
    	</c:when>
    	<c:otherwise>
    		人妖
    	</c:otherwise> //类似于default
    </c:choose>
    
    //3.使用forEach标签(用于迭代一个集合中的对象)
    <c:forEach items="${user.interest}" var="item">	//item:要迭代的集合; var:每次迭代出的对象
    	${item}	//使用EL表达式输出
    </c:forEach>
    
3. JSTL运行原理

jsp文件编译为servlet时要执行以下几步:

  1. 通过标签<c:if test="" ></c:test >的前缀c找到与页面引入的与它对应的标签库<%@taglib prefix=“c” uri="…core"%>
  2. 通过标签库的uri找到jstl.jar中对应的c.tld文件。
  3. 通过标签的后缀 if 在c.tld文件中找到对应name=if的tag标签。
  4. 在翻译后的servlet中通过daTag()方法调用tag标签中tag-class指向的类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值