# 1. jsp标签和el表达式
## (1)jsp标签是什么?
jsp标签是一种用来替换jsp中java代码的技术,jsp标签类似于html
标签(有开始标记、属性、结束标记、标签体)。容器遇到jsp标签之后,会调用jsp标签对应的标签类中的java代码。
注:
使用jsp标签有两个好处:
a.利于jsp文件的维护:比如,将包含有java代码的jsp交给美工
去修改,就很不方便。使用jsp标签之后,jsp文件不再包含有
java代码了。
b.利于java代码的复用: 比如,可以开发一些具有常见功能的jsp标 签,可以在不同的应用中复用。
## (2)el表达式是什么?
是一套简单的运算规则,用于给jsp标签的属性赋值,也可以脱离jsp标签
直接使用。
## (3)el表达式的用法
### 1)访问bean的属性
注:
bean指的是符合javabean规范的java类:
` javabean规范(了解):
如果一个类,满足如下几个条件,就可以称之
为一个javabean:
public class
最好实现Serializable接口
public 构造器
有一些属性
对应的get/set方法
#### 第一种方式:
a.语法: ${user.username}
b.执行过程:
容器会依次从pageContext、request、session、
application中查找绑订名为"user"的对象,如果
找到了,就会调用"getUsername"方法然后输出。
c.优点:
会将null转换成""输出。
如果找不到对应的对象,不会产生空指针异常(会输出空字符串)。
d.指定查找范围:
可以使用pageScope、requestScope、sessionScope、
applicationScope来指定查找范围,比如,指定从
session中查找 ${sessionScope.user.username}。
#### 第二种方式:
a.语法: ${user['username']}
b.执行过程、优点、查找范围:同上。
c.有两种特殊用法:
c1. 允许[]里面出现绑订名。
c2. 允许[]里面出现从0开始的下标,用于访问数组中的某个元素。
## 2)做一些简单的运算
注:运算结果可以给jsp标签的属性赋值,也可以直接输出。
### a.算术运算
+,-,*,/,%
注:
+ 只能求和。
### b.关系运算
>,>=,<,<=,==,!=
### c.逻辑运算
&&,||,!
### d.empty
empty 用来判断集合内容是否为空,或者是否为一个空字符串。
## 3)读取请求参数值
a. ${param.username} 等价于
request.getParameter("username");
b. ${paramValues.interest} 等价于
request.getParameterValues("interest");
# 2. jstl (java standard tag lib)
## (1)什么是jstl?
apache开发的一套jsp标签,后来捐献给了sun,sun将其命名为jstl。
## (2)编程步骤
step1.导包。
jstl.jar
step2.使用taglib指令导入要使用的jsp标签。
<%@ taglib uri="" prefix=""%>
uri:指定jsp标签的命名空间。
注:
命名空间是为了区分同名的元素而在元素前添加的一段说明。
为了避免命名空间冲突,经常使用域名。
prefix:指定命名空间的别名(也可以称之为前缀)。
## (3)几个核心标签
### 1)if标签
<c:if test="">
标签体
</c:if>
当test属性值为true,执行标签体的内容。
test属性可以使用el表达式来赋值。
### 2)choose标签
<c:choose>
<c:when test="">
</c:when>
...
<c:otherwise>
</c:otherwise>
</c:choose>
when可以出现1次或者多次,表示一个分支(相当于一个if语句),当
test属性值为true时,会执行该标签体的内容。test属性值可以使用
el表达式来赋值。
otherwise可以出现0次或者1次,表示例外(相当于最后那个else语句)。
### 3)forEach标签
<c:forEach items="" var="" varStatus="">
</c:forEach>
items属性用来指定要遍历的集合或者数组,可以使用el表达式来赋值。
var属性用来指定绑订名。
注:
绑订范围固定是pageContext。该标签每次从集合或者数组中
取一个元素,然后绑订到pageContext上。
varStatus属性用来指定绑订名。
注:
绑订值是一个对象,由该标签创建。该对象提供了几个方法,
用于获得当前遍历的状态:
getCount(): 获得当前是第几次迭代(从1开始)。
getIndex():获得当前正在被迭代的元素的下标(从0开始)。
## (4)jsp标签是如何执行的?
容器依据标签的命名空间找到对应的描述文件(.tld文件),
接下来,依据标签名找到对应的标签类,然后将该标签类实例化
并调用相应的方法。