目的:为了使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页面获取