java Web EL表达式详解
1.EL表达式的简介
EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护。最基本的语法是${express}。
2.获取并显示数据
从四个域中通过key找到简单数据并显示出来。表达式代码:
${name} <!-- 类比于<%=pageContext.findAttribute("name") %> -->
四个域的寻找顺序是 page,request,session,application。用EL表达式还有个好处,若找不到键值为name的属性值,不会显示null,会显示空字符串。若是确定键值是在request域中,则可以用如下EL表达式代码:
从存储在session域中的封装了数据的JavaBean中得到对象的某个属性值并显示出来。
<%
Person p = new Person();
Address address = new Address();
address.setCity("浙江");//Adress类中有个私有String属性为city
p.setName("mike");//Person类中有私有String属性为name
p.setAddress(address);//Person类中有私有Adress属性为address
session.setAttribute("person", p);//存入sessionScope
%>
${person.name}<!-- 从session域中找到键值为person的对象,然后再person对象中找到name属性 --> 这种写法是按照page request session application域依次取的,如果page域中有则返回page域中的值,如果没有则取request域中找,以此类推
${session.person.name} 这样写是精准定位到从session中取 ${person.address.city}
${session.person.address.city}
${person['name']}<!-- 也可以用[]方式 -->
${person['address']['city']}
除了用.方式获得对象的属性,也可以用[ ]方式,当然遇到键值名字中有-的,如mike-abc,或者key值为数字开头,则只能用[ ]方式。
从List集合对象中获取某个值并显示。
<%
List<Person> list = new ArrayList<Person>();
list.add(new Person("kkk"));
list.add(new Person("sss"));
list.add(new Person("jjj"));
application.setAttribute("list_1", list);
%>
${list_1[1].name }
从Map中获取某个值并显示。
<%
Map map = new HashMap();
map.put("a", new Person("aaa"));
map.put("b", new Person("bbb"));
map.put("1", new Person("ccc"));
request.setAttribute("map", map);
%>
${map['1'].name }<!-- 是数字的话只能用括号,就算put进去的key值是字符串类型-->
${map.a.name }
3.EL表达式的内置对象
|
分类 |
内置对象名称 |
描述 |
|
作用域 |
pageScope |
page作用域 |
|
requestScope |
request作用域 |
|
|
sessionScope |
session作用域 |
|
|
applicationScope |
application作用域 |
|
|
请求参数 |
param |
获得一个参数 eg:${param.xxx} |
|
paramValues |
获得一组参数 |
|
|
请求头 |
header |
获得一个请求头 eg:${header.xxx} |
|
headerValues |
获得一组请求头 |
|
|
JSP上下文对象 |
pageContext |
可以获取JSP九大内置对象(和jsp中的pageContext的hash值一样,证明应是同一对象) eg:获取request对象 ${pageContext.request) |
|
全局初始化参数 |
initParam |
获取web.xml中<context-param>内的参数, eg:${ initParam.xxx} |
|
cookie |
cookie |
获取cookie信息 eg:${cookie.JSESSIONID.value }就是获取sessionId |
简单示例(与java代码做对比):
<body>
param
<h1>java代码</h1>
username = <%=request.getParameter("username")%> <br/>
city = <%=request.getParameter("city") %><hr/>
password = <%=request.getParameter("password") %><hr/>
<h1>el表达式</h1>
username = ${param.username } <br/>
city = ${param.city } <br/>
password = ${param.password } <hr/>
header
<h1>java代码</h1>
Accept = <%=request.getHeader("Accept") %> <br/>
User-Agent = <%=request.getHeader("User-Agent") %> <br/>
<h1>el表达式</h1>
Accept = ${header.Accept } <br/>
User-Agent = ${header["User-Agent"] } <br/>
cookie
<%
Cookie cookie = new Cookie("meinv", "gaoyuanyuan");
response.addCookie(cookie);
%>
<!-- 需求: 获取浏览器给服务器传递的cookie信息 -->
<h1>java代码</h1>
<%
Cookie[] cookieArr = request.getCookies();
if(cookieArr!=null) {
for(Cookie coo : cookieArr) {
if("meinv".equals(coo.getName())) {
String cookieName = coo.getName();
String cookieValue = coo.getValue(); out.println("java : " + cookieName + "===" + cookieValue);
}
}
}
%>
<h1>el表达式</h1>
cookie对象: ${cookie.meinv } <br/>
cookie.name ${cookie.meinv.name } <br/>
cookie.value ${cookie.meinv.value } <br/>
pageContext
<!-- 需求: 获取项目路径 -->
<h1>java代码</h1>
request.getContextPath() : <%=request.getContextPath() %> <br/>
application.getContextPath() : <%=application.getContextPath() %> <br/> pageContext.getServletContext().getContextPath() : <%=pageContext.getServletContext().getContextPath() %> <br/>
((HttpServletRequest)pageContext.getRequest()).getContextPath() :::: <%=((HttpServletRequest)pageContext.getRequest()).getContextPath() %> <hr/>
<h1>el表达式</h1>
pageContext.request.contextPath === ${pageContext.request.contextPath } <br/>
pageContext.servletContext.contextPath === ${pageContext.servletContext.contextPath }
</body>
4.用EL表达式执行运算
使用el进行简单的运算的时候,如果指定的范围中的key不存在,这时就不会去使用这个值计算,但是存在的依然会进行运算
可以使用empty 验证某个容器或者变量是否为null
格式: ${ empty 集合或变量等}
如果集合元素的个数为0 或者 变量为null 则返回true; 否则 返回false.
常用方式:
el中三元运算符:
${empty 对象 ? 表达式1 : 表达式2 }
${not empty 对象 ? 表达式1 : 表达式2 }
java Web EL表达式详解的更多相关文章
- java web.xml配置详解(转)
源出处:java web.xml配置详解 1.常规配置:每一个站的WEB-INF下都有一个web.xml的设定文件,它提供了我们站台的配置设定. web.xml定义: .站台的名称和说明 .针对环境参 ...
- 《Tomcat与Java Web开发技术详解》思维导图
越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...
- Java 8 Lambda 表达式详解
一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...
- java web之Filter详解
java web之Filter详解 2012-10-20 0 个评论 作者:chenshufei2 收藏 我要投稿 .概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,W ...
- java web.xml配置详解
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
- Java web.xml 配置详解
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- JavaWeb学习篇之----EL表达式详解
我们之前的几篇文章中都提到了一个EL表达式,那么这个EL表达式到底是什么东东呢?为什么用处那么大,下面我们就来看看EL表达式的相关内容 EL表达式简介: EL 全名为Expression Langua ...
- EL表达式详解
转载自: http://blog.csdn.net/qwerasdf123/article/details/4189889 写在最前面: 如果想使用el表达式,首先必须将jstl.jar,standa ...
- Java Web开发之详解JSP
JSP作为Java Web开发中比较重要的技术,一般当作视图(View)的技术所使用,即用来展现页面.Servlet由于其本身不适合作为表现层技术,所以一般被当作控制器(Controller)所使用, ...
随机推荐
- C++中关于标准输出流cout中使用递增运算符的问题
今天听同学提起一个问题,在C++中运行下面的语句会得到什么结果: ; cout << a++ << a++ << a++; 起初我个人想当然地认为会输出012,然而 ...
- php之接口内curl请求其他接口
今天遇到一个需要写curl的需求,情况是这样的: 同一应用的A系统(购物系统),B系统(答题系统)相互独立,用户数据全部存在于A系统的数据库中, 现在处于B系统的某项操作中,需要在B系统中验证当前请求 ...
- 哥伦比亚大学 Columbia University Image Library (COIL-20) 数据集
转自:http://blog.csdn.net/garfielder007/article/details/51480820,这个人博客里面有不错的 数据集,http://blog.csdn.net/ ...
- 如何用 Java 实现 Web 应用中的定时任务
定时任务,是指定一个未来的时间范围执行一定任务的功能.在当前WEB应用中,多数应用都具备任务调度功能,针对不同的语音,不同的操作系统, 都有其自己的语法及解决方案,windows操作系统把它叫做任务计 ...
- 前端之css样式02
一.float属性 block元素通常被现实为独立的一块,独占一行,多个block元素会各自新起一行,默认block元素宽度自动填满其父元素宽度.block元素可以设置width.height.mar ...
- InnoDB MVCC RR隔离级别下的数据可见性总结
一.背景 熟悉数据库隔离级别的人都知道,在RR(可重复读)隔离级别下,无论何时多次执行相同的SELECT快照读语句,得到的结果集都是完全一样的,即便两次SELECT语句执行期间,其他事务已经改变了该查 ...
- php 中 用curl 发送 https 请求
在 php.ini 中修改配置选项 curl.cainfo = "D:\phpStudy\php\php-5.6.27-nts\pert\cacert.pem" 其中 cacert ...
- HDU - 5297:Y sequence (迭代&容斥)
Yellowstar likes integers so much that he listed all positive integers in ascending order,but he hat ...
- verilog中task的用法
任务就是一段封装在“task-endtask”之间的程序.任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会执行的.调用某个任务时可能需要 ...
- MongoDB:MapReduce基础及实例
背景 MapReduce是个非常灵活和强大的数据聚合工具.它的好处是可以把一个聚合任务分解为多个小的任务,分配到多服务器上并行处理. MongoDB也提供了MapReduce,当然查询语肯定是Java ...