JavaWeb课程系列

4.el隐含对象解析

1)pageContext

它是代表当前页面的PageContext对象,通过它的get方法可以得到jsp中的其它八大隐含对象

2)四个域对象所对应的隐含对象:

①Map<String, Object> pageScope——对应pageContext域      ${ pageScope . username }

②Map<String, Object> requestScope——对应request域       ${ requestScope. username }

③Map<String, Object> sessionScope——对应session域        ${ sessionScope. username }

④Map<String, Object> applicationScope——对应application域  ${ applicationScope. username }

3)请求参数数据 param

Map<String, String> param:

 保存的是请求参数的key--value(value只有一个),input   ${ param. username }

Map<String, String[]> paramValues:

保存的是请求参数的key--value(value有多个),checkbox   ${ paramValues. username }

5. el取值方式

1)使用“点”

如果对象是map类型对象: map.keyName -->得到对应的value值

实质: map.get(keyName)

如果对象是一般对象 : object.propertyName ---> 得到对就的属性值

实质是: object.getXxx()

[特别强调:字段和属性]

EL表达式访问的是使用getXxx()、setXxx()方法定义的属性,而不是字段本身。例如:${user.userName }会去调用getUserName()方法,而不是userName字段。所以如果没有声明getUserName()方法或权限不允许则无法显示属性值。

getUserName()方法未定义或权限不足时会抛出异常:javax.el.PropertyNotFoundException: Property 'userName' not readable on type java.lang.String

2)使用“[]”

map的键有时包含“点”,这时就不能再使用“点”取值了。

例如:

<input type="text" name="name.x" value=”aaa”>

${param['name.x']}

如果对象是map类型对象: map["keyName"] -->得到对应的value值

实质: map.get(key)

如果对象是一般对象 : object["propertyName"] ---> 得到对就的属性值

实质是: map.getXxx()

如果是取出list的元素,也使用[]:

如:

<input type="checkbox" name="username" value="1">

<input type="checkbox" name="username" value="2">

<input type="checkbox" name="username" value="3">

<input type="checkbox" name="username" value="4">

取值:<h1>多选:${paramValues.username[0]}</h1>

简化格式

域范围对象可以不用写,系统会自动按范围从小到大的顺序查找:

pageScope->requestScope-->sessionScope-->applicationScope

找到就不会继续找了, 如果没有找到显示空白(不是null, 而是一个空串)不会报错

6. el表达式运算

  • 算术运算:${5+3}
  • 关系运算: ${5>3}
  • 逻辑运算: ${true&&false}
  • empty运算:${empty  requestScope.emp }

①null

[1]变量的值是null

[2]域对象中不存在这个变量

②空集合

③空数组

  • 空字符串
  • 空字符

5)三目条件运算: ${16<5?'a':"big" }

7.获取项目虚拟路径

1)获取request对象${pageContext.request }

2)获取contextPath${pageContext.request.contextPath }