EL(Expression Language) 目的:为了使JSP写起来更加简单。
基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0 将 EL 表达式添加为一种脚本编制元素。
EL表达式语法,以“${”开头以“}”结尾
形如:${ expression }
例如:${“学习EL表达式”} ——>输出为“学习EL表达式”
例如:\${expression}
<%@page isELIgnored="布尔值"%>
<jsp-config>
<jsp-property>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
//值为true表示禁用EL,值为false使用EL
</jsp-property>
</jsp-config>
如果在EL中使用保留的关键字的时候会出错,所以为变量命名时不要使用保留关键字命名
通过“[ ]”,“.”两个运算符来访问数据
${userInfo.id}
${userInfo[id]}
//两个一样
获取request范围中的数组book中第一个元素
${book[0]}
<%
//定义一维数组
String[] arr={"Java Web开发典型模块大全","Java范例完全自学手册","JSP项目开发全程实录"};
//将数组保存到request对象中
request.setAttribute("book",arr);
%>
<%
//获取保存到request范围内的变量
String[] arr1=(String[])request.getAttribute("book");
//通过循环和EL输出一维数组的内容
for(int i=0;irequest .setAttribute("requestI",i);
%>
${requestI}:${book[requestI]}<br>
<%} %>
<%
List<String> list = new ArrayList<String>(); //声明一个List集合的对象
list.add("饼干");
//添加第1个元素
list.add("牛奶");
//添加第2个元素
list.add("果冻");
//添加第3个元素
session.setAttribute("goodsList",list); //将List集合保存到session对象中
%>
<%
List<String> list1=(List<String>)session.getAttribute("goodsList"); //获取保存到session范围内的变量
//通过循环和EL输出List集合的内容
for(int i=0;irequest .setAttribute("requestI",i); //将循环增量保存到request范围内
%>
${requestI}:${goodsList[requestI]}<br>
<%} %>
${条件表达式 ? 表达式 1:表达式 2}
表达式1:当条件为真,将要返回的值
表达式2:当条件为假,将要返回的值
在EL中判断对象是否为空,可以通过empty运算符实现,该运算符是一个前缀(prefix)运算符
格式:${empty expression}
可与条件运算符一起用
EL提供11个隐含对象,来获取Web应用程序中的相关数据,类似于JSP内置对象。PageContext是JavaBean对象并且属于javax.servlet.jsp.PageContext类,其他隐含对象都属于java.util.Mao类型。
隐含对象分为三种:
通过pageContext获取JSP内置对象的request对象
例如:
获取端口号
${pageContext.request.serverPort}
${pageContext.servletContext.contextPath}
对应的方法在JSP里面介绍
在EL中提供4个用于访问作用域范围的隐含对象,pageScope、requestScope、sessionScope、
applicationScope。4个隐含对象只能用来取得指定范围内的属性值。
pageScope隐含对象用于返回包含page范围内的属性值集合
在com包中创建类User类
public class User {
private String name = "";// 用户名
// name属性对应的set方法
public void setName(String name) {
this.name = name;
}
// name属性对应的get方法
public String getName() {
return name;
}
}
创建index.jsp
<body>
<jsp:useBean id="user" scope="page" class="com.com.User" type="com.com.User">
<jsp:setProperty name="user" property="name" value="我是你获取的值"/>
jsp:useBean>
${pageScope.user.name}
body>
requestScope对象用于返回包含request范围内的属性值集合,返回值为java.util.Map对象
例如:
<%
request.setAttribute("userName","we are boy");
%>
${request.Scope.userName}
sessionScope隐含对象用于返回包含session范围内的属性集合,返回值为java.util.Map对象
例如:
<%
session.setAttribute("userName","we are boy");
%>
${session.Scope.userName}
applicationScope对象用于返回application范围内的属性值集合,返回值为java.util.Map对象
例如:
<%
application.setAttribute("userName","we are boy");
%>
${application.Scope.userName}
在EL中,提供了6个访问环境信息的隐含对象
param对象用于获取请求参数的值,应用在参数值只有一个的情况。
例如:
"name" type="text">//表单输入的值
${param.name}获取表单输入的值
如果一个请求参数名对应多个值的时候,利用paramValues可以获取多个值
例如:
"favorite" type="checkbox" id="favorite" value="游泳">
游泳
"favorite" type="checkbox" id="favorite" value="旅游">
旅游
"favorite" type="checkbox" id="favorite" value="看书">
看书
"favorite" type="checkbox" id="favorite" value="唱歌">
唱歌
//提交表单后
<%request.setCharacterEnconding("utf-8")%>
爱好为:${paramValues.favorite[0]} ${paramValues.favorite[1]}
${paramValues.favorite[2]} ${paramValues.favorite[3]}
hearder对象用于获取HTTP请求的一个具体header的值,如果同一个header有多个值则用hearderValue
initParam对象用于获取web应用初始化参数的值
例如:
param>
<param-name>bookparam-name>
<param-value>我们努力过param-value>
param>
通过EL表达式获取值
${intParam.book}
在EL中没有提供向cookie中保存值的方法,但是提供了访问请求设置的cookie的方法,这可以通过cookie隐含对象实现
<%
Cookie cookie=new Cookie("user","获取的值")
response.addCookie(cookie);
%>
${cookie.user.value}//获取到cookie的值
在JSP页面中引用标签库,调用定义的EL函数实现功能
例子:处理字符串中的回车和换行和空格符
(1)在包com下创建ChangeShiftEnter类
package com;
public class ChangeShiftEnter {
public static String shiftEnter(String str) { // 定义公用的静态方法
String newStr = str.replaceAll("\r\n", "
"); // 替换回车换行符
newStr = newStr.replaceAll(" ", " ");// 替换空格符
return newStr;
}
}
(2)在WEB-INF下创建名称为Change.tld
<taglib 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
web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0tlib-version>
<uri>/Changeuri> //uri用于指定tld文件路径
<function>
<name>shiftEntername>
<function-class>com.ChangeShiftEnterfunction-class>//java包
<function-signature>java.lang.String shiftEnter(java.lang.String)
function-signature>
function>
taglib>
(3)创建index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>定义EL函数处理字符串中的回车换行符和空格符title>
head>
<body>
<form name="form1" method="post" action="deal.jsp">
<textarea name="content" cols="30" rows="5">textarea>
<br>
<input type="submit" name="Button" value="提交" >
form>
body>
html>
(4)创建deal.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/Change" prefix="wghfn"%>//prefix是前缀
<%request.setCharacterEncoding("UTF-8"); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>显示结果title>
head>
<body>
内容为:<br>
${wghfn:shiftEnter(param.content)}
body>
html>