一:EL表达式:
1.定义:为了计算和输出存储在标志位置的Java对象的值,JSP2.0引入了一种简洁的语言。
2.基本格式:${表达式}
所有的EL都是以“${”开始,以“}”结尾
表达式与开始符和终结符的空格被忽略
表达式的值为null,则在页面中显示为一个空字符串,而不是null
3.EL表达式运算符
4.EL的作用域
使用EL的时候,默认会以一定顺序搜索四个作用域,将最先找到的变量值显示出来。
5.EL表达式的隐式对象
EL提供了四个与范围有关的隐式对象,对应四个存取范围
pageScope:范围和JSP的page相同,只限于当前页面
requestScope:范围和JSP的request相同,范围限于一次请求
sessionScope:范围和JSP的session相同,范围为一次会话
applicationScope:从服务器一开始执行服务,到服务器关 闭为止
在EL中,四个隐含对象只能单纯用来取得对应范围内的属性值
6.使用EL表达式的好处
1)代替复杂代码,省去条件判断
2)简单访问Bean的属性:${user.name}
3)使用EL表达式可以输出MVC中的内容,代码简单
例如:Servlet的 doPost()或doGet()方法中,保存在作用域范围内
数据,可以在其它的JSP页面获取。如Servlet中有如下代码:
request.getSession().setAttribute(“loginedUser”,user);
在JSP页面中可以这样获取:${loginedUser.name}
7.EL显示Form表单请求参数信息
EL提供了两个与输入有关的隐含对象:param 和paramValues
用于获取表单提交的信息,用来解析request中的参数
格式:${param.参数名}或${paramValues.参数名}
等同于Java中的request.getParameter(“参数名”)或request.getParameterValues(“参数名”)
8.总结EL表达式的主要功能
1)EL的功能
2)与
3)简化
4)精确的访问存储对象
5)Bean属性的简略记法
6)空值取代错误消息
二.JSTL
1.什么是JSTL
JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
2.JSTL标准标签库内的标签
3. 核心标签库
JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。
(1)表达式控制标签:out标签、set标签、remove标签、catch标签。
(2)流程控制标签:if标签、choose标签、when标签、otherwise标签。
(3)循环标签:forEach标签、forTokens标签。
(4)URL操作标签:import标签、url标签、redirect标签。
在JSP页面引入核心标签库的代码为:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
下面将按照功能分类,分别讲解每个标签的功能和使用方式。
1) 表达式控制标签
表达式控制分类中包括
1.
【功能】:用来显示数据对象(字符串、表达式)的内容或结果。
在使用Java脚本输出时常使用的方式为:
<% out.println(“字符串”)%>
<%=表达式%>
使用
提示:JSTL的使用是和EL表达式分不开的,EL表达式虽然可以直接将结果返回给页面,但有时得到的结果为空,
【语法1】:
【语法2】:
2.
功能:主要用于将变量存取于JSP范围中或JavaBean属性中。
语法1:存值,把一个值放在指定(page、session等)的map中。
含义:把一个变量名为name1值为“值1”的变量存储在指定的scope范围内。
含义:把一个变量名为name2,值为值2的变量存储在指定的scope范围内。
语法3:
含义:把一个值为“值3”赋值给指定的JavaBean的属性名。相当与setter()方法。
提示:从共能上分语法1和语法2(未写)、语法3和语法4(未写)的效果是一样的只是把value值放置的位置不同至于使用那个根据个人的喜爱,语法1和语法2是向scope范围内存储一个值,语法3和语法4是给指定的JavaBean赋值。
3.
【语法】:
其中var属性是必须的,scope可以以省略。
4.
【语法】:
容易产生异常的代码
【参数说明】:
var表示由用户定义存取异常信息的变量的名称。省略后也可以实现异常的捕获,当就不能显示的输出异常信息。
4.流程控制标签
流程控制标签主要用于对页面简单业务逻辑进行控制。流程控制标签包含有4个:
1).
【语法1】:
【语法2】:
【参数说明】:
(1)test属性用于存放判断的条件,一般使用EL表达式来编写。
(2)var指定名称用来存放判断的结果类型为true或false。
(3)scope用来存放var属性存放的范围。
【使用场景】:在开发中经常会出现不同用户的权限,首先对用户名进行判断(包括进行数据库验证,该功能可以由JavaBean实现,使用EL表达式得到一个布尔型的结果),把判断的结果存放在不同的JSP范围内(比如常用的session内),这样在每个页面都可以得到该用户的权限信息,根据不同权限的用户显示不同的结果。
2).
这3个标签通常情况下是一起使用的,
【语法1】:
…..//业务逻辑1
…..//业务逻辑2
….//业务逻辑3
【语法2】:
表达式
【语法3】:
表达式
【参数说明】:
(1)语法1为3个标签的嵌套使用方式,
(2)语法2为
(3)
5.循环标签
循环标签主要实现迭代操作。主要包含两个标签:
该标签根据循环条件遍历集合(Collection)中的元素。
【语法】:
本体内容
【参数解析】:
(1)var设定变量名用于存储从集合中取出元素。
(2)items指定要遍历的集合。
(3)varStatus设定变量名,该变量用于存放集合中元素的信息。
(4)begin、end用于指定遍历的起始位置和终止位置(可选)。
(5)step指定循环的步长。
其中varStatus有4个状态属性(见表9-2)。
表9-2 varStatus的4个状态
属性名 |
类型 |
说明 |
index |
int |
当前循环的索引值 |
count |
int |
循环的次数 |
frist |
boolean |
是否为第一个位置 |
last |
boolean |
是否为第二个位置 |
6.SQL标签库
JSTL提供了与数据库相关操作的标签,可以直接从页面上实现数据库操作的功能,在开发小型网站是可以很方便的实现数据的读取和操作。SQL标签库从功能上可以划分为两类:设置数据源标签、SQL指令标签。
引入SQL标签库的指令代码为:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
1) 设置数据源
使用
【语法1】:直接使用已经存在的数据源。
【语法2】:使用JDBC方式建立数据库连接。
[var=”name”]
[scope=”page|request|session|application”]/>
表9-15
参数名 |
说明 |
EL |
类型 |
必须 |
默认值 |
dataSource |
数据源 |
是 |
String Javax.sql.DataSource |
否 |
无 |
var |
指定存储数据源的变量名 |
否 |
String |
否 |
无 |
提示:是否必须是相对的,比如说如果使用数据源则,driver、url等就不再被使用。如果使用JDBC则要用到driver、url、user、password属性。
提示:可以把数据连接的配置存入session中,如果再用到数据库连接只须配置使用DataSource属性。
2 )SQL操作标签
JSTL提供了
1.
【语法】:
【属性说明】:见表9-16。
表9-16
参数名 |
说明 |
EL |
类型 |
必须 |
默认值 |
sql |
查询数据的SQL语句 |
是 |
String |
是 |
无 |
dataSource |
数据源对象 |
是 |
String Javax.sql.DataSoutce |
否 |
无 |
maxRow |
设定最多可以暂存数据的行数 |
是 |
String |
否 |
无 |
startRow |
设定从那一行数据开始 |
是 |
String |
否 |
无 |
var |
指定存储查询结果的变量名 |
否 |
String |
是 |
无 |
scope |
指定结果的作用域 |
否 |
String |
否 |
page |
使用
一般情况下使用
maxRows和startRow属性用来操作结果集,使用SQL语句首先吧数据放入内存中,检查是否设置了startRow属性,如果设置了就从starRow指定的那一行开始取maxRows个值,如果没有设定则从第一行开始取。
表9-17 结果集参数说明
属性名 |
类型 |
说明 |
rowCount |
int |
结果集中的记录总数 |
Rows |
Java.util.Map |
以字段为索引查询的结果 |
rowsByIndex |
Object[] |
以数字为作索引的查询结果 |
columnNames |
String[] |
字段名称数组 |
limitedByMaxRows |
boolean |
是否设置了maxRows属性来限制查询记录的数量 |
提示:limitedByMaxRows用来判断程序是否收到maxRows属性的限制。并不是说设定了maxRows属性,得到结果集的limitedByMaxRows的属性都为true,当取出的结果集小于maxRows时,则maxRows没有对结果集起到作用此时也为false。例如可以使用startRow属性限制结果集的数据量。
结果集的作用就是定义了数据在页面中的显示方式。下面给出了结果集每个属性的作用。
q rowCount属性。该属性统计结果集中有效记录的量,可以使用于大批量数据分页显示。
q Rows属性。等到每个字段对应的值。返回的结果为:字段名={字段值···}
q rowsByIndex属性。常用得到数据库中数据的方式,从有效行的第一个元素开始遍历,到最后一个有效行的最后一个元素。
q columnNames属性。用于得到数据库中的字段名。
q limitedByMaxRows属性。用于判断是否受到了maxRows的限制。
2).
【语法】:SQL语句放在标签属性中。
提示:
使用
3.
【语法】:
【参数说明】:
value的作用为SQL中的参数赋值。
4.
【语法】:
【参数说明】:
q value属性:java.util.Date类型的参数。
q type属性:指定填充日期的类型timestamp(全部日期和时间)、time(填充的参数为时间)、date(填充的参数为日期)。
5.
【语法】: