栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaWeb详解(第五篇)之EL表达式简介

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaWeb详解(第五篇)之EL表达式简介

JavaWeb详解(第五篇)之EL表达式简介 1、EL表达式概述 1.1、什么是EL表达式

    EL是JSP表达式语言,全称是expression Language(EL)。 EL表达式使用"${}"表示,用来更方便的读取对象!

1.2、为什么要使用EL表达式?

EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。EL 表达式在输出数据的时候, 要比 jsp 的表达式脚本要简洁很多 。

EL具有如下特点:

  • 可得到PageContext属性值

  • 可直接访问JSP的内置对象,如page,request, session,application等

  • 运算符丰富,有关系运算符、逻辑运算符、算术运算符等

  • 扩展函数可与JAVA类的静态方法对应

使用案例:

1)新建一个e.jsp

<%@ page contentType="text/html;charset=GBK" language="java"%>



el.jsp


    el.jsp
    <%
        request.setAttribute("key", "request");
        session.setAttribute("key", "session");
        pageContext.setAttribute("key", "pageContext");
    %>
    使用jsp表达式获取:<%=pageContext.getAttribute("key") %>
使用jsp表达式获取不存在的属性:<%=pageContext.getAttribute("key1") %>
使用el表达式:${key}
使用el表达式获取不存在的属性:${key1}

2)案例效果:

注:EL 表达式在输出 null 值的时候, 输出的是空串。 jsp 表达式脚本输出 null 值的时候, 输出的是 null 字符串。

 3)编译后的部分源码

out.write("    使用jsp表达式获取:");
out.print(pageContext.getAttribute("key") );
out.write("
rn"); out.write(" 使用jsp表达式获取不存在的属性:"); out.print(pageContext.getAttribute("key1") ); out.write("
rn"); out.write(" 使用el表达式:"); //对EL表达式方法调用的支持 out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryevaluate("${key}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null)); out.write("
rn"); out.write(" 使用el表达式获取不存在的属性:"); out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryevaluate("${key1}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
1.3、EL表达式语法

    基本语法:

${表达式}

${"hello world"} //输出字符串常量
${ str }      //输出字符串变量str的值
${ 3 + 2 }  //输出3+2的结果
${ user.name } //输出user对象的name属性
${ user["name"] } //同上
${sessionScope["user"].name } //同上
2、EL表达式的使用

    EL表达式主要是输出域对象的数据。当四个域中都有相同的 key 的数据的时候, EL 表达式会按照四个域的从小到大的顺序去进行搜索, 找到就输出。

    在前面我们已经体验过${key}的使用了。对于没有指定范围的JSP容器会先从page范围找。假如找不到,再依序到request、session、application范围查找顺序(优先级:pageContext>request>session>application),此过程中找到了变量将不再找下去。如果没有找到,自动将 null 转成“”。

    那如果我们想要获取指定域中的数据呢?

    其实EL隐含了11个对象,它们分别是:

1)与域有关的隐含对象

隐含对象类型说明
PageScopejava.util.Map取得Page范围的属性名称所对应的值
RequestScopejava.util.Map取得Request范围的属性名称所对应值
sessionScopejava.util.Map取得Session范围的属性名称所对应的值
applicationScopejava.util.Map取得Application范围的属性名称所的值

2)与输入有关的隐含对象

隐含对象类型说明
paramjava.util.Map如同ServletRequest.getParameter(String name)回传String类型的值
paramValuesjava.util.Map如同ServletRequest.getParameterValues(String name)。回传String []类型的值

3)其他隐含对象

隐含对象类型说明
headerjava.util.Map如同ServletRequest.getHeader(String name)回传String 类型的值
headerValuesjava.util.Map如同ServletRequest.getHeaders(String name)。回传String []类型的值
cookiejava.util.Map如同HttpServletRequest.getcookies( )
initParamjava.util.Map如同ServletContext.getInitParameter(String name)。回传String 类型的值
PageContextjavax.servlet.ServletContext表示此JSP页面上下文
2.1、获取域对象数据

    与范围有关的隐含对象,都是Map类型的。通过${域对象.key}获取

使用案例:

<%@ page contentType="text/html;charset=GBK" language="java"%>



el.jsp


    el.jsp
    <%
        request.setAttribute("key", "request");
        session.setAttribute("key", "session");
        pageContext.setAttribute("key", "pageContext");
    %>
    以前使用jsp表达式获取指定域对象的值:<%=session.getAttribute("key") %>
使用el表达式获取指定域对象的值:${sessionScope.key}
2.2、获取输入或其他有关的隐含对象 2.2.1、获取输入有关的隐含对象
以前在JSP中获得用户的请求参数:
• request.getParameter(String name)
• request.getParameterValues(String name)
在EL中则可以使用param和paramValues
• ${param.name}
• ${paramValues.name}
2.2.2、其他有关的隐含对象

    
  • ${pageContext.request }
  • ${pageContext.response }
  • ${pageContext.page }
  • 请求的参数:${pageContext.request.queryString }
  • 请求的URL:${pageContext.request.requestURL }
  • WEB 应用的名字${pageContext.request.contextPath }
  • 请求的方式:${pageContext.request.method }
  • 使用的协议:${pageContext.request.protocol }
  • 用户的名字:${pageContext.request.remoteUser }
  • 获取用户的IP地址:${pageContext.request.remoteAddr }
  • <%--
  • 判断session 是否是新的:${pageContext.session.new }
  • --%>
  • 获得 session 的 id:${pageContext.session.id }
  • 获取主机信息:${pageContext.servletContext.serverInfo }
  • 2.3、获取JavaBean的属性

        使用EL表达式输出 Bean 的普通属性、数组属性、List 集合属性、 map 集合属性。

    使用案例:

    1)新建一个Person类

    package com.cn.domain;
    
    import java.util.List;
    import java.util.Map;
    
    public class Person {
    
    	private String name;
    	private String[] phones;
    	private List cities;
    	private Map map;
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String[] getPhones() {
    		return phones;
    	}
    	public void setPhones(String[] phones) {
    		this.phones = phones;
    	}
    	public List getCities() {
    		return cities;
    	}
    	public void setCities(List cities) {
    		this.cities = cities;
    	}
    	public Map getMap() {
    		return map;
    	}
    	public void setMap(Map map) {
    		this.map = map;
    	}
    	
    }

    2)el.jsp

    <%@page import="java.util.*"%>
    <%@ page contentType="text/html;charset=GBK" language="java"%>
    
    
    
    
    el.jsp
    
    
        el.jsp
        <%-- 设置JavaBean属性--%>
        
        <%
    	    person.setName("mjx");
    	    person.setPhones(new String[]{"18877777777","1876666666","18655555555"});
    	    List cities = new ArrayList();
    	    cities.add("北京");
    	    cities.add("上海");
    	    cities.add("深圳");
    	    person.setCities(cities);
    	    Mapmap = new HashMap<>();
    	    map.put("key1","value1");
    	    map.put("key2","value2");
    	    map.put("key3","value3");
    	    person.setMap(map);
        %>
        以前在jsp中获取对象JavaBean(String)属性:<%=person.getName() %>
    以前在jsp中获取对象JavaBean(String[])属性:<%=person.getPhones()[0] %>
    以前在jsp中获取对象JavaBean(List)属性:<%=person.getCities().get(0) %>
    以前在jsp中获取对象JavaBean(Map)属性:<%=person.getMap().get("key1") %>
    使用el表达式获取对象属性:${person.name}
    使用el表达式获取对象属性:${person.phones[0]}
    使用el表达式获取对象属性:${person.cities[0]}
    使用el表达式获取对象属性:${person.map.key1}

    3)案例效果

    2.4、EL 表达式的运算符

     EL运算符分为四大类:

        1)EL 算术运算符;

        2)EL 关系运算符;

        3)EL 逻辑运算符;

        4)EL 其他运算符;

    2.4.1、EL 算术运算符
    算数运算符说 明范 例结果
    +加法${ 12 + 18 }30
    -减法${ 18 - 8 }10
    *乘法${ 12 * 12 }144
    / 或 div除法${ 144 / 12 } 或 ${ 144 div 12 }12
    % 或 mod取模${ 144 % 10 } 或 ${ 144 mod 10 }4
    2.4.2、EL 关系运算符
    关系运算符说 明范 例结果
    == 或 eq等于${ 5 == 5 } 或 ${ 5 eq 5 }true
    != 或 ne不等于${ 5 !=5 } 或 ${ 5 ne 5 }false
    < 或 lt小于${ 3 < 5 } 或 ${ 3 lt 5 }true
    > 或 gt大于${ 2 > 10 } 或 ${ 2 gt 10 }false
    <= 或 le小于等于${ 5 <= 12 } 或 ${ 5 le 12 }true
    >= 或 ge大于等于${ 3 >= 5 } 或 ${ 3 ge 5 }false
    2.4.3、EL 逻辑运算符
    逻辑运算符说 明范 例结果
    && 或 and与运算${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 }false
    || 或 or或运算${ 12 == 12 || 12 < 11 } 或 ${ 12 == 12 or 12 < 11 }true
    ! 或 not取反运算${ !true } 或 ${not true }false
    2.4.4、EL 其他运算符
    运算符说 明范 例结果
    empty验证运算符${empty null}或者${empty “”}true
    表达式 1? 表达式 2: 表达式 3三元运算${ 1 == 1 ? "对":"错" }
    .“.”点运算obj.key
    [][]中括号运算符map['a.a']

    使用案例:

    <%@page import="java.util.*"%>
    <%@ page contentType="text/html;charset=GBK" language="java"%>
    
    
    
    
    el.jsp
    
    
        el.jsp
        <%-- 设置JavaBean属性--%>
        
        <%
    	    person.setName("mjx");
    	    person.setPhones(new String[]{"18877777777","1876666666","18655555555"});
    	    List cities = new ArrayList();
    	    cities.add("北京");
    	    cities.add("上海");
    	    cities.add("深圳");
    	    person.setCities(cities);
    	    Mapmap = new HashMap<>();
    	    map.put("key1","value1");
    	    map.put("key2","value2");
    	    map.put("key3","value3");
    	    person.setMap(map);
        %>
        算数运算符:${5+5}
    关系运算符:${6>1} 或 ${6 gt 1}
    逻辑运算符:${!true} 或 ${not true}
    验证运算符:${empty null}
    三元运算符:${ 1 == 1 ? "对":"错" }
    点运算符和中括号运算符:${person.map['key1']}

    案例效果:

     

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/439537.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号