总结:
监听器应用场景.
由于servletRequest,HttPSession,ServletContext对象都是容器创建通过对这些对象注册监听器,
就可以得知何时创建或销毁了他们
比如:
1.在容器启动时加载框架容器
2.在contextDestoryed方法中对应用的级别的资源进行释放.
3.统计在线人数.
EL,JSTL
EL表达式:
为什么需要EL表达式和JSTL标签
.JSP中嵌套的大量java代码增加了页面内容的复杂度,使得页面不够简洁,不方便代码的维护
为此sun公司制定了jsp标签(类是html标签)来代替java代码
Apache组织开发的一套标签被sun公司整合后,称为标准标签库(JSP Standard Tag Library即JSTL),需要
配合EL表达式,已达到减轻JSP文件的复杂度,方便维护JSP文件的目的
什么是EL表达式
EL(Expression Language)表示是一套简单的计算规则,用于给JSP 标签的属性赋值,也可以直接输出
表达式也可以脱了标签单独使用.
EL表达式的作用
.EL表达式的作用可以分为以下几类:
-访问bean的属性
-输出简单的运算结果
-获取请求参数值
使用EL表达式访问Bean属性
.通常情况下JavaBean指的是一个公共的类,含有一个空参的构造函数,一些属性以及访问这些属性提供的get/set方法
方法名与属性名需要符合一定的规范.
使用EL表达式访问Bean属性时可以使用如下两种方式
-方式一:${对象名.属性}
-方式二:${对象名["属性名"]}
控制器servlet
request.setAttribute("user",user);
传统的取出方式
EL表达式方式:${user.name}
page和pageContext区别
page:表示jsp页面本身
pageContext;表示当前页面的上下文对象:表示一个空间,可以放值也可以取值,作用范围仅限当前页面
(可以从页面的任何一个通过java小脚本的方式获取pageContext对象)
执行过程:容器会一次从pageContext,request,session,application中查找绑定名称为"user"的对象
找到后调用getName方法,然后输出.
访问Bean属性案例-1
.使用EL表达式访问Bean的各个属性
方案:创建User类对象,绑定在request对象中,输出基本类型属性值以及引用类型的属性值.
El表达式和java小脚本的比较
-如果request没有user对象
1.java小脚本吧空指针,500异常
2.而EL表达式输出空白
-如果没有那么属性赋值
1.java小脚本输出null
2.而EL输出""
小结:
以${user.name}方式访问会避免上端产生的问题
两种写法对比后,EL表达式具备了简介,以及会将null转换成""输出的特性
ps:使用EL表达式属性名不能写错,否则报错
${user.name}
方式二:${对象名["属性名"]}
.方括号中的属性名可以使用引号或双引号.
.此种方式允许[]中出现绑定名,还可以允许[]中出现从0开始的下标,用于访问数组中的某个元素的值.
request.setAttribute("user",user);
${user["name"]}
指定对象的查找范围.
在编写EL表达式时,可以指定查找对应绑定名对象的范围.
如:在session中查找邦定名为user的对象时,可编写如下代码:
request.setAttribute("id", "id");
号码:${shop.user[id]} 等同于:号码:${shop.user["id"]}
可以在request对象中绑定一个属性名称,然后在EL中通过这个绑定名来获取到属性名称从而间接访问对象属性.
${sessionScope.user.name}
pageScope
requestScope
ApplicationScope
ps:一旦指定了查找范围,那么在该范围内没有找到指定的绑定对象时,不会再去其他的区域中查找.
使用EL表达式做运算
.EL表达式可以做一些简单的计算,可将结果直接输出或给JSP标签的属性赋值
-算术运算:+ - * / % ps:这里+号只能求和,不能够连接字符串
-逻辑运算$$ || !
-关系运算:> < <= >= == !=
-empty:用来判断一个字符串是否为空,或者是一个集合是否为空
以下四种情况为true:
空字符串
空的集合
值为null
找不到对应的值
使用EL表达式获取请求参数值
request.getParamether("name")
等价于
${param.name}
.request.getParametherValues("name")
等价于
.${paramValues.city}
什么是JSTL
JSEL:(JSP Standard Tag Library)JSP标签库.是JAVAEE5.5核心
如何使用JSTL
1.将JSTL标签对应的jar文件拷贝到WEB-INF/lib目录下.
2.使用taglib指令导入要使用JSP标签
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
uri:jsp标签的命名空间
prefix:命名空间的前缀
核心标签: if标签
.语法:
<c:if test="" var="" scope="">
</c:if>
.当test属性为true时,执行标签体的内容,test属性可以使用EL表达式赋值
.var 属性:记录test结果的临时变量
.scope 属性:指定绑定的范围(pageContext,request,session,application)
ps:var和scope要配合使用
练习:通过if标签输出男性员工信息.
核心标签-choose标签
语法:
<c:choose>
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:otherwish></c:otherwish>
</c:choose>
when代表一个处理分支,当test属性为true时会执行该分支,可以出现1次或多次
当没有符合when时,则执行otherwish,可以出现0次或1次
核心标签-forEach标签
.用来遍历集合或数组
语法:
<c:forEach var="" items="">
</c:forEach>
items:指定要遍历的集合,一般使用EL表达式来赋值
var属性:指定一个绑定名称
varStatus属性:指定一个绑定名称,绑定值是一个有容器创建的对象,该对象封装了当前的迭代的状态.
varStatus属性
index返回正在被迭代的对象的下标,下标从0开始
count:返回是第几次迭代,从1开始.
练习:使用forEach标签输出绑定对象中的Employee属性
作业:将t_emp中的数据使用el表达式配合jstl标签的形式在页面显示出来