美文网首页
JAVA Web学习(17___第11章EL(表达式语言)

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

作者: 岁月静好浅笑安然 | 来源:发表于2019-08-29 17:42 被阅读0次

    第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>
    

    相关文章

      网友评论

          本文标题:JAVA Web学习(17___第11章EL(表达式语言)

          本文链接:https://www.haomeiwen.com/subject/igqwectx.html