在JSP的开发中,为了获取Servlet中存储的数据,通常需要很多的Java代码,这样的做法使的JSP页面非常混乱,为此,JSP2.0中提供了一种EL规范,是一种简单的数据访问语言。
1.初识EL
EL表达式是非常简单的,都是以" ${ " 开始,以“ } ”结束。具体格式如下:
${ 表达式} ,表达式必须符合语法。
${表达式}:EL语句在执行,会调用pageContext.findAttribute()方法,以表达式为标识,分别从page,request,session,application四个域中查找相应的对象,找到此对象就返回此对象的值,没有找到就返回“ ”,不是null,从小到大的域查找,找到就不再找。
例如:${pageScope.name}:从page域中查找name的属性,域后面必须跟一个Scope,当没有指定的域时,就从四个域中依次查找。
实例:设置一个Myservlet,在MyServlet中给request中存属性,转发到myjsp.jsp
Myservlet.java
package cn.it.ELDemo; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/MyServlet") public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; public MyServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //给域对象设置属性和值 request.setAttribute("username", "itcase"); request.setAttribute("password", "123"); //创建一个转发器 RequestDispatcher dispatcher=request.getRequestDispatcher("/myjsp.jsp"); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
myjsp.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>EL表达式的使用</title> </head> <body> 用户名:<%=request.getAttribute("username") %><br> 密码:<%=request.getAttribute("password") %><br/> <hr> 使用EL表达式<br> 用户名:${username } 密码:${password} </body> </html>
运行结果:
EL表达式代替的是:<%=表达式%>,因此EL表达式只能够代替输出,如果设置属性则需要使用JSTL。
2.EL中的运算
EL表达式支持简单的运算,例如:“+”,“-”,“*”,“/”;
“ . ”点运算符:EL中的点号运算符用来表示访问JSP页面中的某些对象的属性,如JavaBean对象,List集合,Array数组,其语法格式如下:
${customer.name}
这个相当于getName方法,因此,一个类中只有getXxx方法,无论有没有setXxx方法,或者有没有Xxx属性,使用customer.name获得getXxx方法里面的内容。
“【】“方括号运算符于点运算符的功能相同,都用于访问JSP页面中的某些属性,当需要获得的属性名中包含一些特殊的符号,如”-“,”?“时可以使用方括号运算符来访问该属性:
${user["my_name"]}
方括号运算符和点运算符:
- 在某些请况下,方括号运算符和点括号运算符是可以相互转换的,如${user.name}和${user.["name"]};
- 方括号运算符还可以访问List集合或者数组中某个指定的元素,如${user[0]};
- 方括号运算符和点运算符可以结合使用,如${user[0].name};