首先看EL表达式的语法:${EL表达式}。
要使用EL表达式还要确定EL表达式没有被禁用,JSP中提供了三种方式禁用EL表达式。
1、使用\符号
在EL表达式的起始标记前加上\符号
\${name}
2、使用page指令
语法格式如下:
<%@ page isELIgnored="true" %>
使用该语句整个页面中的EL表达式将被忽略。
3、在web.xml文件配置<el-ignored>元素
在web.xml文件中配置<el-ignored>元素可以实现禁用服务器中的EL表达式,具体配置如下:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
EL表达是具体用法如下:
${username}这个表达式就是获得变量username的值。
.操作符用来访问对象的属性,例如:${student.name}这个表达式我们可以获得student对象的name属性。
[]操作符也可以用来访问对象的属性,例如:${student[“name”]},与上述表达式效果相同;同时还能用来访问数组或集合,例如:studentlist[0]。
特例:对于变量中如果存在特殊字符(例如.)必须使用[]访问属性。
例如:request.setAttribute(“student.name”,”张三”);
这时使用${student.name}显示结果为空,但是使用${requestScope[student.name]},显示张三。
首先看读取对象属性的方法:
有Student类,该类有name和password两个属性。
package Temp;
public class Student {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
然后看在请求对象中将一个Student对象封装,并转发给下一个界面
<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="Temp.Student" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<%
Student student = new Student();
student.setName("张三");
student.setPassword("张三密码");
request.setAttribute("mess", student);
request.getRequestDispatcher("MyJsp.jsp").forward(request, response);
%>
</body>
</html>
然后看下一个界面如何使用EL表达式处理
<%@page import="Temp.Student"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'MyJsp.jsp' starting page</title>
</head>
<body>
${mess["name"] }
<br>
${mess.name}
</body>
</html>
然后看下一个示例,如何读取数组中的元素
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'ReadArray.jsp' starting page</title>
</head>
<body>
<%
String[] fruits = {"苹果","香蕉","橘子","西瓜"};
request.setAttribute("fruit", fruits);
%>
${fruit[0] }
</body>
</html>
这时将在页面中输出苹果。如果数组越界,将不显示任何数据,也不会报错。
注意:1、EL表达式区分大小写。2、使用EL前,必须先将对象存入作用域中。将对象存入作用域不会复制对象,作用域只保存该对象的引用,所以对服务器几乎没有什么影响。
EL运算符
() | 改变运算优先级,例如:$(3*(4+5)) |
+ - * / % | 算术运算符,例如:$(a+b) |
== != > >= < <= | 关系运算符,例如:$(a==b) |
&& || ! | 逻辑运算符,例如:$(true&&false) |
? : | 条件运算符,例如:$(a?b:c) |
Empty | 用于检测变量是否存在,是否等于null,例如:$(empty name) |
注意:EL表达式无法向像java一样将两个字符串用"+"运算符连接,所以${"小"+“明”}的写法是错误的,但是我们可以采用${"小"}${"明"}这样连接。
${username}他的意思是取出 某一个范围中名称为username的变量。因为我们并没有制定他是那个范围的username,所以他会依次从page、request、session、application范围查找,如果途中找到username,就直接返回,不继续查找,如果全部范围都没有找到就会返回null。
EL表达式的功能:
1、取得javaBean对象的属性,例如:${news.title}获取新闻对象的标题属性。
2、获得数组、集合元素,例如:${list[0]}获取list集合的第一个元素。
3、使用各类运算符对原始数据进行简单处理,例如:${a+b}计算a+b的值。
4、屏蔽掉一些常见的异常,例如:${username}当username为空时也不会报错。
5、能实现简单的自动类型转换,例如:${news}获取新闻对象,相当于(News)request.getAttribute("news");
如果指定EL取值作用域时,只需要在变量前面加上作用域即可,例如:requestScope、sessionScope……