EL表达式
为什么需要EL表达式?
- 在JSP中嵌套大量的Java代码,增加了页面内容的复杂度,使页面不够简介,不方便代码的维护,为此sun公司制定了**JSP标签(类似于html标签)**来代替Java代码。
- apache组织开发了一套标签库被Sun公司整合后,称为标准标签库(JSRL),jstl标准标签库可以配合EL表达式一起,减轻jsp页面的复杂度,代替java代码,使jsp页面更方便的维护。
什么是EL表达式?
- EL表达式是一套简单的计算规则,用于给JSP标签(jstl标准标签库)的属性赋值,也可以直接用来输出。
- EL表达式也可以脱离标签单独使用。
- EL表达式语法:${…}
EL表达式的作用
访问JavaBean的属性
- ①jsp页面中的4种作用域–存储数据
–application作用域:有效范围是整个应用,整个应用是指从应用启动到应用
结束。
–session作用域:有效范围是当前会话,所谓当前会话,指的是从用户打开浏
览器开始,到用户关闭浏览器这个过程。
–request作用域:一次请求跨越的前后两页。
–pageContext作用域:作用范围仅限于用户请求的当前页面
setAttribute(key,value) key=value
EL表达式${key}的方式从作用域中根据key来获取value的值
- ②EL获取JavaBean的属性
什么是JavaBean? 是一个公共的类,含有一些私有属性,以及对这些私有属性的get和set方法。在java中,类表示对象,所以可以使用JavaBean类表示对象。
对象,”万物皆对象”,任何一个合理的事务都可以理解为一个对象,学生对象,老师对象,书对象…
学生对象 public class Student{ }
书对象 public class Book{ }
员工对象 public class Emp{ }
语法:${对象名.属性名}
输出简单的运算结果
EL表达式可以做一些简单的计算,可将计算的结果直接输出到页面上,也可以给JSP标签的属性赋值。
- 算术运算 + - * / %
- 逻辑运算 && || !
- 关系运算 > >= < <= == !=
- empty:用来判断一个字符串是否为空或者一个集合是否为空,empty计算结果是true/false。
获取请求参数值
el表达式如何获取请求参数值
${param.key值}等价于request.getParameter(key值)
${paramValues.key值}等价于request.getParameterValues(key值)
代码部分:
part1:
<%@page pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'el01.jsp' starting page</title>
</head>
<body>
<!-- el表达式输出简单的运算结果 -->
<!-- 1.算术运算 -->
${1+1}
${3.14}
<hr/>
<!-- java代码的写法[1] -->
<%=1+1 %>
<%=3.14 %>
<hr/>
<!-- java代码的写法[2] -->
<%
out.println(1+1);
out.println(3.14);
%>
<hr/>
<!-- 2.el表达式的关系运算和逻辑运算 -->
${1>2} <!-- false -->
<%
int a = 10;
int b = 20;
String str = "abc";
String str1 = null;
request.setAttribute("a", a); //以key=value的方式将数值存储到request中 a=10
request.setAttribute("w", a); //w=a=10的方式存储到request中
request.setAttribute("b", b);
request.setAttribute("str", str);
request.setAttribute("str1", str1);
%>
<%=a %> <!-- 10 -->
<%=b %> <!-- 20 -->
<%=str %> <!-- abc -->
<br/>
<!-- el表达式默认可以从request(也可以从别的作用域对象取)中根据key来取值 -->
a的值:${a} ${w} <!-- a的值:10 10 -->
b的值:${b} <!-- b的值:20 -->
str的值:${str} <!-- str的值:abc -->
<br/>
${a>b} <!-- false -->
${a==10} <!-- true -->
${str=="abc"} <!-- true -->
${str eq "abc"} <!-- true -->
${str!="abc"} <!-- false -->
${a==10 && str!="abc"} <!-- false -->
<%=a == 10 && str != "abc" %> <!-- false -->
<hr/>
<!-- 3.empty的用法 -->
str的值为:${str} <!-- str的值为:abc -->
str1的值为:${str1} <!-- str1的值为: -->
<br/>
${empty str} <!-- false -->
${empty str1} <!-- true -->
</body>
</html>
part2:
<%@page import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'el02.jsp' starting page</title>
</head>
<body>
<!-- 请求:http://localhost:8080/servlettest/el02.jsp?id=1001&a=1&a=2&a=3-->
<!-- 使用java代码通过request隐含对象来获取请求参数值 -->
<%
String strId = request.getParameter("id");
out.println(strId); //1001
String[] ss = request.getParameterValues("a");
out.println(Arrays.toString(ss)); //[1, 2, 3]
out.println(ss[0]); //1
out.println(ss[1]); //2
out.println(ss[2]); //3
%>
<hr/>
<!-- el表达式获得请求参数 -->
${param.id} <!-- 1001 -->
${paramValues.a} <!-- [Ljava.lang.String;@129dcc0 -->
${paramValues.a[0]} ${paramValues.a[1]} ${paramValues.a[2]} <!-- 1 2 3 -->
</body>
</html>
part3:
el03.jsp
<%@page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'el03.jsp' starting page</title>
</head>
<body>
<!--
jsp页面中的4种作用域 application session request pageContext
这4种作用域也是jsp页面的隐含/内置对象
-->
<%
application.setAttribute("a", 100);
session.setAttribute("b", 200);
request.setAttribute("c", 300);
pageContext.setAttribute("d", 400);
//response.sendRedirect("el04.jsp"); 无法跳转
//转发
request.getRequestDispatcher("el04.jsp").forward(request, response);
%>
<!-- 使用EL表达式从4个作用域中取出值 -->
a的值为:${a}
b的值为:${b}
c的值为:${c}
d的值为:${d}
<!-- a的值为:100 b的值为:200 c的值为:300 d的值为:400 -->
</body>
</html>
注意:其中含添加代码
el04.jsp
<%@page import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'el04.jsp' starting page</title>
</head>
<body>
<!-- 使用EL表达式从4个作用域中取出值 -->
a的值为:${a}
b的值为:${b}
c的值为:${c}
d的值为:${d}
<!-- a的值为:100 b的值为:200 c的值为: d的值为: -->
</body>
</html>
part4:
package com.bzxy.emp;
//表示员工对象
//JavaBean类:规范
//1)有私有属性
//2)对私有属性添加get和set方法
public class Emp {
//1)私有属性
private int id; //编号
private String name; //姓名
private double salary; //工资
//2)添加get和set方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
<%@page language="java" import="com.bzxy.emp.Emp" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'el05.jsp' starting page</title>
</head>
<body>
<!-- 使用java代码模拟数据,往Emp中添加数据并存储起来 -->
<%
Emp e1 = new Emp();
e1.setId(1);
e1.setName("zs");
e1.setSalary(3322);
Emp e2 = new Emp();
e2.setId(1001);
e2.setName("ww");
e2.setSalary(12333);
//将e1和e2存储到作用域中(application session request pageContext)
pageContext.setAttribute("e1", e1); //JavaBean
pageContext.setAttribute("e2", e2); //JavaBean
pageContext.setAttribute("e3", "helloworld"); //字符串
%>
<!-- EL表达式获取JavaBean属性 语法:${对象名.属性名} -->
员工1的信息为:${e1.id} ${e1.name} ${e2.salary} <!-- 员工1的信息为:1 zs 12333.0 -->
<hr/>
员工2的信息为:${e2.id} ${e2.name} ${e2.salary} <!-- 员工2的信息为:1001 ww 12333.0 -->
<hr/>
e3的信息为:${e3} <!-- e3的信息为:helloworld -->
</body>
</html>
具体实现步骤:
第一步:
把Emp.java
中代码写好私有属性,右键单击选择Source中的Generate Getters and Setters…
第二步:
选择右上角Select All
第三步:
如图显示,说明自动添加添加get和set方法成功
效果图:
part1:
part2:
若在浏览器中输入http://localhost:8080/servlettest/el02.jsp?id=1001&a=1&a=2&a=3
,则如图下显示:
part3:
情况一:若在浏览器中输入http://localhost:8080/servlettest/el03.jsp
和http://localhost:8080/servlettest/el04.jsp
,则如图下显示:
情况二:关闭浏览器后直接输入http://localhost:8080/servlettest/el04.jsp
,效果图如下:
情况三:tomcat应用程序重启
若在浏览器中输入http://localhost:8080/servlettest/el04.jsp
,则如图下显示:
情况四:添加代码
若在浏览器中输入http://localhost:8080/servlettest/el03.jsp
,则如图下显示: