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

2019-08-29  本文已影响0人  岁月静好浅笑安然

第11章EL(表达式语言)

11.1 概述

11.1.1 EL表达式基本语法

    ${experssion}

参数说明

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

11.1.2 EL的特点

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)来查找相应的标识符。

该对象用于返回包含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>

运行结果:

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

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


 <%
     request.setAttribute("userName","mr");    //定义request范围内的变量userName
 %>
 ${requestScope.userName}

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


 <%
     session.setAttribute("manager","mr");    //定义session范围内的变量marager
 %>
 ${sessionScope.manager}

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

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


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

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

    <input name="name" type="text">

el获取

    ${param.name}

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

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

${header.connection} 或者${header["connection"]}
<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>
<!--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>
上一篇下一篇

猜你喜欢

热点阅读