EL表达式/JSP标签和EL表达式

JSP标签和EL表达式

EL表达式的使用及编写和使用EL表达式的自定义函数


EL表达式 (详解)

标签: applicationsessionredirectstringjspspring
 101299人阅读 评论(62) 收藏 举报

 

EL表达式
     1、EL简介
1)语法结构
       ${expression}
2)[]与.运算符
     EL 提供.和[]两种运算符来存取数据。
     当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。
例如:
         ${user.My-Name}应当改为${user["My-Name"] }
     如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如:
         ${sessionScope.user[data]}中data 是一个变量
3)变量
     EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为
username的变量。
     因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、
Application范围查找。
     假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,
就回传null。
     属性范围在EL中的名称
         Page         PageScope
         Request         RequestScope
         Session         SessionScope
         Application     ApplicationScope
4) 1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码.
2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. 
${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组
值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话
范围内的变量.applicationScope表示应用范围的变量.
3 --<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁
止.JSP2.0中默认的启用EL语言.
             4-- EL语言可显示 逻辑表达式如${true and false}结果是false     关系表达式如${5>6} 结
果是false     算术表达式如 ${5+5} 结果是10
             5--EL中的变量搜索范围是:page request session application   点运算符(.)和"[ ]"都是
表示获取变量的值.区别是[ ]可以显示非词类的变量

2、EL隐含对象
1)与范围有关的隐含对象
与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和
applicationScope;
它们基本上就和JSP的pageContext、request、session和application一样;
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得
其他相关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:
     session.getAttribute("username") 取得username的值,
在EL中则使用下列方法
     ${sessionScope.username}
2)与输入有关的隐含对象
与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。
例如我们要取得用户的请求参数时,可以利用下列方法:
     request.getParameter(String name)
     request.getParameterValues(String name)
在EL中则可以使用param和paramValues两者来取得数据。
     ${param.name}
     ${paramValues.name}

3.其他隐含对象
1)cookie
JSTL并没有提供设定cookie的动作,
例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}     来
取得它。
2)header和headerValues
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。
另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得
这些值。
3)initParam
initParam取得设定web站点的环境参数(Context)
例:一般的方法String userid = (String)application.getInitParameter("userid");
     可以使用 ${initParam.userid}来取得名称为userid
4)pageContext
pageContext取得其他有关用户要求或页面的详细信息。
     ${pageContext.request.queryString}         取得请求的参数字符串
     ${pageContext.request.requestURL}         取得请求的URL,但不包括请求之参数字符串
     ${pageContext.request.contextPath}         服务的web application 的名称
     ${pageContext.request.method}           取得HTTP 的方法(GET、POST)
     ${pageContext.request.protocol}         取得使用的协议(HTTP/1.1、HTTP/1.0)
     ${pageContext.request.remoteUser}         取得用户名称
     ${pageContext.request.remoteAddr }         取得用户的IP 地址
     ${pageContext.session.new}             判断session 是否为新的
     ${pageContext.session.id}               取得session 的ID
     ${pageContext.servletContext.serverInfo}   取得主机端的服务信息
   4) 条件标签>
1.算术运算符有五个:+、-、*或$、/或div、%或mod
2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3.逻辑运算符有三个:&&或and、||或or、!或not
4.其它运算符有三个:Empty运算符、条件运算符、()运算符
     例:${empty param.name}、${A?B:C}、${A*(B+C)}
5) EL函数(functions)
语法:ns:function( arg1, arg2, arg3 …. argN)
其中ns为前置名称(prefix),它必须和taglib 指令的前置名称一置
       6) 补充:
<%@ taglib prefix="c" http://java.sun.com/jstl/core_rt">http://java.sun.com/jstl/core_rt" %>
FOREACH:
<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
……
</c:forEach>
OUT:
<c:out value="/${logininfo.username}"/>
c:out>将value 中的内容输出到当前位置,这里也就是把logininfo 对象的
username属性值输出到页面当前位置。
${……}是JSP2.0 中的Expression Language(EL)的语法。它定义了一个表达式,
其中的表达式可以是一个常量(如上),也可以是一个具体的表达语句(如forEach循环体中
的情况)。典型案例如下:
? ${logininfo.username}
这表明引用logininfo 对象的username 属性。我们可以通过“.”操作符引
用对象的属性,也可以用“[]”引用对象属性,如${logininfo[username]}
与${logininfo.username}达到了同样的效果。
“[]”引用方式的意义在于,如果属性名中出现了特殊字符,如“.”或者“-”,
此时就必须使用“[]”获取属性值以避免语法上的冲突(系统开发时应尽量避免
这一现象的出现)。
与之等同的JSP Script大致如下:
LoginInfo logininfo =
(LoginInfo)session.getAttribute(“logininfo”);
String username = logininfo.getUsername();
可以看到,EL大大节省了编码量。
这里引出的另外一个问题就是,EL 将从哪里找到logininfo 对象,对于
${logininfo.username}这样的表达式而言,首先会从当前页面中寻找之前是
否定义了变量logininfo,如果没有找到则依次到Request、Session、
Application 范围内寻找,直到找到为止。如果直到最后依然没有找到匹配的
变量,则返回null.
如果我们需要指定变量的寻找范围,可以在EL表达式中指定搜寻范围:
${pageScope.logininfo.username}
${requestScope.logininfo.username}
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
在Spring 中,所有逻辑处理单元返回的结果数据,都将作为Attribute 被放
置到HttpServletRequest 对象中返回(具体实现可参见Spring 源码中
org.springframework.web.servlet.view.InternalResourceView.
exposeModelAsRequestAttributes方法的实现代码),也就是说Spring
MVC 中,结果数据对象默认都是requestScope。因此,在Spring MVC 中,
以下寻址方法应慎用:
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
? ${1+2}
结果为表达式计算结果,即整数值3。
? ${i>1}
如果变量值i>1的话,将返回bool类型true。与上例比较,可以发现EL会自
动根据表达式计算结果返回不同的数据类型。
表达式的写法与java代码中的表达式编写方式大致相同。
IF / CHOOSE:
<c:if test="${var.index % 2 == 0}">
*
</c:if>
判定条件一般为一个EL表达式。
<c:if>并没有提供else子句,使用的时候可能有些不便,此时我们可以通过<c:choose>
tag来达到类似的目的:
<c:choose>
<c:when test="${var.index % 2 == 0}">
*
</c:when>
<c:otherwise>
!
</c:otherwise>
</c:choose>
类似Java 中的switch 语句,<c:choose>提供了复杂判定条件下的简化处理手法。其
中<c:when>子句类似case子句,可以出现多次。上面的代码,在奇数行时输出“*”号,
而偶数行时输出“!”。
经验:1、如果EL表达式无法解析:– <%@ page isELIgnored="false" %>

一、           JSTL

1、EL运算符>;
       2)var指定变量,并把EL运算结果赋值给该变量值为true/false;
       3)scope:指定 var变量的范围;


6、迭代标签
语法:<c:forEach items=“collection” var=“name” varStatus=“status” begin=“int“ 
end=”int” step=“int” >
           //循环体
           </c:forEach>
     说明:1)items:是集合,用EL表达式;
       2)var:变量名,存放items
       3)varStatus: 显示循环状态的变量
①index:从0开始;
                     ②count:元素位置,从1开始;
                     ③first:如果是第一个元素则显示true;
                     ④last:如果是最后一个元素则显示true;
       4)begin:循环的初始值(整型);
       5)end: 循环结束 ;
       6)step:步长,循环间隔的数值;
7、<c:otherwise>标签
     例:
如果user.wealthy值true,则显示user.wealthy is true.
<c:choose>
<c:when test="">
user.generous is true.
</c:when>
<c:when test="">
user.stingy is true.
</c:when>
<c:otherwise>
user.generous and user.stingy are false.
</c:otherwise>
</c:choose>
说明:只有当条件user.generous返回值是true时,才显示user.generous is true.
只有当条件user.stingy返回值是true时,才显示user.stingy is true.
其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and 
user.stingy are false.
由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用<c:choose>、
<c:when>和<c:otherwise>标签共同来完成了。
8、c:forTokens>标签
说明:   
items 进行循环的项目 是 无
delims 分割符 是 无
begin 开始条件 否 0
end 结束条件 否 集合中的最后一个项目
step 步长 否 1
var 代表当前项目的变量名 否 无
varStatus 显示循环状态的变量 否 无
例子:
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value=""/>
</c:forTokens>
这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,
token是循环到当前分割到的字符串。
9、<c:redirect>标签
     说明:标签将请求重新定向到另外一个页面,它有以下属性 属性 描 述 是否必须 缺省值
url url地址 是 无
context /后跟本地web应用程序的名字 否 当前应用程序
例子:
<c:redirect /'>http://www.yourname.com/login.jsp"/>
将请求重新定向到http://www.yourname.com/login.jsp页,相当于response.setRedirect
("http://www.yourname.com/login.jsp");
10、<c:param>标签
     说明:<c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性属 性 描 述 是否
必须 缺省值
name 在request参数中设置的变量名 是 无
value 在request参数中设置的变量值 否 无
例子:
<c:redirect url="login.jsp">
<c:param name="id" value="888"/>
</c:redirect>
将参数888以id为名字传递到login.jsp页面,相当于login.jsp?id=888
11、<fmt:>格式化标签
     说明:需要导入   <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt" %>
     1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>
               Value:通过EL表达式或<%new Date() %> 取的日期值;
               Pattern:输出的日期格式;                      

    2) 格式化数字<fmt:formatNumber 
value="${n}" pattern="###,###.##" />

 

JSP标签和EL表达式

   

一、pageContext对象

a) 概述

i. 它代表JSP页面的运行环境,它不仅封装了其它8大隐式对象的引用,而且它自身还是一个域对象,可以用来保存数据

ii. 作用:

1. 它本身是一个域对象。范围只是当前页面有效,它还能操作其余的3个域对象的内容

2. 获取其他8大隐式对象的引用

3. 提供了转发和包含的简洁方法

b) 获取其他对象的方法

i. getException方法返回exception隐式对象 

ii. getPage方法返回page隐式对象

iii. getRequest方法返回request隐式对象 

iv. getResponse方法返回response隐式对象 

v. getServletConfig方法返回config隐式对象

vi. getServletContext方法返回application隐式对象

vii. getSession方法返回session隐式对象 

viii. getOut方法返回out隐式对象

c) 对象的方法  针对page范围的域对象绑定、删除和获取

i. public void setAttribute(java.lang.String name,java.lang.Object value)

ii. public java.lang.Object getAttribute(java.lang.String name)

iii. public void removeAttribute(java.lang.String name)

d) 访问其他域的方法

i. public java.lang.Object getAttribute(java.lang.String name,int scope)

ii. public void setAttribute(java.lang.String name, java.lang.Object value,int scope)

iii. public void removeAttribute(java.lang.String name,int scope)

e) 代表各个域的常量(scope的取值)

i. PageContext.APPLICATION_SCOPE 放到应用中

ii. PageContext.SESSION_SCOPE  放到会话范围中

iii. PageContext.REQUEST_SCOPE 放到请求域范围中

iv. PageContext.PAGE_SCOPE  放到了pageContext自身域范围中

f) findAttribute:

i. 查找指定名称的对象(存放在域对象中)

ii. 依次从page   request session application范围内搜寻指定的参数

g) 引入和跳转到其他资源的方法

方法接收的资源如果以/开头,/代表当前wed应用

i. forward 

1. 简化和替代RequestDispatcher.forward方法

2. 例如 pageContext.forward(/2.jsp);

ii. include 

1. 简化和替代RequestDispatcher.include方法

2. 例如 pageContext.include(/2.jsp);

二、四大域对象

a) 分别为

i. pageContext(称之为page)

ii. request(称之为request)

1. 如果客户向服务器发送请求,产生的数据,用户看完就没有了,像这样的数据就存在request域像新闻数据,属于用户看完就没有的

iii. session(称之为session)

1. 如果客户向服务器发请求,产生的数据,用户用完了等一会还有用,像这样的数据就存在session域中,想购物数据,用户需要看到自己购物信息,并且等一会,还要用这个购物数据结账

iv. servletContext(称之为application)

1. 如果客户向服务器发送请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在ServletContext域中,像聊天数据

类型 JSP的内置对象 范围

PageContext pageContext page页面

HttpSession session 会话:session

ServletRequest request 请求:request

三、JavaBean

a) 概述

i. JavaBean是一个遵循特定写法的Java类,它通常具有如下特点

1. 一般类的声明都是public

2. 这个Java类必须具有一个无参的构造函数

3. 字段必须私有化

4. 私有化的字段必须通过public类型的方法暴露给其他程序,并且用方法的命名也必须遵守一定的命名的规范。

5. 一般需要实现java.io.Serializable

b) 属性

i. JavaBean的属性可以是任意类型,并且一个JavaBean可以多个字段。每个字段通常都需要具有相应的settergetter方法,setter方法称为属性修改器,getter方法成为称为属性访问器。

ii. 属性修改器必须以小写的set前缀开始,后缀属性名,并且属性名的第一个字母要改为大写,例如,name属性的修改器名称称为setNamepassword属性的修改器名称为setPassword

iii. 属性访问器通常以小写的get前缀开始,后缀属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getNamepassword属性的访问器名称为getPassword

iv. 一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也

v. 称之为只写、只读属性

vi. 注意:在JavaEE企业开发中,作用是用来封装数据。

c) JSP中使用JavaBean的动作

i. jsp:useBean

1. 作用:首先在指定的域范围中查找名称对应的对象。没有找到,创建对象,并以此名称绑到对应的域范围中。

2. 属性

a) id:域中对象的名称

b) class:域中对象的类型

c) scope:域范围。默认值是page。可选值page request session application

3. 了解如果标签有主体内容,那么主体内容只有创建对象时才会执行

ii. jsp:setProperty

1. 作用:设置属性的值。调用JavaBean中的方法(请注意,与字段无关)

2. 属性:

a) property:属性名称。去掉set后,把第一个字母变小后的名称

i. 支持通配符*:把同名的请求参数的值设到对应的属性中去。

b) name:哪个JavaBean。对应的是jsp:useBean中的id

c) value:设置的值

d) param:请求参数的名称

i. 例如

  <jsp:setProperty property="name" name="p" param="name"/>访问地址:http://localhost:8080/day08/4.jsp?name=junjun

以上代码:把请求参数name的值,设到p对象的name属性中。

String value request.getParameter("name")

p.setName(value)


3. 注:

a) 不仅能设置值,还能自动类型转换(仅限基本类型)

b) 可以匹配请求参数

iii. jsp:getProperty

1. 作用:把属性的值输出到页面上。调用对象的getter方法。

2. 属性:

a) property:属性名称。去掉get后,把第一个字母变小后的名称。

b) name:哪个JavaBean,对应的是jsp:useBean中的id

3. 注:如果一个对象的某个属性值是null,界面上显示null(这个是不好的)

例子

<jsp:useBean id="person" class="com.itheima.domain.Person"></jsp:useBean>

<jsp:setProperty property="name" name="person" value="凯凯"/>

<jsp:setProperty property="age" name="person" value="22"/>

<jsp:setProperty property="married" name="person" value="false"/>

<jsp:setProperty property="birthday" name="person" value="<%=new Date() %>"/>

<jsp:getProperty property="name" name="person"/>

<jsp:getProperty property="age" name="person"/>

<jsp:getProperty property="married" name="person"/>

<jsp:getProperty property="birthday" name="person"/>

四、开发模型

a) 模型1JSP+JavaBean

b) 模型2(MVC+三层架构)

Mmodel 模型 JavaBean

VVIEW 试图 JSP

CController 控制器 Servlet

i.原理图[转载]JSP标签和EL表达式

五、EL表达式

a) 概述

i. pression Language是表达式语言。简称EL。属于JSP技术。

ii. 在开发时就是用EL表达式代替java表达式

iii. EL基本语法:${EL表达式}

b) EL表达式的主要功能

i. 获取某个对象的值,并输出页面上

1. 运算符

a) 点运算符:${p.name}相当于调用p对象的getName方法

P对象不存在(四大域中),那就什么都不输出

比如:${p}相当域pageContextfindAttribute(p);

特点:如果一个对象是null,则什么都不输出

i. ${p.address.city}:相当于p.getAddress().getCity()

b) []运算符:点运算符能做的,[]都能做,不能做的,[]也能做

(索引或者名称不符合java名称规范的情况下)

可以这样写${p.name}===${p['name']}===${p["name"]}

2. 获得List中的元素:按照索引获取其中元素

a)  ${persons['1'].name }也可以写成

i. ${persons[1].name }

ii. ${persons[1].name }

3. 获取Map中的元素:按照指定的key值获取绑定的对象

a)  ${map.kaikai.name } ${map.[kaikai].name } ${map.[kaikai].name }

ii. 进行简单的逻辑和数学运算

iii. EL表达式中的运算符

1. 

[转载]JSP标签和EL表达式

[转载]JSP标签和EL表达式

2. Empty运算符:返回值为true false,判断一个对象是否为null或者””,如果是返回true,如果判断的是数组或集合,即使数组或集合对象不为null,但是如果集合或数组中没有一个元素,则返回true

3. EL表达式不支持字符串连接操作

4. EL的三元运算:${表达式?true时执行:false时指定}

iv. EL表达式的11隐式对象

1. pageContext:就是表示对象本身的;其余的10都是表示集合

2. pageScope:表示页面范围对象的MaPkeyString类型的名称,valueObject类型的对象。

3. requestScope代表request域中用于保存属性的Map对象

4. sessionScope代表session域中用于保存属性的Map对象

5. applicationScope代表application域中用于保存属性的Map对象

6. param:表示封装了请求参数(请求参数不重名)的Mapkey:请求参数的名称;value:请求参数的值。

7. paramValues:表示封装了请求参数(请求参数有可能重名)Mapkey:请求参数的名称;vaue:请求参数的值数组。

8. header:表示封装了请求消息头的Mapkey:请求头名称;value:头对应的值

9.  headerValues:表示封装了请求消息头的Mapkey:请求头名称;value:头值数组。

10. cookie:表示封装了cookieMapkey:是cookiename属性;valueCookie对象本身。

11. initParam:表示封装了初始化参数(web.xml context-param)的Mapkey:参数名称;value:参数值

v. 调用普通java类的静态方法(自定义EL函数,也就是自定义标签的步骤)

1. 定义一个类,提供静态的方法

package com.itheima.domain;

 

public class StringUtil {

public static String toUpperCase(String str){

return str.toUpperCase();

}

}

2. WEB-INF目录下,建立一个扩展名为tld(Tag Library Definition)xml文件。(参考Tomcat中的例子)

<?xml version="1.0" encoding="UTF-8"?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

    version="2.0">

    <tlib-version>1.0</tlib-version>

    <short-name>myfn</short-name>

    <uri>http://www.itheima.com/jsp/heima16/fn</uri>

    <function>

        <name>toUppercase</name>

<function-class>com.itheima.StringUtil</function-class>

<function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>

</function>

</taglib>

3. 可选步骤可选步骤(前提是把tld文件放到了WEB-INF目录或类路径下)。

配置web.xml,将tld文件和tld中的uri进行对应。

  <jsp-config>

<taglib>

<taglib-uri>http://www.itheima.com/jsp/heima16/fn</taglib-uri>

<taglib-location>/WEB-INF/myfn.tld</taglib-location>

</taglib>

  </jsp-config>

4. JSP中使用先使用指令taglib引入,再使用。

<%@ taglib uri="http://www.itheima.com/jsp/heima16/fn" prefix="myfn"%>

   <body>

<%

pageContext.setAttribute("p","ppppp");

%>

${myfn:toUppercase(p) }

  </body>

 

EL表达式的使用及编写和使用EL表达式的自定义函数

摘要  EL表达式的作用,获取数据,执行运算,获取Web开发常用对象,执行Java方法,这里重点说自定义函数

什么是EL表达式

Expression Language————表达式语言


EL表达式的作用

获取数据

执行运算

获取Web开发常用对象

执行Java方法


获取数据:

<%
    User user = new User("旺财""幸福路", 18);
    pageContext.setAttribute("pageContextUser", user);
    request.setAttribute("requestUser", user);
    session.setAttribute("sessionUser", user);
    application.setAttribute("applicationUser", user);
%>

<h2>获取page域对象</h2>
${pageContextUser.name}----${pageContextUser.addr}-----${pageContextUser.age}
<br/>
${pageScope.pageContextUser.name}----${pageScope.pageContextUser.addr}-----${pageScope.pageContextUser.age}
<hr />

<h2>获取request域对象</h2>
${requestUser.name}----${requestUser.addr}-----${requestUser.age}
<br/>
${requestScope.requestUser.name}----${requestScope.requestUser.addr}-----${requestScope.requestUser.age}
<hr />

<h2>获取session域对象</h2>
${sessionUser.name}----${sessionUser.addr}-----${sessionUser.age}
<br/>
${sessionScope.sessionUser.name}----${sessionScope.sessionUser.addr}-----${sessionScope.sessionUser.age}
<hr />

<h2>获取application域对象</h2>
${applicationUser.name}----${applicationUser.addr}-----${applicationUser.age}
<br/>
${applicationScope.applicationUser.name}----${applicationScope.applicationUser.addr}-----${applicationScope.applicationUser.age}
<hr />
<!-- 
    EL表达式获取数据的规律:
    1.EL表达式只能获取四大域对象的数据
    2.在没有指定获取哪个域的时候从小域到大域开始遍历获取
    3.当然也可以指定域:pageScope,requestScope,sessionScope,applicationScope
    4.所以如果把对象存在sessionScope或者applicationScope那么还是指定一下域,这样子EL表达式就不用遍历了
 -->
 
<hr />
<%
User user2 = new User("小强""健康街", 28);
User[] users  = {user,user2};
List<User> userList = new ArrayList<User>();
userList.add(user);
userList.add(user2);
pageContext.setAttribute("arrayUser", users);
pageContext.setAttribute("listUser", userList);
 %>
 
<h2>利用.和[]获取数组中的对象中的值</h2>
${pageScope.arrayUser[0].name }---${pageScope.arrayUser[0].addr }---${pageScope.arrayUser[0].age }
<br/>
${pageScope.arrayUser[1].name }---${pageScope.arrayUser[1].addr }---${pageScope.arrayUser[1].age }
<hr />

<h2>利用.和[]获取集合中的对象中的值</h2>
${pageScope.listUser[0].name }---${pageScope.listUser[0].addr }---${pageScope.listUser[0].age }
<br/>
${pageScope.listUser[1].name }---${pageScope.listUser[1].addr }---${pageScope.listUser[1].age }
<hr />

<h2>利用[]获取对象中的值</h2>
${pageScope.listUser[0]["name"] }---${pageScope.listUser[0]["addr"] }---${pageScope.listUser[0]["age"] }
<br/>
${pageScope.listUser[1]["name"] }---${pageScope.listUser[1]["addr"] }---${pageScope.listUser[1]["age"] }

<hr />
<!-- 
    EL表达式获取数据时.和[]的区别
    在集合或者数组中可以使用[]输入下标来直接获取值
    而.后面不能跟有数字,所以不能作为下标的获取标识来使用
    []中跟的值要么是数字,要么要用""引起来
    .后面跟的东西既不能是数字,也不能用""引起来
 -->
<hr />


EL表达式获取在Web开发中常用的对象

EL表达式的11个隐式对象

pageContext

pageScope

requestScope

SessionScope

ApplicationScope

cookie

initParam

param

paramValues

header

headerValues


注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]

      ${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}



EL执行运算

${3+2*8+5/8 }


简易版自定义函数编写配置方法:

    EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法

    在EL表达式中调用的只能是Java类的静态方法

    这个Java类的静态方法需要在TLD(Tagliary Definition)文件中描述,才可以被EL表达式调用。

    EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。

1.编写调用自定义函数的类,编写类中具体实现的静态方法

2.编写tld文件在web-inf目录下

3.jsp中使用taglib指令导入自定义函数库

4.使用

5.使用图解



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值