Tomcat与JavaWeb开发技术详解EL表达式语言第十二章

EL(Expression Language)表达语言是JSP2.0版本中引入的新特性,它用于JSP文件中的数据访问。这种表达式语言能简化JSP文件中数据访问的代码,可用来替代传统的基于<%=和%>形式的Java表达式,以及部分基于<%和 %>形式的Java程序片段。

12.1基本语法

EL表达式的基本形式为: ${var},所有的表达式都以"${"符号开头,以"}"结尾。如果在JSP文件的模板文本中使用EL表达式,那么表达式的值会输出到网页上。

例如以下Java表达式和EL表达式的作用相同,都用于输出请求参数username:

Java表达式:<%=request.getParameter("username")%>

EL表达式:${param.username}

EL表达式和Java表达式一样,既可以直接插入JSP文件的模板文本中,也可以作为JSP标签的属性的值,例如以下<jsp:setProperty>标签的value属性的值为EL表达式${myPageBean.count+1}:

<jsp:useBean id="myPageBean" scope="page" class="mypack.CounterBean"/>

<jsp:setProperty name="myPageBean" property="count" value="${myPageBean.count+1}">

  Current count value is :${myPageBean.count}

12.1.1访问对象的属性及数组的元素

EL表达式语言可以使用点号运算符“.”来访问对象的属性,例如表达式${customer.name}表示customer对象的name属性。也可以用方括号运算符[]来访问对象的属性,例如:${customer["name"]}

12.1.2 EL运算符

1.算术运算符

+  例如:${6+6} 。注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现${'a'+'b'}则会出现异常。

2.关系运算符

> 或者 gt, 例如:${8>9}  或者 ${8 gt 9 }

>= 或者 ge, 例如:${45>=9} 或者 ${45 ge 9 }

< 或者 lt, 例如:${4<9} 或者 ${4 lt 9 }

<= 或者 le, 例如:${9<=8} 或者 ${9 le 8 }

== 或者 eq, 例如:${4==4} 或者 ${4 eq 4 }

!= 或者 ne, 例如:${4!=3} 或者 ${4 ne 3 }

3.逻辑运算符

&& 或者 and, 例如:${false && false} 或者 ${false and false }

|| 或者 or, 例如:${true || false} 或者 ${true or false }

! 或者 not,例如:${!true}(相当于${false}) 或者 ${not true }

empty       检查是否为null.

4.三元运算符

a ? b:c

12.1.3隐含对象


这11个隐含对象可以分为以下四种类型。

1:表示Http请求中的特定数据:包括head,headerValues,param,paramValues和cookie,举例:

${header["user-agent"]}   等价于<%=request.getHeader("user-agent")%>

${header.host}   等价于<%=request.getHeader("host")%>

${Cookie.username.value}   等价于:调用名为“username”的Cookie对象的getValue()方法

${param.username}       等价于<%=request.getParameter("username")%>

对于${header["user-agent"]}由于user-agent存在“-”,所以不能采用“.”进行访问

2:表示特定的范围,包括PageScope,requestScope,sessionScope,,和applicationScope,

${sessionScope,.cart.total}

等价于:调用会话范围内的名为"cart"的ShoppingCart对象的getTotal()方法

${applicationScope.counter.count}

等价于:调用Web应用范围内的属性名为“counter”的counterBean对象的getCount()方法

3:表示PageCounter对象

${pageContext.servletContext.serverInfo}     等价于<%=application.getServerInfo()%>

${pageContext.request.requestURL}          等价于<%=request.getRequestURL()%>

${pageContext.response.characterEncoding} 等价于<%=response.getCharacterEncoding()%>

${pageContext.session.creationTime}           等价于<%=session.getCreationTime()%>

4:表示Web应用的初始化参数集合,为initParam

${initParam.driver}       等价于<%=application.getInitParameter("driver")%>

12.1.4命名变量

EL表达式中的变量称为命名变量,它不是JSP文件中的局部变量或者实例变量,而是存放在特定范围内的属性,命名变量的名字与属性名字对应,例如${username}等价于以下代码:

<%

String username=(String)pageContext.findAttribute("username");

if(username!=null)

{

%>

<%=username%>

<%}%>


再例如:${cart.total}

<% ShoppingCart cart=(ShoppingCart)pageContext.findAttribute("cart");

if(cart!=null){

%>

<%=cart.getTotal()%>

<%}%>

12.2使用EL表达式的JSP

12.2.1基本语法例子:

<tr>

<td>\${5+2}</td>

<tr>

"\$"代表转义字符,代表真正的"$"字符

12.2.2读取HTML表单数据

<form action="form.jsp" method="GET">

name=<input type="text" name="username" value="${param["username"]}">

<p> 

The name is :${param:username}

12.2.3访问命名变量的例子

<jsp:setProperty name="myPageBean" property="count" value="${myPageBean.count+1}">

<p>

current count value is : ${myPageBean.count}

current driver is :${applicationScope.driver}

12.3定义和使用EL函数

配合tld文件使用

                                                                                                                             2018 .07.15


猜你喜欢

转载自blog.csdn.net/qq_40369435/article/details/81053721
今日推荐