• Jsp中EL表达式的使用


    林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka  

    1、什么是EL

            ELJSP表达式语言,全称是ExpressionLanguage,使用EL的目的是简化在JSP中訪问变量的方式。简单静态HTMLJava代码的耦合。


    以下来看看一个样例:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <%
    String a=request.getParameter("a");
    String b=request.getParameter("b");
    out.println("a+b="+(Integer.parseInt(a)+Integer.parseInt(b)));
     %>
    </body>
    </html>

    以下用EL来写:
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
     ${param.a}+${param.b}=${param.a+param.b}
    </body>
    </html>

    代码相对原本少了非常多,并且非常明了。


    2、JSP EL 表达式用于以下情形

    静态文本
    标准标签和自己定义标签
    安装支持Servlet2.4/JSP2.0Container

    3、基本的语法格式

    ${ EL Expression}

    演示样例:
    ${ “Helloworld” }  //输出字符串常量
    ${ str//输出字符串变量str的值
    ${ 3 + 2 }  //输出3+2的结果
    ${ user.name} //输出user对象的name属性
    ${user[“name”] }  //同上
    ${ sessionScope[“user”].name } //同上
    ${user.name}
    訪问对象usergetName()方法以得到name成员的值。

    ${list[1]}
    訪问list对象的第二项。
    ${map[“key”]}
    訪问map指定键的值。
    再来看个样例

    EL的语法非常easy。他最大的特点就是使用上非常方便
    例:

    ${sessionScope.user.sex}
    全部EL都是以 ${ 为起始、以} 为结尾的。


    上述EL范例的意思是:从Session取得用户的性别。假设使用之前JSP代码的写法例如以下:

    <% User user = (User)session.getAttribute("user");
     String sex = user.getSex( ); %>
    两者相比較之下,能够发现EL的语法比传统JSP代码更为方便、简洁。

    EL提供 . 和 [ ] 两种运算符来存取数据,[ ]能够訪问集合或者是数组的元素、Bean的属性。下列两者所代表的意思是一样的。可是须要保证要取得对象的那个的属性有对应的setXxx()和getXxx()方法才行。

    例:

    ${sessionScope.user.sex}
    等于

    ${sessionScope.user["sex"]}

    . 和 [ ] 也能够同一时候混合使用,例如以下:

    ${sessionScope.shoppingCart[0].price}
    返回结果为shoppingCart中第一项物品的价格。

    4、“.”与”[ ]”的同样点和区别

    都能够訪问对象有属性。
    区别:
    当属性的名字包括有空格,点号等复杂符号时。使用”.”来訪问对象有属性将会出现异常

    5、操作符

    算术操作符(+,-,*,/,%)
    逻辑操作符(&&,||,!and,or,not)
    XML操作符
    lt  <
    le  <=
    gt   >
    ge  >=
    比較操作符(>,>=,<,<=,==,!==)—能够自己主动转换数据类型
    空操作符(empty)//当值为null时返回true

    EL的算术运算符和Java中的运算符的大致同样。优先级也同样。

    注意:'+' 运算符不会连接字符串了,他仅仅用于加法运算。

    EL关系运算符有以下六个运算符

    关系运算符      说明                范例             结果
    = = 或 eq   |    等于   |${ 5 = = 5 } 或 ${ 5 eq 5 } | true
    != 或 ne    |   不等于 |${ 5 != 5 } 或 ${ 5 ne 5 } | false
    < 或 lt     |   小于    |${ 3 < 5 }或 ${ 3 lt 5 }    | true
    > 或 gt     |   大于    |${ 3 > 5 }或 ${ 3 gt 5 }    | false
    <= 或 le    | 小于等于 |${ 3 <= 5 }或 ${ 3 le 5 }   | true
    >= 或 ge    | 大于等于 |${ 3 >= 5 }或 ${ 3 ge 5 }   | false


    6、集合訪问

    数组訪问

      ${}   //如request.getAttribute(“name”);

    List訪问
    Map訪问

    7、隐式对象

    JSP 表达式语言定义了一组隐式对象,当中很多对象在 JSP scriplet 和表达式中可用:





    此外,还提供几个隐式对象,同意对以下对象进行简易訪问:


    术语定义

    param

    将请求參数名称映射到单个字符串參数值(通过调用 ServletRequest.getParameter (String name) 获得)。

    getParameter (String) 方法返回带有特定名称的參数。表达式 $(param.name) 相当于 request.getParameter (name)。

    paramValues

    将请求參数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。

    它与 param 隐式对象非常相似。但它检索一个字符串数组而不是单个值。

    表达式 ${paramvalues.name) 相当于 request.getParamterValues(name)。

    header

    将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。

    表达式 ${header.name} 相当于 request.getHeader(name)。

    headerValues

    将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常相似。表达式 ${headerValues.name} 相当于 request.getHeaderValues(name)。

    cookie将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求能够获得一个或多个 cookie。

    表达式 ${cookie.name.value} 返回带有特定名称的第一个 cookie 值。假设请求包括多个同名的 cookie,则应该使用 ${headerValues.name} 表达式。

    initParam将上下文初始化參数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。

    除了上述两种类型的隐式对象之外,还有些对象同意訪问多种范围的变量,如 Web 上下文、会话、请求、页面:


    术语定义

    pageScope

    将页面范围的变量名称映射到其值。比如,EL 表达式能够使用 ${pageScope.objectName} 訪问一个 JSP 中页面范围的对象,还能够使用 ${pageScope.objectName.attributeName} 訪问对象的属性。

    requestScope

    将请求范围的变量名称映射到其值。该对象同意訪问请求对象的属性。比如,EL 表达式能够使用 ${requestScope.objectName} 訪问一个 JSP 请求范围的对象,还能够使用 ${requestScope.objectName.attributeName} 訪问对象的属性。

    sessionScope

    将会话范围的变量名称映射到其值。该对象同意訪问会话对象的属性。比如:


    $sessionScope.name} 

    applicationScope

    将应用程序范围的变量名称映射到其值。

    该隐式对象同意訪问应用程序范围的对象


     特别说明:

    cookie对象

          所谓的cookie是一个小小的文本文件。它是以key、value的方式将SessionTracking的内容记录在这个文本文件内,这个文本文件通常存在于浏览器的暂存区内。

    JSTL并没有提供设定cookie的动作。由于这个动作通常都 是后端开发人员必须去做的事情,而不是交给前端的开发人员。

    假设我们在cookie中设定一个名称为userCountry的值。那么能够使 用${cookie.userCountry}来取得它。

    header和headerValues(请求报头对象)
            header储存用户浏览器和服务端用来沟通的数据。当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,比如:用户浏览器的版本号、用户计算机所设定的区域等其它相关数据。

    假设要取得用户浏览器的版本号。即${header["User-Agent"]}。另外在非常少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues来取得这些值。


    注意:由于User-Agent中包括“-”这个特殊字符,所以必须使用“[]”。而不能写成${header.User-Agent}。


    initParam
           就像其它属性一样。我们能够自行设定web应用的环境參数(Context),当我们想取得这些參数时,能够使用initParam隐含对象去取得它。比如:当我们在web.xml中设定例如以下:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <context-param>
    <param-name>userid</param-name>
    <param-value>mike</param-value>
    </context-param>
    </web-app>
    那么我们就能够直接使用 ${initParam.userid}来取得名称为userid,其值为mike的參数。

    以下是之前的做法:String userid =(String)application.getInitParameter("userid");

    pageContext对象

    我们能够使用 ${pageContext}来取得其它有关用户要求或页面的具体信息。

    以下列出了几个比較经常使用的部分。
    Expression 说 明
    ${pageContext.request} |取得请求对象
    ${pageContext.session} |取得session对象
    ${pageContext.request.queryString} |取得请求的參数字符串
    ${pageContext.request.requestURL} |取得请求的URL,但不包括请求之參数字符串
    ${pageContext.request.contextPath} |服务的web application的名称
    ${pageContext.request.method} |取得HTTP的方法(GET、POST)
    ${pageContext.request.protocol} |取得使用的协议(HTTP/1.1、HTTP/1.0)
    ${pageContext.request.remoteUser} |取得username称
    ${pageContext.request.remoteAddr } |取得用户的IP地址
    ${pageContext.session.new} |推断session是否为新的,所谓新的session,表示刚由 server产生而client尚未使用
    ${pageContext.session.id} |取得session的ID
    ${pageContext.servletContext.serverInfo}|取得主机端的服务信息

    8、特别强调

    1、注意当表达式依据名称引用这些对象之中的一个时。返回的是对应的对象而不是对应的属性。比如:即使现有的 pageContext 属性包括某些其它值。${pageContext} 也返回 PageContext 对象。

    2、 注意 <%@ pageisELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。

  • 相关阅读:
    CentOS 7 firewalld vsftpd开放端口
    sqlalchemy操作----多表关联
    sqlalchemy 或者pysql 连接数据库时支持中文操作
    sqlalchemy操作----外键关联,relationship
    sqlalchemy操作----建表 插入 查询 删除
    python 操作mysql
    指针和二维数组的关系要点简单分析
    二维数组基本操作练习题
    单独取出整数的个位,十位,百位,以及素数的小综合题
    LeetCode | Add Two Numbers II
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6907189.html
Copyright © 2020-2023  润新知