`
qcyycom
  • 浏览: 188838 次
社区版块
存档分类
最新评论

Java程序员从笨鸟到菜鸟之(十九)EL表达式和JSTL

    博客分类:
  • java
阅读更多

 

一:EL表达式:

1.定义:为了计算和输出存储在标志位置的Java对象的值,JSP2.0引入了一种简洁的语言。

2.基本格式${表达式}

所有的EL都是以“${”开始,以“}”结尾

表达式与开始符和终结符的空格被忽略

表达式的值为null,则在页面中显示为一个空字符串,而不是null

3.EL表达式运算符

 

 

 

 

 

 

4.EL的作用域

使用EL的时候,默认会以一定顺序搜索四个作用域,将最先找到的变量值显示出来。

 

 

 

 

 

 

5.EL表达式的隐式对象

EL提供了四个与范围有关的隐式对象,对应四个存取范围

pageScope:范围和JSPpage相同,只限于当前页面

requestScope:范围和JSPrequest相同,范围限于一次请求

sessionScope:范围和JSPsession相同,范围为一次会话

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

用于获取<form></form>表单提交的信息,用来解析request中的参数

格式:${param.参数名}${paramValues.参数名}

等同于Java中的request.getParameter(“参数名”)request.getParameterValues(“参数名”)

8.总结EL表达式的主要功能

1EL的功能

2)与<jsp:getProperty />类似

3)简化<jsp:getProperty />

4)精确的访问存储对象

5Bean属性的简略记法

6)空值取代错误消息

 

 

 

二.JSTL

1.什么是JSTL

JSTLJavaServerPages Standard Tag LibraryJSP标准标签库

2.JSTL标准标签库内的标签

 

 

3. 核心标签库

JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。

1)表达式控制标签:out标签、set标签、remove标签、catch标签。

2)流程控制标签:if标签、choose标签、when标签、otherwise标签。

3)循环标签:forEach标签、forTokens标签。

4URL操作标签:import标签、url标签、redirect标签。

JSP页面引入核心标签库的代码为:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

下面将按照功能分类,分别讲解每个标签的功能和使用方式。

1) 表达式控制标签

表达式控制分类中包括<c:out><c:set><c:remove><c:catch>4个标签,现在分别介绍它们的功能和语法。

1.<c:out>标签

【功能】:用来显示数据对象(字符串、表达式)的内容或结果。

在使用Java脚本输出时常使用的方式为:

<% out.println(字符串)%>

<%=表达式%>

使用<c:out>标签就可以实现以上功能。

<c:out value=字符串>

<c:out value=EL表达式>

提示:JSTL的使用是和EL表达式分不开的,EL表达式虽然可以直接将结果返回给页面,但有时得到的结果为空,<c:out>有特定的结果处理功能,EL的单独使用会降低程序的易读性,建议把EL的结果输入放入<c:out>标签中。

<c:out>标签的使用有两种语法格式。

【语法1】:

<c:out value=要显示的数据对象” [escapeXml=true|false] [default=默认值]>

【语法2】:

<c:out value=要显示的数据对象” [escapeXml=true|false]>默认值

2.<c:set>标签

功能:主要用于将变量存取于JSP范围中或JavaBean属性中。

<c:set>标签的编写共有4种语法格式。

语法1:存值,把一个值放在指定(pagesession等)的map中。

<c:set value=1” var=name1” [scope=page|request|session|application]>

含义:把一个变量名为name1值为“值1”的变量存储在指定的scope范围内。

含义:把一个变量名为name2,值为值2的变量存储在指定的scope范围内。

语法3<c:set value=3” target=JavaBean对象” property=属性名/>

含义:把一个值为“值3”赋值给指定的JavaBean的属性名。相当与setter()方法。

提示:从共能上分语法1和语法2(未写)、语法3和语法4(未写)的效果是一样的只是把value值放置的位置不同至于使用那个根据个人的喜爱,语法1和语法2是向scope范围内存储一个值,语法3和语法4是给指定的JavaBean赋值。

3.<c:remove>标签

<c:remove>标签主要用来从指定的JSP范围内移除指定的变量。

【语法】:

<c:remove var=变量名” [scope=page|request|session|application]/>

其中var属性是必须的,scope可以以省略。

4.<c:catch>标签:用来处理JSP页面中产生的异常,并将异常信息存储。

【语法】:<c:catch var=name1>

容易产生异常的代码

</c:catch>

【参数说明】:

var表示由用户定义存取异常信息的变量的名称。省略后也可以实现异常的捕获,当就不能显示的输出异常信息。

4.流程控制标签

流程控制标签主要用于对页面简单业务逻辑进行控制。流程控制标签包含有4个:<c:if>标签、<c:choose>标签、<c:when>标签和<c:otherwise>标签。下面将介绍这些标签的功能和使用方式。

1).<c:if>标签

<c:if>同程序中的if作用相同,用来实现条件控制。

【语法1】:

<c:if test=条件1” var=name” [scope=page|request|session|application]>

【语法2】:

<c:if test=条件2” var=name[scope=page|request|session|application]>

【参数说明】:

1test属性用于存放判断的条件,一般使用EL表达式来编写。

2var指定名称用来存放判断的结果类型为truefalse

3scope用来存放var属性存放的范围。

【使用场景】:在开发中经常会出现不同用户的权限,首先对用户名进行判断(包括进行数据库验证,该功能可以由JavaBean实现,使用EL表达式得到一个布尔型的结果),把判断的结果存放在不同的JSP范围内(比如常用的session内),这样在每个页面都可以得到该用户的权限信息,根据不同权限的用户显示不同的结果。

2).<c:choose>、<c:when>和<c:otherwise>标签

3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when><c:otherwise>标签的父标签来使用。

【语法1】:

[html] view plaincopy
  1. <c:choose>  
  2.          <c:when>  
  3. …..//业务逻辑1  
  4.           </c:when>  
  5.          <c:otherwise>  
  6. …..//业务逻辑2  
  7.          </c:otherwise>  
  8. ….//业务逻辑3  
  9. </c:choose>  
  10. 【语法2】:  
  11. <c:when text=”条件”>  
  12. 表达式  
  13. </c:when>  
  14. 【语法3】:  
  15. <c:otherwise>  
  16. 表达式  
  17. </c:otherwise>  


【参数说明】:

1)语法13个标签的嵌套使用方式,<c:choose>标签只能和<c:when>标签共同使用。

2)语法2<c:when>标签的使用方式,该标签都条件进行判断,一般情况下和<c:choose>共同使用。

3<c:otherwise>不含有参数,只能跟<c:when>共同使用,并且在嵌套中只允许出现一次。

 5.循环标签

循环标签主要实现迭代操作。主要包含两个标签:<c:forEach><c:forTokens>标签,我们主要是看<c:forEach>标签

该标签根据循环条件遍历集合(Collection)中的元素。

【语法】:

<c:forEach var=name” items=Collection” varStatus=StatusName” begin=begin” end=end” step=step>

本体内容

</c:forEach>

【参数解析】:

1var设定变量名用于存储从集合中取出元素。

2items指定要遍历的集合。

3varStatus设定变量名,该变量用于存放集合中元素的信息。    

4beginend用于指定遍历的起始位置和终止位置(可选)。

5step指定循环的步长。

其中varStatus4个状态属性(见表9-2)。

9-2 varStatus4个状态

属性名

类型

说明

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) 设置数据源

使用<sql:setDataSource>标签可以实现对数据源的配置。

【语法1】:直接使用已经存在的数据源。

<sql:setDataSource dataSource=dataSource[var=name]                   [scope=page|request|session|application]/>

【语法2】:使用JDBC方式建立数据库连接。

 

[html] view plaincopy
  1. <sql:setDataSource driver=”driverClass” url=”jdbcURL”                                          user=”username”                                         password=”pwd”                                                         
[html] view plaincopy
  1. [var=”name”]         
[html] view plaincopy
  1. [scope=”page|request|session|application”]/>  


9-15 <sql:DataSource>特殊标签属性说明

参数名

说明

EL

类型

必须

默认值

dataSource

数据源

String

Javax.sql.DataSource

var

指定存储数据源的变量名

String

提示:是否必须是相对的,比如说如果使用数据源则,driverurl等就不再被使用。如果使用JDBC则要用到driverurluserpassword属性。

提示:可以把数据连接的配置存入session中,如果再用到数据库连接只须配置使用DataSource属性。

2 )SQL操作标签

JSTL提供了<sql:query><sql:update><sql:param><sql:dateParam><sql:transaction>5个标签,通过使用SQL语言操作数据库,实现增加、删除、修改等操作。下面将介绍这5个标签的功能和使用方式。

1<sql:query>标签用来查询数据。

【语法】:

[html] view plaincopy
  1. <sql:query sql=”sqlQuery” var=”name” [scope=”page|request|session|application”]  
  2.   
  3.                    [dataSource=”dateSource”]  
  4.   
  5.                    [maxRow=”maxRow”]  
  6.   
  7.                    [startRow=”starRow”]/>  

 

【属性说明】:见表9-16

9-16 <sql:query>标签属性说明

参数名

说明

EL

类型

必须

默认值

sql

查询数据的SQL语句

String

dataSource

数据源对象

String

Javax.sql.DataSoutce

maxRow

设定最多可以暂存数据的行数

String

startRow

设定从那一行数据开始

String

var

指定存储查询结果的变量名

String

scope

指定结果的作用域

String

page

使用<sql:query>必须指定数据源,dataSource是可选的,如果未给定该属性标签会在page范围内查找是否设置过数据源,如果没有找到将抛出异常。

一般情况下使用<sql:setDateSource>标签设置一个数据源存储在session范围中,当需要数据库连接时使用dataSource属性并实现数据库的操作。

<sql:query>var属性是必须的用来存放结果集,如果没有指定scope范围则默认为page,即在当前页面我们可以随时输出查询结果。结果集有一系列的属性如表9-17所示。

maxRowsstartRow属性用来操作结果集,使用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:update>标签

<sql:update>用来实现操作数据库如:使用createupdatedeleteinsertSQL语句,并返回影响记录的条数。

【语法】:SQL语句放在标签属性中。

<sql:update sql=SQL语句” [var=name] [scope=page|request|session|application]                                               [dateSource=dateSource]/>

提示:<sql:update>标签的属性同<sql:query>标签的属性相比只减少了maxRowsstartRow2个属性。其他参数用法一样。

使用<sql:update>可以实现数据表的创建、插入数据、更行数据、删除数据。使用时只须在标签中放入正确的SQL语句即可,同时要捕获可能产生的异常。本节只对一个简单的插入操作进行说明。

3.<sql:param>标签

<sql:param>标签用于动态的为SQL语句设定参数,同<sql:query>标签共同使用。可以防止SQL注入作用类似于java.sql.PreparedStatement

【语法】:

<sql:param value=value/>

【参数说明】:

value的作用为SQL中的参数赋值。

4.<sql:dataParam>标签主要用于为SQL标签填充日期类型的参数值。

【语法】:<sql:dateParam value=date[type=timestamp|time|date]/>

【参数说明】:

q       value属性:java.util.Date类型的参数。

q       type属性:指定填充日期的类型timestamp(全部日期和时间)、time(填充的参数为时间)、date(填充的参数为日期)。

5<sql:transaction>标签

<sql:transaction>标签提供了数据操作的一种安全机制(即事务回滚),当操作数据库的某条SQL语句发生异常时,取消<sql:transaction>标签体中的所有操作,恢复原来的状态,重新对数据库进行操作。

【语法】:更多信息请查看 java进阶网 http://www.javady.com

[html] view plaincopy
  1. <sql:transaction [dataSource=”dataSource”]  
  2.   
  3. [isolation=”read_committed|read_uncommitted|repeatable|serializable”]  
  4.   
  5. >   
  6.   
  7. <sql:query>  
  8.   
  9. <sql:uptade>  
  10.   
  11. </sql:transation>  
分享到:
评论

相关推荐

    java程序员-从笨鸟到菜鸟.pdf

    java程序员-从笨鸟到菜鸟.pdf

    JAVA程序员 从笨鸟到菜鸟.pdf

    曹胜欢在《JAVA程序员 从笨鸟到菜鸟.pdf》中分享了他个人学习Java的经历,从迷茫到逐渐成长的过程。他强调了自学的重要性,并鼓励初学者不要怕走弯路,同时希望自己的经验可以帮助到同样在学习Java的初学者。 2. ...

    [网盘]java程序员由菜鸟到笨鸟.pdf

    ### Java程序员成长之路——从菜鸟到笨鸟 #### 一、引言 《Java程序员由菜鸟到笨鸟》是一本由曹胜欢编写的书籍,旨在帮助初学者掌握Java编程的基础知识,并逐步进阶至更高级的应用场景。本书不仅适合初学者作为...

    Java程序员由菜鸟到笨鸟学习文档

    Java程序员的成长之路是一个充满挑战与探索的过程,从初学者到熟练掌握各项技能,需要系统性的学习和实践。"Java程序员由菜鸟到笨鸟学习文档"就是这样一个旨在帮助初入Java世界的学习者逐步进阶的资源。它覆盖了从...

    《Java程序员-从笨鸟到菜鸟》PDF下载

    资源名称:《Java程序员-从笨鸟到菜鸟》PDF 下载资源目录:作者简介:..........................................................................................................................................

    [网盘]java程序员由菜鸟到笨鸟.pdf.2018_03_19

    以上内容只是《Java程序员由菜鸟到笨鸟》这本书中可能涵盖的部分知识点。对于初学者来说,系统地学习这些基础知识是非常重要的,因为它们构成了Java编程的基础,也是进一步学习高级主题的基石。希望这些内容能够帮助...

    [网盘]java程序员由菜鸟到笨鸟.pdf.2018_03_17

    根据提供的文件信息,“Java程序员由菜鸟到笨鸟”是一本旨在帮助初学者成长为合格Java开发者的书籍。本书作者为曹胜欢,发布日期为2018年3月17日。以下是从该书的标题、描述以及部分可能包含的内容中提炼出的关键...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、递归 day09_字节流、字符流 day10_缓冲流、转换流、序列化流、Files day11_网络编程 day12_函数式接口 day13_Stream流、方法引用 Java基础小节练习题答案

    用java和逆波兰表达式写的计算器

    逆波兰表达式(Reverse ...通过阅读和理解代码,你可以学习到如何在Java中实现一个逆波兰表达式计算器,包括字符串处理、栈的使用以及异常处理等编程技巧。这个项目对于学习数据结构和算法以及提升编程能力非常有帮助。

Global site tag (gtag.js) - Google Analytics