EL、JSTL详细讲解
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EL显示Form表单请求参数信息
EL提供了两个与输入有关的隐含对象
param 和paramValues 用于获取<form></form>表单提交的信息,用来解析request中的 参数 等同于Java中的request.getParameter(“参数名”)或 request.getParameterValues(“参数名”)
<body> 文本中用EL表达式来计算表达式的结果: 3+2=${3+2}<br/> 控件中的属性名和属性值使用EL表达式: <input type="text" name="${3+2}" value="${3+2}"/> </body>
使用EL的好处一
代替复杂代码,省去条件判断
获取存储在某作用域范围内的变量时,最早在JSP中的做法 如果改成EL表达式,显示作用域范围内的变量,代码简写为
EL和Bean结合举例
EL访问Bean属性的简略记法 EL方便读取属性不是基本类型的JavaBean属性
举例:School有属性:Teacher 和 Student,分别为Teacher对象 和Student对象 Teacher有属性:teacherName和intresting Student有属性:studentName和score
pageContext.setAttribute(“user”,iter.next()); %> <h1>${}</h1>
<%
} %>ຫໍສະໝຸດ 引用隐式对象EL提供了四个与范围有关的隐式对象,对应四个存取 范围
pageScope:范围和JSP的page相同,只限于当前页面 requestScope:范围和JSP的page相同,范围限于一次请求 sessionScope:范围和JSP的session相同,范围为一次会话 applicationScope:从服务器一开始执行服务,到服务器关 闭为止
如何解决这个问题
public class School{ 请求 private Teacher teacher; private Student student; 响应 …//属性的getter、setter方法 }
JSP 页面
静态内容 动态内容
JavaBean属性不是基本类 型,如何进行读取和赋值
Bean属性的简略记法
<%=user.getName() %>
${}
${}实质是调用user的getName()方法
使用EL的好处三
使用EL表达式可以输出MVC中的内容,代码简单
Servlet的 doPost()或doGet()方法中,保存在作用域范围内 数据,可以在其它的JSP页面获取。如Servlet中有如下代码:
<% if(request.getAttribute(“username”)!=null) ${username} { %> <%=request.getAttribute(“username”)%> <% } %>
使用EL的好处二
访问Bean的属性
EL提供了“.”和“[]”两种运算符来存取数据 使用useBean填充数据,并通过Bean实例来显示数据 第一种 点号记法:${BeanName.beanProperty} 第二种 数组记法:${BeanName[“beanProperty”]} 两种方法等同,在访问Bean属性时,第二种方法很少用
EL运算符1
EL表达式中支持 Java中所有的操作 符,并且还有一些 扩展,下面我们简 要做一下对照。
符号 说明
符号
==或eq
说明
相等(equals)
!=或ne
<或lt >或gt <=或le >=或ge
不相等(not equals)
小于(less than) 大于(greater than) 小于等于(less than or equals) 大于等于(greater than or equals) 比较运算
EL的作用域
使用EL的时候,默认会以一定顺序搜索四个作用 域,将最先找到的变量值显示出来。
如果有${username}这样一个表达式,它会去依次 调用: pageContext.getAttribute(“username”) -> request.getAttribute(“username”) -> session.getAttribute(“username”) -> application.getAttribute(“username”),只 要找到某一个不为空的值则调用它的toString() 方法并立刻返回调用结果;如果都没有找到,则 返回空字符串(而不是null)。
request.getSession().setAttribute(“loginedUser”,user);
在JSP页面中可以这样获取 ${}
EL的使用
EL在output.jsp中的使用
<%@page contentType="text/html; charset=gbk"%> <html> param是EL的隐式对象,等价 <head> 于request.getParameter("name"); <title>EL的使用</title> <jsp:useBean id= " bean" class=“.bzu.jw.bean.entity.Simplebean" scope="request" /> <jsp:setProperty name= " bean" property="name" value="${}" /> <jsp:setProperty name= " bean " property="age" value= "25" /> </head> <jsp:getProperty name= " bean" property="name“/> <body> 姓名:${} <br /> 年龄:${bean.age} EL表达式 EL表达式更简洁、易懂 </body> </html> output.jsp
可以选择在JSP中允许或禁用EL表达式,常 用方法有如下两种: 一种是每个页面中都做设置:
允许方法:
在servlet2.4之后默认方法为false,即可以不写 或<%@ page isELIgnored="false" %>
禁用方法:<%@ page isELIgnored="true" %>
EL主要功能
EL的功能
与<jsp:getProperty />类似 简化<jsp:getProperty /> 精确的访问存储对象 Bean属性的简略记法 空值取代错误消息
EL表达式的语法
基本格式
${表达式}
所有的EL都是以“${”开始,以“}”结尾 表达式与开始符和终结符的空格被忽略 表达式的值为null,则在页面中显示为一个空字符串,而不是null
还有一种批量禁用EL的方法,可以在WEB-INF/web.xml中使 用jsp-property-group标签批量禁用el,web.xml中进行如 下配置。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> </web-app>
在EL中,四个隐含对象只能单纯用来取得对应范围内 的属性值
EL隐式对象
EL隐式对象小结
隐式对象
作用域访问对象 pageScope requestScope
参数访问对象
JSP隐式对象
param
pageContext
paramValues sessionScope applicationScope
EL允许和禁用方法1
header
headerValues
对应request.getHeader()
对应request.getHeaderValues()
cookie
initParam
对应request.getCookies()
对应ServletContext.getInitParamter()
EL的使用方法
在页面上的任何地方使用${表达式} 任何地方:文本、属性、属性值等
+
* /或div %或mod
加
减 乘 除 求余
加减乘除四则运算
EL的运算符2
符号 说明
符号
说明
&&或and ||或or
!或not 逻辑运算
逻辑与 逻辑或
empty 是否为null或空字符串 ?: 三元运算符 特殊运算
取反
EL的运算符3
下面是所有运算符的显示结果,顺便说一下如果想 在JSP中显示${name}而不让JSP把它当作EL计算出 来,可以写成\${name},这样最后显示的结果就 是${name}了。
格式:${param.参数名}或${paramValues.参数名}
如在login.jsp 中表单控件名为username和password, 则在doLogin.jsp页面中可以使用如下方法获取请求参数
用户名: 密 码:
${ername}. <br> ${param.password}. <br>
EL的定义
为了计算和输出存储在标志位置的Java对象的 值,JSP2.0引入了一种简洁的语言。
EL(Expression
Language)表达式语言 标志位置:四种属性范围(page、request、 session、application)
EL是JSP2.0规范的一部分,只要容器支持 Servlet2.4/JSP2.0,就可以在JSP2.0网页中 直接使用EL。
}} }
${school.teacher.intresting} ${school.student.studentName} ${school.student.score}
EL访问集合 <%--要使用Iterator进行输出 --%> <%@ page import=“java.util.*” %> …… <% //获取存储在作用域范围内的列表对象 要使用Iterator进行输出 List l = (List) request.getAttribute(“loginedList”); Iterator iter = l.iterator(); while(iter.hasNext()){ //将取出的对象放在pageContext范围中
EL作用域
EL中的作用域 pageContext pageScope requestScope sessionScope applicationScope param paramValues 对应关系 当前页的pageContext对象 把page作用域中的数据映射为一个map对象 把request作用域中的数据映射为一个map对象 把session作用域中的数据映射为一个map对象 把application作用域中的数据映射为一个map对象 对应request.getParameter() 对应request.getParameterValues()
public class Teacher{ public class Student{ public class School{ 在JSP页面中使用EL表示下面属性 private String studentName; private String teacherName; private Teacher teacher; private String score; private float private Student intresting; student; ${school.teacher.teacherName} …//属性的getter、setter方法 …//属性的getter、setter方法 …//属性的getter、setter方法
JavaWeb开发技术
EL表达式和JSTL讲解
计算机科学技术系
本讲目标
理解表达式语言在JSP2.0中的使用及基本格式 掌握表达式语言在MVC设计模式中的主要作用 理解并会使用常用的JSTL标签
为什么需要EL?
JSP标准动作的局限
一般是操作JavaBean的属性 JavaBean的属性只能为基本数据类型 不能进行逻辑操作 EL和JSTL