EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
基本语法:${表达式内容}
例如:在浏览器中输出请求域中名称为message的内容。
假定,在请求域中存入了一个名称为message的数据(request.setAttribute("message","EL");
),此时在jsp中获取的方式,如下表显示:
Java代码块 | JSP表达式 | EL表达式 |
---|---|---|
<% |
<%=request.getAttribute("message")%> |
${message} |
通过上面可以看出,都可以从请求域中获取数据,但是EL表达式写起来是最简单的方式。这也是以后我们在实际开发中,当使用JSP作为视图时,绝大多数都会采用的方式。
EL表达式获取四大域中的数据
它只能从四大域中获取数据,调用的就是findAttribute(name,value);
方法,根据名称由小到大逐个域中查找,找到就返回,找不到就什么都不显示。它可以获取对象,可以是对象中关联其他对象,可以是一个List集合,也可以是一个Map集合。
值是对象:${键.属性名}
// 属性指的setXxx或getXxx的xxx,遵循了: OGNL(对象图导航语言, 操作东西都是属性)表达式
值是数组或者单列集合:${键[索引]}
值是map集合:${键.map的键} 注意map的键不带引号
EL表达式中支持运算符:算术, 逻辑 , 比较, 三元运算
${empty 对象} :
${not empty 对象} 判断不为空
注意:在使用EL表达式时,它帮我们做了一些处理,使我们在使用时可以避免一些错误。它没有空指针异常,没有数组下标越界,没有字符串拼接。
JSTL的全称是:JSP Standard Tag Libary。它是JSP中标准的标签库。它是由Apache实现的。
组成 | 作用 | 说明 |
---|---|---|
Core | 核心标签库。 | 通用逻辑处理 |
Fmt | 国际化有关。 | 需要不同地域显示不同语言时使用 |
Functions | EL函数 | EL表达式可以使用的方法 |
要想使用JSTL标签库,在javaweb工程中需要导入坐标。首先是在工程的WEB-INF目录中创建一个lib目录,接下来把jstl的jar拷贝到lib目录中,最后在jar包上点击右键,然后选择【Add as Libary】添加。
JSTL核心标签库
常用标签:
标签名称 | 功能分类 | 分类 | 作用 |
---|---|---|---|
|
流程控制 | 核心标签库 | 用于判断 |
|
流程控制 | 核心标签库 | 用于多个条件判断 |
|
迭代操作 | 核心标签库 | 用于循环遍历 |
JSTL的使用
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>JSTL的常用标签title>
head>
<body>
<%-- c:if c:choose c:when c:otherwise --%>
<% pageContext.setAttribute("score","F"); %>
<c:if test="${pageScope.score eq 'A' }">
优秀
c:if>
<c:if test="${pageScope.score eq 'C' }">
一般
c:if>
<hr/>
<c:choose>
<c:when test="${pageScope.score eq 'A' }">
AAA
c:when>
<c:when test="${pageScope.score eq 'B' }">BBB
c:when>
<c:when test="${pageScope.score eq 'C' }">CCC
c:when>
<c:when test="${pageScope.score eq 'D' }">DDD
c:when>
<c:otherwise>其他c:otherwise>
c:choose>
<%-- c:forEach 它是用来遍历集合的
属性:
items:要遍历的集合,它可以是EL表达式取出来的
var:把当前遍历的元素放入指定的page域中。 var的取值就是key,当前遍历的元素就是value
注意:它不能支持EL表达式,只能是字符串常量
begin:开始遍历的索引
end:结束遍历的索引
step:步长。i+=step
varStatus:它是一个计数器对象。里面有两个属性,一个是用于记录索引。一个是用于计数。
索引是从0开始。计数是从1开始
--%>
<hr/>
<% List<String> list = new ArrayList<String>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
list.add("EEE");
list.add("FFF");
list.add("GGG");
list.add("HHH");
list.add("III");
list.add("JJJ");
list.add("KKK");
list.add("LLL");
pageContext.setAttribute("list",list);
%>
<c:forEach items="${list}" var="s" begin="1" end="7" step="2">
${s}<br/>
c:forEach>
<hr/>
<c:forEach begin="1" end="9" var="num">
<a href="#">${num}a>
c:forEach>
<hr/>
<table>
<tr>
<td>索引td>
<td>序号td>
<td>信息td>
tr>
<c:forEach items="${list}" var="s" varStatus="vs">
<tr>
<td>${vs.index}td>
<td>${vs.count}td>
<td>${s}td>
tr>
c:forEach>
table>
body>
html>
过滤器——Filter,它是JavaWeb三大组件之一。另外两个是Servlet和Listener。
它是在2000年发布的Servlet2.3规范中加入的一个接口。是Servlet规范中非常实用的技术。
它可以对web应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的操作。
常见应用场景:URL级别的权限控制;过滤敏感词汇;中文乱码问题等等。
作用是在"请求"达到资源之前, 在响应到达浏览器之前, 做一些统一的操作
使用步骤:
<filter>
<filter-name>名称filter-name>
<filter-class>过滤器的全类名filter-class>
filter>
<filter-mapping>
<filter-name>这个名称和上面保持一致filter-name>
<url-pattern>拦截路径url-pattern>
filter-mapping>
过滤器的生命周期:创建到销毁的过程
服务器启动时就会执行 init(); 方法
每次拦截都会执行 doFilter(); 方法
当服务器正常关闭或者项目被移除执行 destroy();方法
所以filter是一个单例!
很少为单个Filter去配置参数了 所以FilterConfig 就不常用了,它的使用和servletConfig用法相似!
观察者设计模式:它是事件驱动的一种体现形式。就好比在做什么事情的时候被人盯着。当对应做到某件事时,触发事件。
观察者模式通常由以下三部分组成:
事件源:触发事件的对象。
事件:触发的动作,里面封装了事件源。
监听器:当事件源触发事件时,要做的事情。一般是一个接口,由使用者来实现。
Servlet规范中的8个监听器:
<listener>
<listener-class>监听器的全类名listener-class>
listener>
以下监听器的使用和配置与全局参数类似.