Jstl标签

目录
一、为什么要使用JSTL    2
二、JSTL的构成   2
三、JSTL的core标签库  2
1、 <c:out/>标签:  2
2、 <c:if/>  2
3、 <c:choose/><c:when/><c:otherwise>  3
4、 <c:forEach/> 3
5、 <c:forTokens/>   5
6、 <c:set/> 5
7、 <c:remove/>  5
8、 <c:catch/>   6
9、 <c:import/>  6
10、 <c:url/>    6
11、 <c:redirect/>   6
四、 JSTL的fnt标签库  7
1、 <fmt:requestEncoding/>   7
2、 <fmt:setLocale/> 7
3、 <fmt:timeZone/>  7
4、 <fmt:setTimeZone>    8
5、 <fmt:bundle/><fmt:message/><fmt:param/>资源国际化   8
6、 <fmt:setBundle/>标签   8
7、 <fmt:formatNumber/>  8
8、 <fmt:parseNumber/>   9
9、 <fmt:formatDate/>    9
10、 <fmt:parseDate/>    9
五、JSTL的fn方法库    9
fn:contains()   10
fn:containsIgnoreCase() 10
fn:indexOf()    10
fn:split()  11
fn:join()   11
六、JSTL的SQL标签库   12
1、 <sql:setDataSource>  12
2、 <sql:query/> 12
3、 <sql:query/> 13
4、 <sql:query/> 13
5、 <sql:update/>    13
6、 <sql:param/><sql:dateParam/>    13
7、 <sql:transaction/>   14
七、JSTL的XML标签库   14
1、 <x:parse/>   15
2、 <x:out>  15
3、 <x:forEach/> 16
4、 <x:if/>  16
5、 <x:choose/><x:when/><x:otherwise/> 16
6、 <x:set/> 17
7、 <x:transform/>   17


一、为什么要使用JSTL
在JSP中,EL表达式是个很方便的工具,但是EL表达式功能很有限制(例如不能遍历集合等),JSTL作为最基本的标签库,JSTL库中提供了一系列的JSP标签,实现了最基本的功能,例如集合的遍历、数据的输出、字符串的处理、数据的格式化等。
二、JSTL的构成
JSTL包括core、fnt、sql、XML等4个标签库,以及一个fn方法库。在Java EE 1.4之前,JSP中使用JSTL需要添加JSTL的类库,从Java EE 5开始,内置JSTL的支持,可以直接使用。
三、JSTL的core标签库
Core标签库是JSTL的核心标签库,或者说是基本标签库,实现了最基本的功能。在使用core标签库下的标签时,需要在JSP文件中引入标签库,如:<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>。
以下为core标签库下各主要标签的使用介绍:
1、<c:out/>标签:
2、JSTL中使用out标签输出数据。
    <c:out value=”${param.action}”></c:out>
    注:out标签还有另外两个属性:default与escapeXml。如果value属性的值不存在,会输出default属性的值。如果excapeXml为true,则会对输出的内容进行XML编码。
2、<c:if/>
3、标签条件判断的标签,判断条件写在test属性中。
    <c:if test=”${param.action ==add”}”>
        ……..
    </c:if>
    <c:if test=”${param.action ==edit”}”>
        ……..
    </c:if>
3、<c:choose/><c:when/><c:otherwise>
4、标签
    <c:choose>
        <c:when test=”${param.aciton}”>
            When标签输出
        </c:when>
        <c:otherwise>
            Otherwise标签输出
        </c:otherwise>
    </c:choose>
4、<c:forEach/>
5、标签为循环标签,items属性里是集合类对象或者是数组。
    显示偶数:
    <c:forEach var=”num” begin=”2” end=”100” step=”2”>
        <div>${num}</div>
    </c:forEach>
    遍历List:
    <c:forEach istem=”${personList}” var=”person”>
        <tr>
            <td>${person.id}</td>
            <td>${person.name}</td>
            <td>${person.age}</td>
            <td>${person.sex}</td>
            <td>${person.city}</td>
            <td>${person.birthday}</td>
        </tr>
    </c:forEach>
    遍历Map对象:
    <c:forEach var=”item” items=”${header}”>
        <tr>
            <td>${item.key}</td>
            <td>${item.value}</td>
        </tr>
    </c:forEach>
    <c:forEach>标签的varStatus属性可以实现隔行变色的功能。如下:
    <c:forEach item=”${persoinList}” vae=”person” varStatus=”varStatus”>
        <tr bgcolor=”${varStatus.index % 2 == 1 ? ‘#EFEFEF: ‘#FFFFFF’}”>
            <td>${varStatus.current.id}</td>
            …………
        </tr>
    </c:forEach>
    注:varStatus的属性:index、count、fist、last、current、begin、end、step。
5、<c:forTokens/>
6、标签为循环标签,items属性里面是字符串,会被delims属性分割成多个字符串,forTokens就是遍历这些字符串。
    <c:forTokens items=”Jane,Tomi,Andy,Hedrix,McCarteny,Lenno,Court,Ben” delims=”,” var=”item” varStatus=”varStatus” begin=”1” end=”7” step=”2”>
        <tr>
            <td>${varStatus.index}</td>
            <td>${item}</td>
        </tr>
    </c:forTokens>
6、<c:set/>
7、实现计数器,set标签既可以声明一个不存在的对象,也可以修改一个已经存在的对象,还可以只修改该对象的某个属性,前提是该属性是可写的(即有对应的setter方法)
    <c:set var=”totalCount” value=”${totalCount + 1}” scope=”application”></c:set>
    <c:set var=”count” value=”${count + 1}” scope=”session”></c:set>
    本网站总访问人数:${totalCount} <br/>
    其中您的访问次数:${count} <br/>
    注:target作用类似于var,不同的是target只能用来操作Java Bean或者Map,target只能修改已存在的Java Bean的属性或者Map的内容,而不能创建,因此如果target为null,会抛出异常。Target与var二者不能同时使用。
7、<c:remove/>
8、标签与set标签作用正好相反。可以从page、request、session、application等删除所有类型的数据。
    <% request.setAttribute(“somemap”, new HashMap()); %>
    <c:remove var=”somemap” />
    ${somemap == null ? ‘somemap 已经被删除’ : ‘somemap 没有被删除’}
8、<c:catch/>
9、捕捉异常
    <c:catch var=”e”>
        <c:set target=”someBean” property=”someProperty” value=”Some Value”>
        </c:set>
    </c:catch>
    <c:if test=”${e != null}”>
        程序抛出了异常${e.class.name},原因:${e.message}
    </c:if>
9、<c:import/>
10、导入网络资源
    <c:import var=”baidu” url=”http://www.baidu.comcharEncoding=”gbk” cope=”request”/>
   Baidu的源代码为:<br/><br/>
    <c:out value=”${ baidu}” escapeXml=”true”></c:out>
10、<c:url/>
11、标签,JSP中,如果客户浏览器不支持Cookie,则可以使用request.encodeURL()方法对URL进行编码,使该客户也能使用Session功能,这叫做URL重写。url标签的作用就是实现类似功能。
    <c:url value=/images/bg.gif”>
11、<c:redirect/>
12、标签用于实现Redirect重定向功能。
    <c:redirect url=”http://www.baidu.com” ></c:redirect>
12、<c:param/>
13、标签,有时候重定向到页面需要参数,这时候可以配合param标签一块使用。Param标签专门用于设置参数。
    <c:redirect url=”http://www.baidu.com” >
        <c:param name=”wd” value=”音乐”></c:param>
        <c:param name=”cl” value=”3”></c:param>
</c:redirect>
四、JSTL的fnt标签库
Fnt的标签为辅助性功能标签。Fnt英文全称为format。在使用fnt标签库下的标签时,需要在JSP文件中引入标签库,如:<%@ taglib uri=”http://java.sun.com/jsp/jstl/fnt” prefix=”fnt”%>。
以下为fnt标签库下各主要标签的使用介绍:
1、<fmt:requestEncoding/>
2、设置编码
    <fmt:requestEncoding value=”UTF-8” />
2、<fmt:setLocale/>
3、显示所有地区的数据格式,用于设定Locale。
    <fmt:setLocale value=”${locale}”/>
3、<fmt:timeZone/>
4、显示全球时间,Locale只是影响到时间的格式,TimeZone会影响到时间的值,timeZone标签只对标签内的代码有效。
    <fmt:timeZone value=”Asia/Shanghai”>
        中间为timeZone标签生效的作用域
</fmt:timeZone>
4、<fmt:setTimeZone>
5、设置时区,如果需要设置全局的Time Zone,需要使用setTimeZon标签。
5、<fmt:bundle/><fmt:message/><fmt:param/>资源国际化
    Java中使用ResourceBundle类解决i18n(国际化)的问题,把所有的中文提示都放在messages_zh_CN.properties文件中。JSTL提供了bundle标签,message标签与param标签来实现该功能。
    <fmt:bundle basename=”messages”>
        <fmt:message key=”prompt.hello”>
            <fmt:param value=”yiyu986”></fmt:param>
        </fmt:message> <br/>
        <fmt:message key=”prompt.greeting”></fmt:message>
    </fmt:bundle>
6、<fmt:setBundle/>标签
bundle标签只对标签内部的message标签有效,而setBundle标签对所有的 message标签有效。
    <fmt:setBundle basename=”message” var=”resource” scope=”request”/>
    <fmt:message bundle=”{resource}” key=”prompt.hello”>
            <fmt:param>yiyu986</fmt:param>
    </fmt:message>
    <fmt:message bundle=”${resource}” key=”prompt.greeting”></fmt:message>
7、<fmt:formatNumber/>
8、显示不同地区的各种数据格式,formatNumber标签能够根据不同的Locale输出不同的格式。
8、<fmt:parseNumber/>
9、解析数字,parseNumber标签与formatNumber标签功能刚好相反,formatNumber把数字转为字符串,parseNumber标签把字符串转为数字。
    <fmt:parseNumber value=”1,000”></fmt:parseNumber> <br/>
    <fmt:parseNumber value=”1,000” parseLocale=”de”></fmt:parseNumber> </br>
9、<fmt:formatDate/>
10、格式化日期,用于将日期格式化为指定格式的字符串。
    <jsp:useBean id=”currDate” class=”java.util.Date”></jsp:useBean>
    <fmt:formatDate value=”${currDate}” />
    <fmt:formatDate value=”${currDate}” pattern=”yyyy/MM/dd HH:mm:ss:sss”>
    </fmt:formatDate>
10、<fmt:parseDate/>
11、解析日期,将字符串转化为时间
    <fmt:parseDate value=”2008-12-12”></fmt:parseDate>
    <fmt:parseDate value=”2008-12-12 08:00:00pattern=”yyyy-MM-dd HH:mm:ssparseLocale=”ja”>
    </fmt:parseDate>
    <fmt:formatDate value=”${date}” type=”both” dateStyle=”full” timeStyle=”full” timeZone=”America/Los_Angeles” />
五、JSTL的fn方法库
Fn的全称为functions。就是提供一些方法、函数等。Fn使用起来不像前面的core、fnt标签那样遵循<prefix:tagName/>格式,而是遵循fn:methodName()格式。在使用fn方法库下的方法时,需要在JSP文件中引入标签库,如:<%@ taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>。
以下为fn方法库下各主要标签的使用介绍:
fn:contains()
1、显示用户浏览器、操作系统。
<c:if test=”${ fn:contains(header[‘User-Agent’], ‘MSIE’)}”>IE浏览器</c:if>
fn:containsIgnoreCase()
2、方法,可以使用该方法忽略大小写。
<c:if test=”${ fn:containsIgnoreCase(header[‘User-Agent’], ‘Windows’)}”>Window操作系统</c:if>
     fn:endsWith()
3、显示文件格式,endsWith()方法判断某字符串是否以指定的参数结尾。
<c:if test=”${fn:endsWith(file.name,.jpg’)}”>JPG图片</c:if>
     fn:startsWith()
4、方法用于判断某字符串是否以指定的参数开始。
     fn:escapXml()
5、实现HTML编码,用户对XML、HTML字符(例如“&”,“<”,“>”,英文引号等)进行编码。作用同<c:out value=”” escapeXml=”true”>,而out标签只能输出而不能保存到某变量中,因此如果需要编码并且输出到某个变量中,escapeXml()方法是个不错的选择。
<c:import var=”source” url=”http://www.baidu.comcharEncoding=”gbk”></c:import>
<c:out value=”${source}” escapeXml=”true”></c:out> <hr/>
${ fn:escapeXml(source) } <hr>
    fn:indexOf()
6、方法用于查找字符串在另一个字符串中第一次出现的位置,如果没有,则返回-1。
Fn:indexOf(‘filename.txt’, ‘.’) = ${ fn:indexOf(‘filename.txt’, ‘.’) }
fn:split()
7、分割字符,将字符串以指定参数为界分割成多个字符串。
<c:set value=”${ fn:split(header[‘accept’], ‘,’)}” var=”names” />
Header[‘accept’]: <br/><br/>
<c:forEach items=”${ names }” var=”name”>
        ${name} <br/>
</c:forEach>
 fn:join()
8、联合字符,与split方法刚好相反,split是将字符串切割成字符串数组,而join是将字符串数组以参数为界链接成字符串。
<%
        Request.setAttribute(“array”, new String[]{“John”, “Tom”, “Tommi”, “Kurt”});
%>
${ fn:join(array, “; ”) }
  fn:length()
9、方法可以取字符串、数组、集合的长度。
“${ pageContext.request.requestURL}”的长度:${ fn:length(pageContext.request.requestURI) } <br/>
Cookie[]的长度:${ fn:length(header) } <br/>
六、JSTL的SQL标签库
JSTL可以直接操作数据库,SQL标签库提供了对数据库相关操作的支持。在使用SQL标签库下的标签时,需要在JSP文件中引入标签库,如:<%@ taglib uri=”http://java.sun.com/jsp/jstl/sql” prefix=”sql”%>。
以下为sql标签库下各主要标签的使用介绍:
1、<sql:setDataSource>
2、设置数据源,用于生成一个数据源,需要指定JDBC驱动、数据库连接池URL、数据库用户名和密码等。
<sql:setDataSource driver=”com.mysql.jdbc.Driver”
    use=”root”
    password=”yiyu986”
    url=”jdbc.mysql://localhost:3306/jstl?charachterEncoding=UTF-8”
    var=”dataSource”
    scope=”page” />
数据源:${ dataSource.class.name}
2、<sql:query/>
3、查询表数据,通过query标签查询数据库。
    <sql:query var=”rs” dataSource=”${ dataSource }” scope=”page”>
        Select * from tb_corporation
    </sql:query>
    <c:forEach var=”row” items=”${ rs.rows }”>
        <tr>
            <td>${ row[‘id’] }</td>
            <td>${ row[‘name’] }</td>
            <td>${ row[‘description’] }</td>
        </tr>
    </c:forEach>
    或者:
    <sql:query var=”rs” dataSource=”${ dataSource }” scope=”page” sql= Select * from tb_corporation”>
    </sql:query>
3、<sql:query/>
4、分页显示,分页显示需要查找出记录总数,然后根据每页都记录数计算startRow与maxRow,然后再查找数据。
4、<sql:query/>
5、结果集的动态遍历,query标签结果集提供了一个columnNames的属性,${rs.columnNames}将返回所有的列名。利用返回值的这个属性就可以动态的遍历任何一个结果集。
5、<sql:update/>
6、更新表数据,用于执行SQL更新数据,该标签返回int类型的数据,保存到var声明的变量中。可以执行多种SQL,如:CREATE TABLE、DROP TABLE、INSERT、DELETE、UPDATE等。
    <sql:update var=”result” dataSource=”${ dataSource }”>
        Drop table if exits tb_corporation
    </sql:update>
6、<sql:param/><sql:dateParam/>
7、设置日期参数,使用参数时需要使用param标签与dateParam标签设置参数。Param标签可以设置String、int等类型数据,dateParam可以设置Date类型数据。
    <sql:update dataSource=”${ dataSource }”>
        Insert into tb_person(name, birthday) value (?, ?)
        <sql:param value=”yiyu986”></sql:param>
        <sql:dateParam value=”${ date }” type=”timestamp” />
    <sql:update>
7、<sql:transaction/>
8、事务管理,JSTL中也有事务性支持,transaction标签内的代码为一个事务。
    <c:catch var=”e”>
        <sql:transaction dataSource=”${ dataSource }”>
            <c:forEach var=”i” begin=”1” end=”3”>
                <sql:update var=”result”>
Insert into tb_corporation (name, description) values (‘事务测试’, ‘事务测试’)
                </sql:update> <br/>
            </c:forEach>
            <sql:update var=”result”>
            insert into tb_corporation (id, name, description) values (1, ‘事务测       试’,   ‘事务测试’)
            </sql:update>
        </sql:transaction>
    </c:catch>
七、JSTL的XML标签库
JSTL有专门的XML标签库提供对XML文件解析的支持。使用JSTL的XML标签,除了需要jstl.jar与standard.jar之外,还需要xalan.jar与serializer.jar包,否则运行时会出错。另外XML标签的前缀不能使用XML,因为<XML/>是被保留的,习惯上使用x作为标签的前缀,例如<x:parse/>。在使用XML标签库下的标签时,需要在JSP文件中引入标签库,如:<%@ taglib uri=”http://java.sun.com/jsp/jstl/XML” prefix=”x”%>。
以下为xml标签库下各主要标签的使用介绍:
1、<x:parse/>
2、标签用来解析一个XML文件,只需要将XML内容放入parse标签内即可。
    <x:parse var=”content”>
        <student description=”Software Engineer”>
            <name>yiyu986</name>
            <age>20</age>
        </student>
    </x:parse>
    或者:
    <c:set var=”XML”>
        <student description=”Software Engineer”>
            <name>yiyu986</name>
            <age>20</age>
        </student>
    </c:set>
    <c:parse var=”content” doc=”${ XML }” />
    更多的时候parse标签是与core标签库的import标签一块连用的。Import导入一个XML文件,传给parse标签来解析。
    <c:import var=”file” url=/WEB-INF/web.xml” / >
    <x:parse var=”doc” doc=”${ file }”></x:parse>
2、<x:out>
3、输出指定元素,用于输出XML的内容,使用select属性指明XML元素或者属性的路径。
<x:parse var=”content”>
<student description=”Software Engineer”>
            <name>yiyu986</name>
            <age>20</age>
        </student>
    </x:parse>
    Content:${ content } <br/>
    输出属性:description:<x:out select=”$content/student/@description” /><br/>
    输出元素name:<x:out slelect=”$content/student/name” /> <br/>
    注:路径中有几种符号:$、/、@。其中,以$开头的为JSTL或者JSP定义的变量,如$content。/表示父子关系或者所属关系,@表示属性。如果一个名称前面既没有$,也没有@,则表示元素或者称为节点,如:name。
3、<x:forEach/>
4、遍历元素,如果某个元素下面有多个子元素,可以通过forEach标签遍历这些子元素。通过select属性里的路径来指定循环遍历的条件。
    <x:forEach var=”node” select=”$doc/rss/channel/itemvarStatus=”status”>
            ……………….
    </x:forEach>
4、<x:if/>
5、标签用于判断某个路径存不存在。Var用来保存返回的结果,scope声明var的作用域,select指定目标路径。
    <x:if select=”$doc/context/resource/@driverClassNamevar=”exists”>
            ………………
    </x:if>
5、<x:choose/><x:when/><x:otherwise/>
6、标签用来实现Java中的if….else的功能,判断条件路径是否存在。
    <x:choose>
            <x:when select=”$doc/context/resource/@jndi”>
                使用了JNDI属性
            </x:when>
            <x:otherwise>
                没有使用JNDI属性
            </x:otherwise>
    </x:choose>
6、<x:set/>
7、标签用于保存某路径的结果到一个变量中。Select指定要保存的路径,var指定变量名,scope指定变量作用域。
    <x:set select=”$doc/context/resourcevar=”resource” />
    Driver Class Name:<x:out select=”$resource/@driverClassName” />
7、<x:transform/>
8、转化XML为HTML,transform标签通过模板,将源XML样式转化为另一种样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值