EL表达式

    什么是EL表达式

      EL,Expression Language,表达式语言,是一种在JSP页面中获取数据的简单方式,通过${变量名}的方式可以获取到值,需要注意的是EL只能从 pageConext、request、session、application 四大域属性空间中获取数据。

    使用EL表达式获取数据

      下面不能成功取值 

<% int sum = 88; %>
<!-- 该值取不出来,因为没有放在四大域属性空间中 -->
${sum }

      可以将这个值存放到四大域属性空间中的任意一个中。然后访问其存放时的 key即可。    

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("name", "henu");
request.setAttribute("name", "henu");
session.setAttribute("name", "henu");
application.setAttribute("name", "henu");
%>
EL表达式获取的值:
${name}
</body>
</html>

     EL底层是从最小范围的pageContext依次查找,直到查找到最大范围 application。这期间,只要查找到了,则直接获取,不再去后面的范围中查找了,若最终没有查找到,则什么也不输出。因此这里输出的结果是先从pageContext空间域取出的。

     1、从指定域中获取数据

     从 pageContext 依次查找到 application 域空间,会降低执行效率。若属性确定存放在某个域空间时,则可指定直接从该空间中查找。此时需要借助 EL 的四个域属性空间相关的内置对象。   

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("name", "pageContext");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
EL表达式获取的值:<br>
${pageScope.name}<br>
${requestScope.name}<br>
${sessionScope.name}<br>
${applicationScope.name}
</body>
</html>

     2、访问 Bean 的属性

     EL 可以通过 ${key .属性}的方式获取到指定对象的属性值。其底层实际调用的是该对象的相应属性的 get 方法。也可以使用${key[“属性”]的方式获取。该方式不常用。

     创建一个Student类,该类在scm包下。(这里有一个注意点稍后提及)

package scm;

public class Student {
private String name;
private int age;
public Student() {}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }

     创建JSP页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="scm.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Student stu = new Student("张三", );
request.setAttribute("stu", stu);
%>
获取bean对象中属性的两种方法:
${requestScope.stu.name}
${requestScope.stu["name"] }
</body>
</html>

     在JSP中我们声明了Student对象,并向request域中传递。然后使用EL表达式接收bean对象传来的参数。

     访问JSP页面输出结果:

         获取bean对象中属性的两种方法: 张三 张三

     在上边我们说到一个注意点:细心的会看到在JSP页面中,我们导入了scm包,我们声明Student对象时一定要导包(血淋淋的教训),或者会抛出异常。

     若要访问一个对象的域属性的值,则可多次使用点号运算符,依次取出相应的属性值。

     创建一个School类,同样在scm包下,Student类同上即可。(注意导包)

package scm;
public class School {
private String schoolName;
private Student student;
public School() {}
public School(String schoolName,Student student) {
this.schoolName = schoolName;
this.student = student;
}
public String getSchoolName() {
return schoolName;
}
public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
} }

     编写JSP页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="scm.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Student st = new Student("李四",);
School s = new School("河南大学",st);
request.setAttribute("s",s);
%>
${requestScope.s.schoolName}
${requestScope.s.student.name}
${requestScope.s.student.age}
</body>
</html>

     访问JSP页面输出结果:河南大学 李四 21

     3、获取数组中的元素

     EL 可以通过 ${key[索引]} 的方式获取到指定索引的元素。不过,需要注意的是,若数组中不存在该指定索引的元素,系统并不会抛出数组越界异常。   

<%
String[] names = {"张三","李四","王五","赵六"};
request.setAttribute("names", names);
%>
<!-- 输出李四 -->
${names[] }
<!-- 没有输出也不会报错 -->
${names[] }

     4、获取 List 中的元素

     与获取数组中的元素相同,通过 ${key[索引]} 的方式可以获取 List 中指定索引的元素。若 List 中不存在该指定索引的元素,系统并不会抛出越界异常。

     创建List集合并存入Student对象(Student类同上),导入scm和java.util.*包。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.* "%>
<%@ page import="scm.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
List<Student> stList = new ArrayList();
stList.add(new Student("张三",));
stList.add(new Student("李四",));
stList.add(new Student("王五",));
request.setAttribute("stList", stList);
%>
<!-- 输出李四 -->
${stList[].name } ${stList[].age}
<!-- 没有输出也不会报错 -->
${stList[].name} ${stList[].age}
</body>
</html>

     EL 无法输出 Set 集合中的元素。因为 Set 集合中的元素是无序的,即没有索引的概念,所以无法通过索引获取元素。

     5、获取 Map 中的元素

     EL 通过 ${attributeName.mapKey} 的方式可以获取指定 Map 的指定 key 的值。     

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.* "%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Map<String,String> map = new HashMap();
map.put("name", "张三");
map.put("age", "");
request.setAttribute("map", map);
%>
<!-- 根据Map的键获取值 -->
${map.name}
${map.age}
</body>
</html>

   EL表达式内置对象

     EL表达式内置对象    

     同JSP类似,在EL表达式中也有一些内置对象,共11个:

    • pageContext
    • pageScope
    • requestScope
    • sessionScope
    • applicationScope
    • cookie
    • param
    • paramValues
    • header
    • headerValues
    • initParam

     上面除了pageContext是javax.servlet.jsp.PageContext类型,其他的都是java.util.Map类型。四个域属性相关的对象之前用过了,下面主要介绍一些其他常用的。

     1、pageContext     

     EL表达式中的pageContext与JSP内置对象中的 pageContext 是同一个对象。通过该对象,可以获取到request、response、session、servletContext、servletConfig 等对象。注意,这些对象在 EL中不是内置对象,只能通过EL中的pageContext 获取。

     在 EL 中直接`${pageContext.request}`

     即可获取 request 对象。其底层实际调用的是
     pageContext.getRequest()方法。同理,也可以通过类似方式获取到其它对象。
     在这些获取的对象中,有一个是实际工程中最常用的:

${pageContext.request.contextPath}  

     用于获取当前项目的发布到服务器的名称。一般会用在路径中。

<form action="${pageContext.request.contextPath }/login.do"></form>    

     2、param(如果url中有目标参数则输出,没有的话不显示也不会报错)
     在 EL 中通过${param.参数名}可获取到请求中指定参数名的值。例如,提交的请求为:

     localhost:8080/01-jspTest/elTest.jsp?name=henu

     在 JSP 页面中通过如下方式,可获取到 url中name 参数的值:  

${param.name}    

     3、paramValues
     若提交的请求中同一参数具有多个值,则可通过 ${paramValues.参数名[索引]} 获取到指定索引号的该参数值。例如,提交的请求为:

     localhost:8080/01-jspTest/elTest.jsp?hobby=basketball&hobby=football

     在JSP中获取方式如下:

${paramValues.hobby[]}
${paramValues.hobby[]}

     4、initParam
     在 EL 中通过使用 ${initParam.初始化参数名} 可以获取到初始化参数的值。 例如在 web.xml 中定义了初始化参数如下:     

 <context-param>
<param-name>KaiFeng</param-name>
<param-value>Henu</param-value>
</context-param>

     在JSP中的获取方式如下: 

${initParam.KaiFeng}

     以上就是开发中较为常见的几种EL表达式内置对象,其他几种在这里就暂不介绍了。

JavaWeb学习之JSP(三) EL表达式的更多相关文章

  1. 超全面的JavaWeb笔记day12<Jsp&JavaBean&El表达式>

    1.JSP三大指令 page include taglib 2.9个内置对象 out page pageContext request response session application exc ...

  2. JSP的EL表达式语言

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/expression-language.html: JSP表达式语言(EL)可以方便地访问存储在JavaB ...

  3. jsp中EL表达式不起作用的问题

    jsp中EL表达式不起作用的问题 进行springmvc的@ExceptioinHandler调试,竟然是el表达式的问题, 学习了:http://blog.csdn.net/wolf_soul/ar ...

  4. JSP基础--EL表达式

    EL(表达式语言) 1 EL概述 1.1 EL的作用 JSP2.0要把html和css分离.要把html和javascript分离.要把Java脚本替换成标签.标签的好处是非Java人员都可以使用. ...

  5. MVC实现登录,增删改查之数据展示:JSP的EL表达式(二)

    这里的数据展示利用jsp的EL表达式,后台放入session,前台EL获取 数据库设计是这样的,一个老师对应有多个学生,在学生表student中建立外键tid与老师表teacher的tid对应,现在老 ...

  6. JSP、EL表达式的入门(要用)

    2018-08-12   22:55:23 * JSP.EL表达式的入门(要用)    * Servlet/JSP  是两种动态的WEB资源的两种技术.   * 使用Servlet 生成HTML的页面 ...

  7. JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

    1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...

  8. JavaWeb学习总结第三篇--走进JSP页面元素

    JavaWeb学习(三)—走进JSP页面元素 JSP:Java Server Pages,译为Java服务器页面.其脚本采用Java语言,继承了Java所有优点.JSP元素可以分为指令元素.脚本元素和 ...

  9. Jsp入门EL表达式_学习笔记

    1.EL表达式 [1] 简介 > JSP表达式 <%= %> 用于向页面中输出一个对象. > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段. > ...

随机推荐

  1. Intellij IDEA 基础设置,个性化设置,好用的设置→_→

    Intellij IDEA 个性化设置 Appearance & Behavior 外观和行为 Keymap 快捷键 Editor 编辑器设置 Plugins 插件 Version Contr ...

  2. php的一个有意思的命令:-S

    php -S localhost:8188 /web 会启动一个监控IP:PORT 的http服务,算是简易的web服务器吧.基本上,实现了PHP+MySQL就可以建立一个简易测试网站的环境.

  3. ajax发送时禁用按钮

    css /*div无法点击*/ .div-cant-click { pointer-events: none; } 发送ajax实例 $.ajax({ url:'url', type:'post', ...

  4. 2019-2020-1 20199326《Linux内核原理与分析》第二周作业

    本周总结:本周的学习内容主要是庖丁解牛Linux的第一章,然后看完书后,又跟着云班课加深学习了一下第一章的内容.第一章主要讲述了linux里的汇编指令的一些指令,比如movl,pushl,popl等等 ...

  5. 获取磁盘的 总容量,空余容量,已用容量 【windows】

    使用windows api 输入:盘符字符串 输出:磁盘容量 float get_disk_spaces(const char drive_letter, float & total_spac ...

  6. opencv-4-成像系统与Mat图像颜色空间

    opencv-4-成像系统与Mat图像颜色空间 opencvc++qtmat 目标 知道 opencv 处理图像数据的格式 介绍 mat 基础内容 知道 BGR 颜色 显示 颜色转换 BGR 到 灰度 ...

  7. C++多线程队列实现

    C++多线程队列实现 C++多线程队列学习 介绍 在项目中,进行多线程队列实现是一个比较麻烦的事, 找到了一个实现比较好的多线程队列实现, 自己做了一点修改更加适应自己的项目, 记录下来, 有需要的自 ...

  8. 【手把手教你】win10 虚拟机 VMware Workstation Pro 15下安装Ubuntu 19.04

    虚拟机 VMware Workstation Pro 15.5.0 及永久激活密钥 https://www.cnblogs.com/zero-vic/p/11584437.html Ubuntu19. ...

  9. MySQL数据库的套接字文件和pid文件

    MySQL数据库的套接字文件和pid文件 socket文件:当用Unix域套接字方式进行连接时需要的文件. pid文件:MySQL实例的进程ID文件. MySQL表结构文件:用来存放MySQL表结构定 ...

  10. usermod,用户密码管理,mkpasswd命令

    passwd是更改用户密码的文件,如果在root下,我们可以直接输入这个命令更改密码[root@localhost ~]# passwd更改用户 root 的密码 .新的 密码:如果想更改其他用户的密 ...