EL表达式总结

来源:互联网 发布:软件开发服务合同 编辑:程序博客网 时间:2024/05/22 14:25

1.JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。

2.JSP EL允许您指定一个表达式来表示属性值。一个简单的表达式语法如下:

${expr}

其中,expr指的是表达式。在JSP EL中通用的操作符是 . 和 {} 。这两个操作符允许您通过内嵌的JSP对象访问各种各样的JavaBean属性。

3.

JSP EL隐含对象

JSP EL支持下表列出的隐含对象:

隐含对象描述pageScopepage 作用域requestScoperequest 作用域sessionScopesession 作用域applicationScopeapplication 作用域paramRequest 对象的参数,字符串paramValuesRequest对象的参数,字符串集合headerHTTP 信息头,字符串headerValuesHTTP 信息头,字符串集合initParam上下文初始化参数cookieCookie值pageContext当前页面的pageContext

您可以在表达式中使用这些对象,就像使用变量一样。

  1. pageContext(1)  当前页的pageContext对象  
  2. pageScope   把page作用域中的数据映射为一个map对象  
  3. requestScope(2)     把request作用域中的数据映射为一个map对象  
  4. sessionScope    把session作用域中的数据映射为一个map对象  
  5. applicationScope    把application作用域中的数据映射为一个map对象  
  6. param   对应request.getParameter()  
  7. paramValues(3)  对应request.getParameterValues()  
  8. header(4)   对应request.getHeader()  
  9. headerValues    对应request.getHeaderValues()  
  10. cookie(5)   对应request.getCookies()  
  11. initParam(6)    对应ServletContext.getInitParamter()  

4.

  1. 使用el的时候,默认会以一定顺序搜索四个作用域,将最先找到的变量值显示出来。  
  2.   
  3. 如果我们有${username}这样一个正则表达式,它回去依次调用pageContext.getAttribute("username") -> request.getAttribute("username") -> session.getAttribute("username") -> application.getAttribute("username"),只要找到某一个不为空的值就立刻返回。  
  4.   
  5. 这样的确方便我们的操作,但是随之也出现了另外一个问题,如果pageContext和request中有同名变量,但是我想取得request中的变量该如何是好呢?这就需要为el表达式引入作用域的概念了。  
  6. ${pageScope.username} ${requestScope.username}  
5.

JSP取得绝对路径

在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下:

一、使用${pageContext.request.contextPath}

  代码” ${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。

例如:

1 <!--使用绝对路径的方式引入CSS文件-->2 <link rel="stylesheet" href="${pageContext.request.contextPath}/themes/default/css/ueditor.css" type="text/css"/>3 <!--使用绝对路径的方式引入JavaScript脚本-->4 <script type="text/javascript" src="${pageContext.request.contextPath}/ueditor1_3_6-gbk-jsp/ueditor.config.js"></script>

使用<%=request.getContextPath()%>和使用${pageContext.request.contextPath}达到同样的效果

6.

  1. pageScope, requestScope, sessionScope, appliationScope都可以看作是Map型变量,调用其中的数据可以使用${pageScope.name}或${pageScope["name"]}的形式,这两种写法是等价的。  
  2.   
  3. 在某些情况下只能使用${pageScope["content-type"]},这里不能写成${pageScope.content-type},jsp无法解析连字符(-)会出现错误。 
7.
  1. 需要注意的是${paramValues.name}得到的是一个字符串数组,如果需要获得其中某个值,还需要使用${paramValues.name[0]}指定数组中的索引。  
  2.   
  3. 这与下面的${headerValues.name}是相似的。  
8.
  1. ${cookie.name}将获得对应cookie的对象,比如我们用jsp将一段cookie发送给客户端。  
  2. Cookie cookie = new Cookie("username", "Username in cookie"); response.addCookie(cookie);  
  3.   
  4. 创建一个名称为username,值为"Username in cookie"的Cookie对象,然后发送给客户端。  
  5.   
  6. 然后我们就可以使用${cookie.username}获得这个cookie了,${cookie.username.name}获得cookie名称,${cookie.username.value}获得cookie值。  
9.
  1. ServletContext.getInitParamter()指的应用的初始变量,这些变量都是定义在web.xml中的。  
  2. <context-param> <param-name>username</param-name> <param-value>username with context param</param-value> </context-param>  
  3.   
  4. ${initParam.username}就会得到这里的变量值。  
10.

EL中的基础操作符

EL表达式支持大部分Java所提供的算术和逻辑操作符:

操作符描述.访问一个Bean属性或者一个映射条目[]访问一个数组或者链表的元素( )组织一个子表达式以改变优先级+加-减或负*乘/ or div除% or mod取模== or eq测试是否相等!= or ne测试是否不等< or lt测试是否小于> or gt测试是否大于<= or le测试是否小于等于>= or ge测试是否大于等于&& or and测试逻辑与|| or or测试逻辑或! or not测试取反empty测试是否空值
10.

JSP EL中的函数

JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:

${ns:func(param1, param2, ...)}

ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数,param2指的是第二个参数,以此类推。比如,有函数fn:length,在JSTL库中定义,可以像下面这样来获取一个字符串的长度:

${fn:length("Get my length")}

要使用任何标签库中的函数,您需要将这些库安装在服务器中,然后使用<taglib>标签在JSP文件中包含这些库。

原创粉丝点击