JaveWeb-09EL表达式和JSTL

目录

EL表达式语言

EL概述

定义标识符规范

格式

基本用法

运算符

empty 运算符

EL表达式格式

请求参数相关内置对象

EL隐式对象

 1、pageContext

2.web域相关对象

​3.param和paramValues对象

 4.cookie

JSTL 基础

1、何为 JSTL

2、JSTL中的Core标签库


EL表达式语言

EL概述

EL的作用,在javaweb开发中,我们所有的html和java以及jsp页面是核心,但是在普通开发中,一个好的jsp页面要实现代码的整洁性,尽量避免在jsp页面中出现scriptlet(<%…%>)代码,所以,jsp推出了EL表达式,完成输出。

定义标识符规范

  • 不能以数字开头。
  • 不能是EL中的保留字,如and、or、gt。
  • 不能是EL隐式对象,如pageContext。
  • 不能包含单引号(')、双引号(“)、减号(-)和正斜杠(/)等特殊字符。

格式:

  ${}
	- EL不需要导包
	- 在EL中调用属性, 其实是调用的getXXX()方法

基本用法:

//jsp用法
<%=request.getAttribute("username")%>
<%=request.getAttribute("password")%>
//EL用法
${username}
${password}

运算符

1.点运算符( . )

用于访问jsp页面中某些对象的属性

2.方括号运算符( [] )

功能与点运算符相同,但是当属性名包含一些特殊符号时,只能使用方括号运算符

1.可以处理数组${requestScope.arr[0]}
2.可以容纳变量属性

${user["My-Name"]}


empty 运算符

用于判断某个对象(也适用于Set, Map, List)是否为null或" ", 基本语法如下

${empty var}

**注意: **

  • 在应用EL表达式取值时, 没有数组的下标越界, 没有空指针异常, 没有字符串的拼接
  • 当对象属性名称首字母大写时, 前台会出现拿不到数据的情况
     

 如果希望页面不适用EL,那么在page指令中加入isELlgnored=”true“属性。如果只希望某个不适应EL,则加上"",如${};
EL可以非常容易判断属性存不存在,scriptlet判断属性不存在时,会显示NULL,EL则显示空白。

EL表达式格式

  • 操作list和数组:${list[0]},${arr[0]}
  • 操作bean和属性:${ person.name}—>对应的是person.getName()方法。
  • 操作Map:${map.key},${map[‘key’]}—>对应的是map.get(Key);

EL一共11个内置对象,其中有十个是map类型的,最后一个是pageContext对象的

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • param
  • paramValues
  • header
  • headerValues
  • initParam
  • cookie
  • pageContext

域对象一共有四个:

  • pageScope
  • requestScpoe
  • sessionScope
  • applicationScope
    ${pageScope.name}=pageContext.getAttribute("name");
    ${requestScope.name}=request.getAttribute("name");
    ${sessionScope.name}=session.getAttribute("name");
    ${applicationScope.name}=application.getAttribute("name");
    

如果域中保存的是JavaBean对象,则可以通过EL表达式获取。因此,JavaBean不一定有setter,但一定要有getter方法。

请求参数相关内置对象

param和paramValues这两个内置对象用来接收请求参数的。
param是获取一个请求参数,paramValue是获取一组请求参数(如复选框)。这是在jsp页面接收参数所用到的。相当于request.getParameter()和request.getParameterValues().

EL隐式对象

 1、pageContext

${pageContext.response.charaterEncoding}

2,web域相关对象

 3.param和paramValues对象

在JSP页面中,经常需要获取客户端传递的请求参数,为此,EL表达式提供了param和
paramValues两个隐式对象,这两个隐式对象专门用于获取客户端访问JSP页面时传递的请求参数。接下来针对这两个对象进行讲解,具体如下。
param对象用于获取请求参数的某个值,它是Map类型,与request.getParameter()方法相同,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。param对象的语法格式比较简单,具体示例如下。

${param.num}

如果一个请求参数有多个值,可以使用paramValues对象来获取请求参数的所有值,该对象用于返回请求参数所有值组成的数组。如果要获取某个请求参数的第1个值,可以使用如下代码

${paramValues.nums [0]}

为了让读者更好地学习这两个隐式对象,接下来通过一个案例来演示param和paramValues隐式对象如何获取请求参数的值。
 

 

 4.cookie

JSTL 基础








1、何为 JSTL

  • JSTL 标签库由五个功能不同的标签库组成,分别为:核心标签库、格式标签库、SQL 标签库、XML 标签库和函数标签库;使用这些标签库之前需要在 JSP 页面使用如下声明:
	<%@taglib%>
  •  使用标签库的指令格式如下:
    // 核心标签库
    	<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
    	// 格式标签库
    	<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    	// SQL 标签库
    	<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
    	//xml标签库
    	<%@ taglib prefix="xml" uri="http://java.sun.com/jsp/jstl/xml"%>
    	//函数标签库
    	<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
    

    2、JSTL中的Core标签库

  • 核心标签库主要用于完成 JSP 页面的常用功能,包括 JSTL 的表达式标签、URL 标签、流程控制标签和循环标签,具体如下表:

1.<c:out>

该标签可以将一段文本内容或表达式的结果输出到客户端。如果<c:out>标签输出的文本内容中包含需要进行转义的特殊字符,例如>、<、&、、“等,<c:out>标签会默认对它们进行HTML编码转换后再输出。<c:out>标签有两种语法格式

语法1:没有标签体的情况

<c:out value="value"[default="defaultValue"]
[escapeXml="{true|false}"]/>


语法2:有标签体的情况

<c:out value="value"[escapeXml="[true|false}"]>defaultValue
</c:out>

 

 如果不想输出默认值,可以在客户端访问页面时传入一个参数"http:/localhost:8080/chapter07/c_out1.jsp?username=chanyeo",

 

 2.<c:if>标签

条件判断,它有两种语法格式,具体如下。
语法1:没有标签体的情况

<c:if test="testCondition" var="result"
[scope="{page|request|session|application}"]/>


语法2:有标签体的情况,在标签体中指定要输出的内容

<c:if test="testCondition" var="result"
[scope="(page|request|session|application}"]>body content

例子

3.<c:choose>标签

 Core标签库提供了<c:choose>标签,该标签用于指定多个条件选择的组合边界,它必须与<c:when>、<c:otherwise>标签一起使用。
<c:choose>标签没有属性,在它的标签体中只能嵌套一个或多个<c:when>标签和零个或一个<c:otherwise>标签,并且同一个<c:choose>标签中所有的<c:when>子标签必须出现<c:otherwise>子标签之前,其语法格式如下。

<c:choose>
Body content (<when> and <otherwise> subtags)
</c:choose>

 <c:when>标签只有一个test属性,该属性的值为布尔类型。test属性支持动态值,其值可以是一个条件表达式,如果条件表达式的值为 true,就执行这个<c:when>标签体的内容,其语法格式如下。

<c:when test="testCondition">
Body content
</c:when>


<c:otherwise>标签没有属性,它必须作为<c:choose>标签最后分支出现。当所有的<c:when>标签的test条件都不成立时,才执行和输出<c:otherwise>标签体的内容,其语法格式如下。

<c:otherwise>
condítional block
</c:otherwise>

 例子

需要传递参数

如c_choose.jsp?username=chanyeo'wife

猜你喜欢

转载自blog.csdn.net/qq_55694317/article/details/121337772
今日推荐