JavaWeb 07 EL
来源:互联网 发布:京东人工智能 编辑:程序博客网 时间:2024/06/09 15:42
1、概念
Expressions Language,表达式语言
格式:${表达式}
其主要用于将域对象中的属性值输出到页面上
示例:
输出request域中的username属性值
<% request.setAttribute("username", "tomcat"); %> ${username}
2、特点
EL表达式默认是全域查找。
先从page域中查找,如果找不到;再在request域中查找,如果还找不到;再去session域中查找,如果再找不到;最后去application域中查找,如果还是没有,则返回空字符串(”“),不是null
3、精确查找
EL提供了四个Scope对象,这四个对象相当于将域对象中的域单独拿了出来。这样就可以获取指定域中的属性值
pageScope
获取page域中的属性值
requestScope
获取request域中的属性值
sessionScope
获取session域中的属性值
applicationScope
获取application域中的属性值
特殊的key对应的值的获取
${指定域[‘特殊key’]}
这里单引号、双引号都可以
示例:
获取page域中的”ab-cd”对应的属性值
<% pageContext.setAttribute("ab-cd", "我是value"); %> ${pageScope['ab-cd']}
4、获取JavaBean中的属性值
可以通过【对象.属性名】的方式来获取对应的JavaBean的属性值
Tips:
⑴ 通过此形式获取到的属性值,是通过调用JavaBean中的getXxx方法来获取到的
⑵ 如果获取到的属性值还是一个JavaBean的对象,则还可以继续获取其相应的属性值
⑶ 只要JavaBean中有getXxx方法,则可以直接使用
【对象.xxx】来获取对应的属性值。即将Xxx的首字母小写即可。在EL表达式中要写的是getXxx方法的xxx,这和属性值无关,没有相应的属性值也不会报错。但是没有相应的get方法就会报错:javax.el.PropertyNotFoundException: Property ‘xxx’ not found on type JavaBean的全类名
<h2>测试获取JaveBean的属性值</h2>【Animal JavaBean】 public class Animal { private String name; private Integer age; private String color; private Dog dog; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } public Animal() { } public Animal(String name, Integer age, String color, Dog dog) { this.name = name; this.age = age; this.color = color; this.dog = dog; } @Override public String toString() { return "Animal [name=" + name + ", age=" + age + ", color=" + color + ", dog=" + dog + "]"; }}
【Dog JavaBean】
public class Dog { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Dog() { } public Dog(String name, Integer age) { this.name = name; this.age = age; } @Override public String toString() { return "Dog [name=" + name + ", age=" + age + "]"; }}
【JSP页面】
<% Animal animal = new Animal("动物", 4, "白色", new Dog("小白", 2)); pageContext.setAttribute("animal", animal);%><%-- 获取Animal对象 --%>Animal:${animal}<br /><br /><%-- 获取Animal对象的color属性 --%>Animal的color:${animal.color}<hr /><%-- 获取Dog对象 --%>Dog:${animal.dog}<br /><br /><%-- 获取Dog对象的name属性【因为animal的dog属性也是一个JavaBean(Dog类型)】 --%>Dog的name:${animal.dog.name}
测试是否调用了get方法
在上面的Animal类中添加一个get方法:
public String getWeight() { return "16"; } 在JSP页面中写: ${animal.weight} 这样会在页面上显示16 再新建一个Animal对象,并添加到域中,再调weight,结果还是16 <% Animal a = new Animal("动物2", 2, "黑色", new Dog("小黑", 1)); pageContext.setAttribute("a", a); %> ${a.weight} 显示的结果还是16
由此可见:通过EL来获取JavaBean的属性值,是调用了属性对应的getXxx方法,而且属性不存在也不会报错、EL中调用的是getXxx方法去掉get后再将Xxx首字母大写
5、EL中的11个隐含对象
pageContext
类型:PageConext
作用:它既是JSP中的隐含对象之一,也是EL中的隐含对象之一。通过它可以获取JSP中的其他8个隐含对象。
一般在EL中获取的是:
⑴ 获取request对象
${pageContext.request}
⑵ 获取虚拟路径【/项目名】
${pageContext.request.contextPath}
pageScope
类型:Map<String, Object>
用来获取page域中的属性值
requestScope
类型:Map<String, Object>
用来获取request域中的属性值
sessionScope
类型:Map<String, Object>
用来获取session域中的属性值
applicationScope
类型:Map<String, Object>
用来获取application域中的属性值
param
类型:Map<String, String>
用来获取request中的请求参数。单个value的情况
例如:获取文本框的内容
<input type="text" name="username" value="tomcat" /> ${param.username}
paramValues
类型:Map<String, String[]>
用来获取request中的请求参数。同一个name,多个value的情况
例如:获取多选框的值
<input type="checkbox" name="language" value="Java" />Java <input type="checkbox" name="language" value="cs" />C# ${paramValues.language}
header
类型:Map<String, String>
获取请求头中的指定name的value。单个value的情况
headerValues
类型:Map<String, String[]>
获取请求头中的指定name的value。同一个name,多个value的情况
cookie
类型:Map<String, Cookie>
根据指定的Cookie的名字,获取对应的Cookie对象
initParam
类型:Map<String, String>
根据指定的name,获取在web.xml中配置的context-param里的param-value
示例:根据name获取在web.xml中的对应value值
<context-param> <param-name>username</param-name> <param-value>tomcat</param-value> </context-param>${initParam.username}
使用示例
虚拟路径:<%=request.getContextPath()%><br />虚拟路径:${pageContext.request.contextPath}<hr /><% pageContext.setAttribute("key", "pageValue"); request.setAttribute("key", "reqValue"); session.setAttribute("key", "sessionValue"); application.setAttribute("key", "appValue");%>${pageScope.key}<br />${requestScope.key}<br />${sessionScope.key}<br />${applicationScope.key}<hr /><%-- 【QueryString】 ?username=abc --%><%-- ${pageContext.request.queryString} --%><%=request.getParameter("username")%><br />username: ${param.username}<br />language: ${paramValues.language}<br /><hr />UA:${header['User-Agent'] }<br />Accpet:${headerValues.Accept}<br /><hr />${cookie.JSESSIONID}<br />${initParam.username}
6、EL运算符
算数运算符
在EL中可以直接进行加、减、乘、除等运算
empty
${empty 要判断的值}
经常使用empty运算符来判断一个字符串或一个集合是否为空。这里的空不仅指null,还指字符串是一个空串或集合中没有元素。该运算符的返回值为true或false
not empty或 !empty 表示非空
${not empty 要判断的值}
注意:
empty和null不同:
⑴ 当字符串是一个空串(”“)时,使用null判断,返回false;使用empty判断,返回true
⑵ 当集合中没有元素时,使用null判断,返回false;使用empty判断,返回true
empty和null的区别
<% String str = ""; pageContext.setAttribute("str", str); %> str == null ? ${str == null}<br /> empty str ? ${empty str}<br /><hr /> <% List list = new ArrayList(); pageContext.setAttribute("list", list); %> list == null ? ${list == null}<br /> empty list ? ${empty list}
判断非空
<% pageContext.setAttribute("str", "abc"); pageContext.setAttribute("list", new ArrayList()); %>not empty str ? ${not empty str}<br />!empty list ? ${!empty list}
- JavaWeb 07 EL
- javaweb之EL表达式
- javaweb el表达式
- JavaWeb-EL表达式
- JavaWeb ---- EL学习
- JavaWeb---EL(Expression Language)
- JavaWeb之EL篇
- JavaWeb-EL表达式
- 10019---JavaWeb基础--EL
- Javaweb的el操作
- javaWeb--EL表达式
- JavaWeb笔记-EL
- JavaWeb:EL表达式
- 01-JavaWeb-EL表达式
- JavaWeb之El表达式
- Javaweb之EL表达式
- JAVAWEB中的EL用法
- JavaWeb之EL表达式
- 1039. 到底买不买(20)
- 第10章 卷积法求系统零状态响应
- IO
- java基础提高篇--static关键字
- CopyFileEx 函数
- JavaWeb 07 EL
- 监督学习的基本思想及最基本算法——梯度下降
- 卡特兰数+大数处理
- 413. Arithmetic Slices | LeetCode Dynamic Programming
- Android 环信
- 学习淘淘商城第六十五课(查询商品详情添加缓存分析)
- 第11章 卷积积分的计算和性质
- 一个最简单的cocos2dx-lua 演示说明
- android技术篇(一)解锁bootloader