JAVA Web学习(17___第11章EL(表达式语言)

第11章EL(表达式语言)

11.1 概述

11.1.1 EL表达式基本语法

    ${experssion}

参数说明

experssion 用于指定输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。

11.1.2 EL的特点

  • (1)EL语法简单,方便
  • (2)EL可以与JSTL结合使用,也可以和JavaScript语句结合使用。
  • (3)EL可以自动转换类型。
  • (4)EL既可以访问一般的变量,也可以访问JavaBean中的属性和嵌套属性、集合对象。
  • (5)EL中可以执行算术运算、逻辑运算、关系运算和条件运算等。
  • (6)EL中可以获得命名空间(PageContext对象,他是页面中所有其他内置对象的最大范围的集成对象,通过它可以访问其他内置对象)。
  • (7)EL中在进行除法运算时,如果除数是0,则返回无穷大Infinity,而不返回错误。
  • (8)EL中可以访问JSP的作用域(request、session、application以及page)
  • (9)扩展函数可以与Java类的静态方法进行映射。

11.2与低版本的环境兼容----禁用EL

11.2.1 使用斜杠\符号

    \${experssion}

11.2.2 使用page指令

isELIgnored=true

    <%@page isELIgnored="true"%>

该方法适合禁用一个jsp页面中的EL。

11.2.3 在web.xml中配置<el-igonred>元素

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-igonred>true</el-igonred>//此处true表示禁用EL ,false表示使用EL
    </jsp-property-group>
</jsp-config>

11.3 保留关键字

and eq gt
instanceof div or
le false empty
not llt ge

11.4 EL的运算符及优先级

序号 优先权
1 []
2 0
3 -(负)、not、!、empty
4 *、/、div、%、mod
5 +、-(减)
6 <、>、<=、>=、lt、gt、le、ge
7 ==、!-、eq、ne
8 &&、and
9 ||、or
10 ${A?B:C}

11.4.1 通过EL访问数据

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    
    <title>EL表达式</title>
    
  </head>
  
  <body>
   <%
         String[] arr = {"Java web从入门到精通","Java开发规范手册","Java网络编程"};
         request.setAttribute("book",arr);    //将数组保存到request对象中
     %>
     <%
         String[] arr1 = (String[])request.getAttribute("book");    //获取保存到request范围内的变量
         //通过循环和EL输出一维数组的内容
             for(int i = 0;i < arr1.length;i++){
             request.setAttribute("requestI", i);
         
     %>
     ${ requestI }: ${ book[requestI] }<br> <!-- 输出数组中第i个元素 -->
     <%
         }
     %>
  </body>
</html>

11.4.2 在EL中进行算术运算

运算符 功能 示例 结果
+ ${19+1} 20
- ${30-10} 20
* ${2*3} 6
/或div {9/3或{9 div 3}} 3
%或mod 求余 {17%3}或{17 mod 3} 2

11.4.3 在EL中判断对象是否为空

    ${empty expression}

11.4.4 在EL中进行逻辑关系运算

1.关系运算符

运算符 功能 示例 结果
==或 eq 等于 ${10==10}或${10 eq 10} true
!= 或 ne 不等于 ${10!=10}或${10 ne 10} false
<或 lt 小于 ${7<6}或${7 lt 6} false
>或 gt 大于 ${7>6}或${7 gt 6} true
<= 或 le 小于等于 ${7<=5}或${7 le 6} false
>= 或 ge 大于等于 ${7>= 6} 或${7 ge 6} true

2.逻辑运算符

运算符 功能 示例 结果
&& 或 and ${true && false} 或${true and false} false
|| 或 or ${true || false} 或${true or false} true
!或 not ${!true} 或${not true} false

11.4.5 在EL中进行条件运算

和java三目运算法一样

    ${条件表达式?表达式1:表达式2}

11.5 EL的隐含对象

11.5.1 页面上下文对象(部分示例)

    ${pageContext.request}
    ${pageContext.request.serverPort}//获取端口,返回8080
    ${pageContext.response.contentType}//获取响应的内容类型,如返回"text/html;charset=UTF-8"
    ${pageContext.response.bufferSize } //获取bufferSize
    

11.5.2 访问作用域范围的隐含对象

在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope、requestScope、sessionScope和applicationScope。应用这4个隐含对象指定所要查找的标识符的作用域后,系统 将不再按照默认的顺序(page、request、session以及application)来查找相应的标识符。

  • (1)pageScope隐含对象

该对象用于返回包含page(页面)范围内的属性值的集合,返回值为java.util.Map对象。

例:通过pageScope隐含对象读取page范围内的JavaBean的属性值。

①创建一个名称为UserInfo的JavaBean,并将其保存到com.wgh包中。在该JavaBean中包含一个name属性,具体代码如下:


  public class UserInfo {
      private String name = "";    //用户名
      /**
       * 函数名称:setName
       * 函数作用:name属性对应的set()方法
       * @param name
       */
     public void setName(String name) {
         this.name = name;
     }
     /**
     * 函数名称:getName
     * 函数作用:name属性对应的get()方法
      * @return   name
      */
     public String getName() {
         return name;
     }
 }

②编写index_pageScope.jsp文件,在该文件中应用<jsp:useBean>动作标识,创建一个page范围内的JavaBean实例,并设置name属性的值为wgh;同时在<body>标签中应用pageScope隐含对象获取该JavaBean实例的name属性值,index_pageScope.jsp文件中的代码如下:

  <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <jsp:useBean id="user" scope="page" class="com.wgh.UserInfo" type="com.wgh.UserInfo">
      <jsp:setProperty name="user" property="name" value="java web从入门到精通"></jsp:setProperty>
 </jsp:useBean>
  <html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>通过pageScope隐含对象读取page范围内的JavaBean的属性值</title>
 </head>
 <body>
     ${pageScope.user.name }
     <br>
 </body>
 </html>

运行结果:

  • (2)requestScope隐含对象

requestScope隐含对象用于返回包含request请求范围内的属性值的集合,返回值为java.util.Map对象。

例:要获取保存在request范围内的userName变量,可以使用一下代码:


 <%
     request.setAttribute("userName","mr");    //定义request范围内的变量userName
 %>
 ${requestScope.userName}
  • (3)sessionScope隐含对象

sessionScope隐含对象用来返回包含session会话范围内的属性的集合,返回值为java.util.Map对象。


 <%
     session.setAttribute("manager","mr");    //定义session范围内的变量marager
 %>
 ${sessionScope.manager}
  • (4)applicationScope隐含对象

applicationScope隐含对象用于返回包含application应用范围内的属性值的集合,返回值为java.util.Map对象。

例:要获取保存在application范围内的message变量,可以使用下面的代码:


1 <%
2     application.setAttribute("message","欢迎学习java");    //定义application范围内的变量message
3 %>
4 ${applicationScope.message}

11.5.3 访问环境信息的隐含对象

    1. param对象
      如输入表单,当表单提交后,要获取name文本框的值
    <input name="name" type="text">

el获取

    ${param.name}

如果文本框可以输入中文,那么在应用EL输出其内容钱,还需要应用“request.setCharacterEncoding("GN18030");”否则会乱码

    1. paramValues对象
      多选请求
<tr>
    <td class="label">爱好:</td>
    <td class="controler">
        <input type="checkbox" name="favorite" value="nba"> NBA &nbsp;  //favorite
        <input type="checkbox" name="favorite" value="music"> 音乐 &nbsp; //favorite
        <input type="checkbox" name="favorite" value="movie"> 电影 &nbsp;  //favorite
        <input type="checkbox" name="favorite" value="internet"> 上网 &nbsp; //favorite
    </td>
</tr>

<% request.setCharacterEncoding("GB18030");%>
爱好为:${paramValues.affect[0]}${paramValues.affect[1]}${paramValues.affect[2]}${paramValues.affect[3]}

注意在应用 param和 paramValues对象时,如果指定的参数不存在,则返回空的字符串,而不是返回null。

    1. header和headerValues对象
${header.connection} 或者${header["connection"]}
    1. initParam对象
      获取web应用初始化参数的值
      如web.xml对象
<web-app>
<context-param>
<param-name>encoding</param-name >
<param-value>utf-8</param-value >
</context-param>
</web-app>

jsp中获取encoding的值

<body>
    initParam(初始化参数)encoding的值是:${initParam.encoding}
    <!-- 返回utf-8 -->
</body>
    1. cookie对象
<!--cookie-1.jsp-->
<%@page contentType="text/html;charset=utf-8" %>
<html>
<body>
<%
    response.addCookie(new Cookie("username","Make"));
%>
<a href="cookie-2.jsp"/>跳转cookie-2.jsp页面
</body>
</html>
<!--cookie-2.jsp-->
<%@ page contentType="text/html;charset=utf-8" %>
<html>
<body>
<h1>获得 cookie 对象</h1>
<hr>
<h3>${cookie.username.value}</h3>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容