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 }

最新文章

  1. ThreadPool.QueueUserWorkItem的用法
  2. JAVA OO 第二章知识点
  3. IOS中Json解析的四种方法
  4. 对react的几点质疑
  5. jaccard similarity coefficient 相似度计算
  6. 【微信Java开发 --番外篇】错误解析
  7. power
  8. Docker有什么好处?
  9. Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
  10. ubuntu 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
  11. cluster模块实现多进程-让我的代理服务速度飞起来了
  12. 一种实现C++反射功能的想法(三)
  13. 【转】 java中HashMap详解
  14. Java基础知识强化之集合框架笔记13:Collection集合存储学生对象并遍历
  15. Android Studio常用插件续
  16. 【原创】poj ----- 1182 食物链 解题报告
  17. POJ 2368 巴什博奕
  18. cache.config文件配置模板
  19. [HNOI 2011]数矩形
  20. windows下安装MongoDB扩展和配置

热门文章

  1. 安装使用lynis扫描Linux的安全漏洞
  2. 通用线程:POSIX 线程详解,第 3 部分
  3. envoy &#160;功能介绍
  4. Eclipse自动生成 get/set
  5. Java基础数据类型二进制转换
  6. Git&amp;Repo 命令大全 ***
  7. composer.phar的作用和安装laravel5.5.4 和 vendor目录
  8. [三卷天书]记一个asp.net生成两个日期范围内生成随机时间的方法
  9. eclipse配置项目部署到到本地tomcat
  10. 南阳OJ 1170 最大的数