EL

EL(Exepress Language)

是为了使 JSP 写起来更加简单。表达式语言的灵感来自于 ECMAScript 和XPath
表达式语言,它提供了在 JSP 中简化表达式的方法,让 Jsp 的代码更加简化。
解决啦 jsp 脚本代码结构混乱、与 HTML 结合容易出错,不易维护的缺点。

增加啦程序的可读性。

==语法结构==

1
${expression}
1
例如: ${username}

==操作符==

  • 操作符”.”
    • 获取对象的属性。例如:${news.title}
  • 操作符”[]”
    • 获取对象的属性。例如:${news["title"]}
    • 获取集合中的对象。例如:newsList[0]
  • 当要存取的属性名称中包含一些特殊字符,如 “.” 或 “-”等并非字母 或数字的符号,就一定要使用“[ ]”。例如:
    ${ user. My-Name}应当改为${user["My-Name"]}
    如果要动态取值时,就可以用“[ ]”来做,而“.“无法做到动态取值。例如:
    ${sessionScope.user[data]}中data 是一个变量。

注意:

> EL 严格区分大小写,初学的同学应按照规范书写,有利于养成好的习惯。

==变量==

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围
中名称为username的变量。因为我们并没有指定哪一个范围的username所以它会
依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围
都没有找到时,就回传null


==运算符==

  • (): 改变执行的优先级,例如${3*(4+5)}
  • +,-,*,/,%: 算术运算符, 例如${3+2}
  • ==,!=,>,>=,<,<=: 关系运算符,例如 ${a==b}${aeqb}
  • &&,||,! : 逻辑运算符,例如 ${true&&false}
  • ?: : 条件运算符,例如 ${a>b?1:2}
  • empty : 用于检测变量名是否为空,是否等于NULL,例如 ${emptyname}

==关系运算符==

为了避免JSP混淆运算符和页面关键字,很多运算符都有替代写法

关系运算符 范例 结果
==或eq ${5==5}或${5eq5} true
!=或ne ${5!=5}或${5ne5} false
<或lt ${3<5}或${3lt5} true
>或gt ${3>5}或{3gt5} false
<=或le ${3<=5}或${3le5} true
>=或ge ${3>=5}或${3ge5} false

==隐含对象==

1. 与范围有关的隐含对象

  • requestScope 请求作用域 等同于 JSP 的request
  • sessionScope 会话作用域 等同于 JSP 的session
  • pageScope 页面作用域 等同于 JSP 的 pageContex
  • applicationScope 程序作用域 等同于 JSP 的`application
  • 在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute
    (String name),却不能取得其他相关信息。
作用域 Java代码取值 EL取值
请求作用域 request.getAttribute("news") ${requestScope.news}
会话作用域 session.getAttribute("username") ${sessionScope.username}
程序作用域 application.getAttribute("count") ${applicationScope.count}
页面作用域 pageContext.getAttribute("userNum") ${pageScope.userNum}

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

  • param
  • paramValues

    • 用法:例如我们要取得用户的请求参数时,可以利用下列方法:

      • request.getParameter(String name)
      • request.getParameterValues(String name)
    • 在EL中则可以使用param和paramValues两者来取得数据。

      • ${param.name}
      • ${paramValues.name}

3.其他隐含对象

  • cookie
  • header
  • headerValues
  • initParam
  • pageContext

    • cookie:JSTL并没有提供设定 cookie 的动作,例:要取得 cookie 中
      有一个设定名称为userCountry的值,可以使用${cookie.userCountry}
    • header和headervalues: 储存用户浏览器和服务端用来沟通的数据

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

    • initParam : initParam 取得设定 web 站点的环境参数(Context)
      例:一般的方法
      String userid = (String)application.getInitParameter("userid");
      可以使用 ${initParam.userid}来取得名称为userid

    • pageContext 取得其他有关用户要求或页面的详细信息(可获取其他八大隐式对象)。

      • ${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} 取得用户名称
      • ${pageContext.request.remoteAddr } 取得用户的IP 地址
      • ${pageContext.session.new} 判断session 是否为新的
      • ${pageContext.session.id} 取得session 的ID
      • ${pageContext.servletContext.serverInfo} 取得主机端的服务信息
坚持原创技术分享,您的支持将鼓励我继续创作!