目的:为了使JSP写起来更加简单,计算和输出存储在标志位置的Java对象的值,JSP2.0引入了EL表达式。
EL的内置对象:pageScope、requestScope、sessionScope、applicationScope
如果只是使用EL表达式不需要引入任何jar包,只要jsp/servlet容器实现了J2EE1.4/Servlet2.4、JSP2.0规范就可以。
El的功能:
与<jsp:getProperty />类似
简化<jsp:getProperty />
精确的访问存储对象
Bean属性的简略记法
空值取代错误消息
EL表达式语法:
${表达式}
注意:表达式的值为null,则页面显示为一个空字符串,而不是null.
EL的作用域:
使用EL时,默认以一定的顺序搜索四个作用域,将最先找到的变量值显示出来,只要找到某一个不为空的值则调用他的同toString()方法并返回调用结果,如果都没有找到,则返回空字符串,而不是null.
Demo:测试EL表达式
package com.lf.jstl; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class JstlElServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("hello", "Hello World"); request.getRequestDispatcher("/jstl_el.jsp").forward(request, response); } }
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <!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=GB18030"> <title>Insert title here</title> </head> <body> <h1>测试EL表达式</h1> 不使用EL表达式获取字符串:<br> 使用hello(jsp脚步):<%=request.getAttribute("hello") %><br> 使用EL表达式获取字符串:<br><span style="white-space:pre"> hello(el表达式 语法:$和{}): ${hello}<br> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <body> <a href="servlet/JstlElServlet">测试EL表达式</a> </body> </html>
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>JstlElServlet</servlet-name> <servlet-class>com.lf.jstl.JstlElServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>JstlElServlet</servlet-name> <url-pattern>/servlet/JstlElServlet</url-pattern> </servlet-mapping> </web-app>
预览结果:
单机测试EL表达式:一种是不使用EL表达式的,一种是使用EL表达式获取字符串的。
使用EL的好处:
1、代替复杂代码,省去条件判断
2、访问Bean的属性
EL提供了“.”和“[]”两种运算符来存取数据
使用userBean填充数据,并通过Bean实例来显示数据
Bean属性的简略记法:
1、点号记法:${BeanName.beanProperty}
2、数组记法:${BeanName["beanProperty"]}比较少用
3、使用EL表达式可以输出MVC的内容,代码简单。
Servlet的doPost()或doGet()方法中,保存在作用域范围内的数据,可以在其它的JSP页面获取