zoukankan      html  css  js  c++  java
  • java Web EL表达式详解

    1.EL表达式的简介

      EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护。最基本的语法是${express}。

    2.获取并显示数据

    从四个域中通过key找到简单数据并显示出来。表达式代码:

    ${name}      <!-- 类比于<%=pageContext.findAttribute("name") %> -->  

    四个域的寻找顺序是 page,request,session,application。用EL表达式还有个好处,若找不到键值为name的属性值,不会显示null,会显示空字符串。若是确定键值是在request域中,则可以用如下EL表达式代码:

    ${requestScope.name} 

    从存储在session域中的封装了数据的JavaBean中得到对象的某个属性值并显示出来。

    <%  
        Person p = new Person();  
        Address address = new Address();  
        address.setCity("浙江");//Adress类中有个私有String属性为city  
        p.setName("mike");//Person类中有私有String属性为name  
        p.setAddress(address);//Person类中有私有Adress属性为address  
        session.setAttribute("person", p);//存入sessionScope  
    %>  
    ${person.name}<!-- 从session域中找到键值为person的对象,然后再person对象中找到name属性 -->  这种写法是按照page request session application域依次取的,如果page域中有则返回page域中的值,如果没有则取request域中找,以此类推
    ${session.person.name} 这样写是精准定位到从session中取

    ${person.address.city}
    ${session.person.address.city}
    ${person['name']}<!-- 也可以用[]方式 -->  
    ${person['address']['city']}  

    除了用.方式获得对象的属性,也可以用[ ]方式,当然遇到键值名字中有-的,如mike-abc,或者key值为数字开头,则只能用[ ]方式。

    从List集合对象中获取某个值并显示。

    <%  
        List<Person> list = new ArrayList<Person>();  
        list.add(new Person("kkk"));  
        list.add(new Person("sss"));  
        list.add(new Person("jjj"));  
        application.setAttribute("list_1", list);  
    %>  
    ${list_1[1].name }  


    从Map中获取某个值并显示。

    <%  
        Map map = new HashMap();  
        map.put("a", new Person("aaa"));  
        map.put("b", new Person("bbb"));  
        map.put("1", new Person("ccc"));  
        request.setAttribute("map", map);  
    %>  
    ${map['1'].name }<!-- 是数字的话只能用括号,就算put进去的key值是字符串类型-->  
    ${map.a.name }  

    3.EL表达式的内置对象

    分类

    内置对象名称

    描述

    作用域

    pageScope

    page作用域

    requestScope

    request作用域

    sessionScope

    session作用域

    applicationScope

    application作用域

    请求参数

    param

    获得一个参数

      eg:${param.xxx}

    paramValues

    获得一组参数

    请求头

    header

    获得一个请求头

      eg:${header.xxx}

    headerValues

    获得一组请求头

    JSP上下文对象

    pageContext

    可以获取JSP九大内置对象(和jsp中的pageContext的hash值一样,证明应是同一对象)

      eg:获取request对象  ${pageContext.request)

    全局初始化参数

    initParam

     获取web.xml中<context-param>内的参数,

      eg:${ initParam.xxx}

    cookie

    cookie

     获取cookie信息

      eg:${cookie.JSESSIONID.value }就是获取sessionId

    简单示例(与java代码做对比):

    <body>
      param <h1>java代码</h1> username = <%=request.getParameter("username")%> <br/> city = <%=request.getParameter("city") %><hr/> password = <%=request.getParameter("password") %><hr/> <h1>el表达式</h1> username = ${param.username } <br/> city = ${param.city } <br/> password = ${param.password } <hr/>
      header
    <h1>java代码</h1> Accept = <%=request.getHeader("Accept") %> <br/> User-Agent = <%=request.getHeader("User-Agent") %> <br/> <h1>el表达式</h1> Accept = ${header.Accept } <br/> User-Agent = ${header["User-Agent"] } <br/>
      cookie
    <% Cookie cookie = new Cookie("meinv", "gaoyuanyuan"); response.addCookie(cookie); %> <!-- 需求: 获取浏览器给服务器传递的cookie信息 --> <h1>java代码</h1> <% Cookie[] cookieArr = request.getCookies(); if(cookieArr!=null) { for(Cookie coo : cookieArr) { if("meinv".equals(coo.getName())) { String cookieName = coo.getName(); String cookieValue = coo.getValue(); out.println("java : " + cookieName + "===" + cookieValue); } } } %> <h1>el表达式</h1> cookie对象: ${cookie.meinv } <br/> cookie.name ${cookie.meinv.name } <br/> cookie.value ${cookie.meinv.value } <br/>
      pageContext
    <!-- 需求: 获取项目路径 --> <h1>java代码</h1> request.getContextPath() : <%=request.getContextPath() %> <br/> application.getContextPath() : <%=application.getContextPath() %> <br/> pageContext.getServletContext().getContextPath() : <%=pageContext.getServletContext().getContextPath() %> <br/> ((HttpServletRequest)pageContext.getRequest()).getContextPath() :::: <%=((HttpServletRequest)pageContext.getRequest()).getContextPath() %> <hr/> <h1>el表达式</h1> pageContext.request.contextPath === ${pageContext.request.contextPath } <br/> pageContext.servletContext.contextPath === ${pageContext.servletContext.contextPath } </body>

    4.用EL表达式执行运算

      使用el进行简单的运算的时候,如果指定的范围中的key不存在,这时就不会去使用这个值计算,但是存在的依然会进行运算

      可以使用empty 验证某个容器或者变量是否为null

        格式: ${ empty 集合或变量等}

          如果集合元素的个数为0 或者 变量为null 则返回true; 否则 返回false.

        常用方式:

          el中三元运算符:

           ${empty 对象 ? 表达式1 : 表达式2 }

           ${not empty 对象 ? 表达式1 : 表达式2 }

  • 相关阅读:
    JavaScript 获取来源地址
    JavaScript 调试&显示变量
    JavaScript Math对象
    JavaScript 封闭函数
    常见泛型委托
    使用BindingSource绑定数据库
    Case Reply
    RSS订阅
    ADO.NET
    泛型的优点
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9242772.html
Copyright © 2011-2022 走看看