Spring mvc

1.表达式语言的语法 
EL表达式以${开头,并以$}结束。EL表达式的结构:${expression} 
对于一系列的表达式,它们的取值将是从左到右进行,计算结果的类型为String,并且连接在一起。 
${这样的字符顺序就表示是一个EL表达式的开头。如果需要的只是文本${,则需要在它前面加一个转义符,如${。 
(1)关键字 
以下是关键字,它们不能用作标识符: 
and eq gt true instanceof or ne le false empty not lt ge null div mod 
(2)[]和.运算符 
EL表达式可以返回任意类型的值。如果EL表达式的结果是一个带有属性的对象,则可以利用[]或者.运算符来访问该属性。[]和.运算符类似,[]是比较规范的形式,.运算符则比较快捷。 
${object["propertyName"]} 
${object.propertyName} 
但是,如果propertyName不是有效的Java变量名,只能使用[]运算符。 
(3)取值规则 
EL表达式的取值是从左到右进行的。对于expr-a[expr-b]形式的表达式,其EL表达式的取值方法如下: 
1)先计算expr-a得到value-a 
2)如果value-a为null,则返回null 
3)然后计算expr-b得到value-b 
4)如果value-b为null,则返回null 
5)如果value-a为java.util.Map,则会查看value-b是否为Map中的一个key。若是,则返回value-a.get(value-b),若不是,则返回null 
6)如果value-a为java.util.List,或者假如它是一个array,则要进行以下处理: 
a.强制value-b为int,如果强制失败,则抛出异常 
b.如果value-a.get(value-b)抛出IndexOutOfBoundsException,或者假如Array.get(value-a, value-b)抛出ArrayIndexOutOfBoundsException,则返回null。 
c.否则,若value-a是一个List,则返回value-a.get(value-b);若value-a是一个array,则返回Array.get(value-a, value-b)。 
7)如果value-a不是一个Map、List或者array,那么,value-a必须是一个JavaBean。在这种情况下,必须强制value-b为String。如果value-b是value-a的一个可读属性,则要强调用该属性的getter方法,从中返回值。如果getter方法抛出异常,该表达式就是无效的,否则,该表达式有效。 
2.访问JavaBean 
利用.或[]运算符,都可以访问bean的属性: 
${beanName["propertyName"]} 
${beanName.propertyName} 
3.EL隐式对象 
(1)pageContext 
pageContext对象表示当前JSP页面的javax.servlet.jsp.PageContext。它包含了所以其他的JSP隐式对象。

对象EL中的类型
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
outjavax.servlet.jsp.JspWriter
sessionjavax.servlet.http.HttpSession
applicationjavax.servlet.ServletContext
configjavax.servlet.ServletConfig
PageContextjavax.servlet.jsp.PageContext
pagejavax.servlet.jsp.HttpJspPage
exceptionjava.lang.Throwable

例如,可以利用以下任意一个表达式来获取当前的ServletRequest: 
${pageContext.request} 
${pageContext["request"]} 
(2)initParam 
隐式对象initParam用于获取上下文参数的值。 
${initParam.password} 
${initParam["password"]} 
(3)param 
这是一个包含所有请求参数,并用参数名作为key的Map。每个key的值就是指定名称的第一个参数值。因此,如果两个请求参数同名,则只有第一个能够利用param获取值。要想访问同名参数的所有参数值,可以params代替。 
${param.userName} 
${param["userName"]} 
(4)paramValues 
利用隐式对象paramValues可以获取一个请求参数的多个值。这个对象表示一个包含所有请求参数,并以参数名称作为key的Map。每个key的值就是一个字符串数组,其中包含了指定参数名称的所有参数值。就算该参数只有一个值,它也仍然会返回一个带有一个元素的数值。 
${paramValues.selectedOptions[0]} 
(5)header 
这是一个包含请求标题,并用标题名作为key的Map。每个key的值就是指定标题名称的第一个标题。换句话说,如果一个标题的值不止一个,则只返回第一个值。要想获得多个值的标题,得用headerValues对象替代。 
${header["accept-language"]} 
(6)headerValues 
这是一个包含请求标题,并用标题名作为key的Map。每个key的值就是一个字符串数组,其中包含了指定标题名称的所有参数值。就算该标题只有一个值,它也仍然会返回一个带有一个元素的数值。 
${headerValues["accept-language"][0]} 
(7)cookie 
这是一个包含了当前请求对象(HttpServletRequest)中所有Cookie对象的Map。 
例如,为了获取名为jsessionid的cookie值,要使用:${cookie.jsessionid.value} 
为了获取jsessionid cookie的路径值,要使用:{cookie.jsessionid.path} 
(8)applicationScope(ServletContext对象中所有属性的Map),sessionScope(HttpSession对象中所有属性的Map),requestScope(当前HttpServletRequest对象中的所有属性)和pageScope(全页范围内的所有属性) 
隐式对象applicationScope用于获取应用程序范围级变量的值。 
在servlet/JSP编程中,有界对象是指在以下对象中作为属性的对象:pageContext、ServletRequest、HttpSession或者ServletContext。隐式对象sessionScope、requestScope和pageScope与applicationScope相似。但是,其范围分别为session、request和page。 
有界对象也可以通过没有范围的EL表达式获取。在这种情况下,JSP容器将返回PageContext、ServletRequest、HttpSession或者ServletContext中第一个同名的对象。执行顺序是从最小范围(PageContext)到最大范围(ServletContext)。 
4.使用其他EL运算符 
(1)算术运算符 
加法(+)、减法(-)、乘法(*)、除法(/和div)、取余/取模(%和mod) 
EL表达式的计算按优先级从高到低、从左到右进行。 
*、/、div、%、mod 
+、- 
这表示*、/、div、%、mod运算符的优先级别相同,+、-的优先级相同,但第二组运算符的优先级小于第一组运算符。 
(2)逻辑运算符 
和(&&和and) 
或(||和or) 
非(!和not) 
(3)关系运算符 
等于(==和eq)、不等于(!=和ne)、大于(>和gt)、大于或等于(>=和ge)、小于(<和lt)、小于或等于(<=和le) 
(4)empty运算符 
empty运算符用来检查某一个值是否为null或者empty。 
5、如何在JSP2.0及其更高版本中配置EL 
(1)实现免脚本的JSP页面 
为了关闭JSP页面中的脚本元素,要使用jsp-property-group元素以及url-pattern和scripting-invalid两个子元素。

  <jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <scripting-invalid>true</scripting-invalid>
    </jsp-property-group>
  </jsp-config>

(2)禁用EL计算 
第一种,可以将page指令的isELIgnored属性设为True 
<%@ page isELIgnored=”true” %> 
第二种,可以在部署描述符中使用jsp-property-group元素。

  <jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>true</el-ignored>
    </jsp-property-group>
  </jsp-config>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值