zoukankan      html  css  js  c++  java
  • Java精选笔记_JSTL(JSP标准标签库)

    JSTL(JSP标准标签库)

    JSTL入门


    JavaServer Pages Standard Tag Library:JSP标准标签库
    在JSP中可以通过Java代码来获取信息,但是过多的Java代码会使JSP页面非常复杂。为此,Sun公司制定了一套标准标签库JSTL。


    什么是JSTL


    标准标签库。这个标签库是由5个不同功能的标签库共同组成
    标签名                              URI                                                                前缀                                      范例
    Core(核心)            http://java.sun.com/jsp/jstl/core             c                                      <c:tagname>
    XML                             http://java.sun.com/jsp/jstl/xml                         x                                       <x:tagname>
    Internationalization(国际化)             http://java.sun.com/jsp/jstl/fmt        fmt       <fmt:tagname>
    Functions(函数)                  http://java.sun.com/jsp/jstl/functions                fn           <fn:tagname>
    SQL(关系型数据库)       http://java.sun.com/jsp/jstl/sql                                 sql         <sql:tagname>




    标签库                                   标签库的URI                              前缀
    Core                 http://java.sun.com/jsp/jstl/core         c
    I18N                   http://java.sun.com/jsp/jstl/fmt           fmt
    SQL                   http://java.sun.com/jsp/jstl/sql            sql
    XML                   http://java.sun.com/jsp/jstl/xml             x
    Functions     http://java.sun.com/jsp/jstl/functions        fn


    Core是一个核心标签库,它包含了实现Web应用中通用操作的标签。
    I18N是一个国际化/格式化标签库,它包含实现Web应用程序的国际化标签和格式化标签。
    SQL是一个数据库标签库,它包含了用于访问数据库和对数据库中的数据进行操作的标签。
    XML是一个操作XML文档的标签库,它包含对XML文档中的数据进行操作的标签。
    Function是一个函数标签库,它提供了一套自定义EL函数,包含了JSP网页制作者经常要用到
    的字符串操作。

    是一个JSP标签的集合,用于简化JSP程序的开发,并使JSP程序更易于维护和管理。


    安装和测试JSTL


    下载地址为http://tomcat.apache.org/taglibs/standard/,文件名为jakarta-taglibs-standard-1.1.2.zip
    在lib目录下有两个JAR包:jstl.jar和standard.jar,这两个文件即为所需要的JSTL标签库
    如果要在JSP页面中使用核心库的标签,需要用taglib指令指明这个标签库的路径
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    JSTL中的Core标签库


    表达式操作标签


    <c:out>标签


    可以将一段文本内容或表达式的结果输出到客户端。
    功能与JSP传统的<%=表达式%>相类似
    语法1:没有标签体的情况
    <c:out value="value" [default="defaultValue"] [escapeXml="{true|false}"]/>


    语法2:有标签体的情况,在标签体中指定输出的默认值
    <c:out value="value" [escapeXml="{true|false}"]>
        defaultValue 
    </c:out>
    value属性:用于指定输出的文本内容,可为常量值或表达式
    default属性:用于指定当value属性为null时所输出的默认值,该属性是可选的(方括号中的属性都是可选的)   
    escapeXml属性:用于指定是否将>、<、&、'、" 等特殊字符进行HTML编码转换后再进行输出,默认值为true。需要注意的是,只有当value属性值为null时,<c:out>标签才会输出默认值,如果没有指定默认值,则默认输出空字符串。

    <c:set>标签


    用于设置域对象属性的值,或者设置对象中用于存储数据的Map对象、JavaBean对象属性的值
    语法1:使用value属性设置域对象某个属性的值
        <c:set value="value" var="varName" [scope="{page|request|session|application}"]/>
    语法2:标签体设置指定域中某个属性的值
        <c:set var="varName" [scope="{page|request|session|application}]>
             body content
        </c:set>
    语法3:使用value属性设置某个域对象属性的值
        <c:set var="varName" value="value" target="target" property=" protertyName "/>
    语法4:使用标签体设置某个对象属性的值 
        <c:set var="varName" target="target" property="protertyName">
           body content
        </c:set>
        value属性:用于设置属性的值
        var属性:用于指定要设置的域对象属性的名称
        scope属性:用于指定属性所在的域对象
        target属性:用于指定要设置属性的对象,这个对象必须是JavaBean对象或Map对象
        property属性:用于指定要为当前对象设置的属性名称


    <c:remove>标签


    一般和<c:set>标签配套使用,两者是相对应的
    专门用于删除各种域对象的属性
    <c:remove var="varName" [scope="{page|request|session|application}"] />
    var属性:用于指定要删除的属性名称
    scope属性:用于指定要删除属性所属的域对象,它们的值都不能接受动态值。实际上<c:remove>标签与<c:set>标签将value属性的值设置为null(<c:set value="null" var="varName"/>)的作用是相同的


    <c:catch>标签


    功能和Java程序中try{}catch{}语句功能很类似,用于捕获嵌套在<c:catch>标签体中出现的异常
        <c:catch [var="varName"]>
            Nested actions
        </c:catch>



    流程控制标签


    <c:if>标签


    作用和Java程序中的if语句作用相同,专门用于完成JSP页面中的条件判断
    语法1:没有标签体的情况
        <c:if test="testCondition" var="resulst" [scope="{page|request|session|application}"]/>


    语法2:有标签体的情况,在标签体中指定要输出的内容
        <c:if test="testCondition" var="resulst" [scope="{page|request|session|application}"]>
            body content
        </c:if>
        test属性:用于设置逻辑表达式
        var属性:用于用于指定逻辑表达式中变量的名字
        scope属性:用于指定var变量的作用范围,默认值为page。如果属性test的计算结果为true,那么标签体将被执行,否则标签体不会执行。


    <c:choose>标签


    用于指定多个条件选择的组合边界,它必须与<c:when>、<c:otherwise>标签一起使用,就相当于Java程序中的switch条件语句
    <c:choose>标签不含任何属性,在它的标签体中只能嵌套一个或多个<c:when>标签和零个或一个<c:otherwise>标签,并且同一个<c:choose>标签中所有的<c:when>子标签必须出现在<c:otherwise>子标签之前
        <c:choose>
            Body content(<when> and <otherwise> subtags)
        </c:choose>


    <c:when>标签


    只有一个test属性,该属性的值为布尔类型。test属性支持动态值,其值可以是一个条件表达式,如果条件表达式的值为true,就执行这个<c:when>标签体的内容
        <c:when test="testCondition">
       Body content
        </c:when>


    <c:otherwise>


    没有属性,它必须作为<c:choose>标签最后分支出现,当所有的<c:when>标签的test条件都不成立时,才执行和输出<c:otherwise>标签体的内容
        <c:otherwise>
            conditional block
        </c:otherwise>


    迭代操作标签


    <c:forEach>标签


    专门用于迭代集合对象中的元素,如Set、List、Map、Collection、Iterator、String数组等,并且能重复执行标签体中的内容
    语法1:迭代包含多个对象的集合
        <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
        [begin="begin"] [end="end"] [step="step"]>
            body content
        </c:forEach>
    语法2:迭代指定范围内的集合
        <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>
            body content
        </c:forEach>


    var属性:用于指将当前迭代到的元素保存到page域中的名称
    items属性:必写,用于指定将要迭代的集合对象,一般和EL表达式连用。
    varStatus属性:用于指定当前迭代状态信息的对象保存到page域中的名称
    begin属性:用于指定从集合中第几个元素开始进行迭代,begin的索引值从0开始,如果没有指定items属性,就从begin指定的值开始迭代,直到迭代结束为止
    end:循环的结束位置,end的取值不能小于begin
    step属性:用于指定迭代的步长,即迭代因子的增量


    <c:forTokens>标签


    与<c:forEach>标签类似,都可以完成迭代功能,只不过<c:forTokens>标签用于迭代字符串中用指定分隔符分隔的子字符,并且能重复执行标签体
    <c:forTokens items="StringOfTokens" delims="delimiters" 
    [var="varName"] [varStatus="varStatusName"]
    [begin="begin"] [end="end"] [step="step"]>
             body content
    </c:forTokens>
    items属性:用于指定将要分隔的字符串
    delims属性:用于指定具体的分隔符,可以是一个或多个
    var属性:用于指当前迭代的元素保存到page域中的属性名称
    varStatus属性:用于指定当前迭代状态信息的对象保存到page域中的属性名称
    begin属性:用于指定从集合中第几个元素开始进行迭代
    step属性:用于指定迭代的步长,即迭代因子的增量


    URL相关的标签


    <c:import>标签


    用来引入某个URL指向的网页内容到当前JSP网页中。它和传统的JSP标记<jsp:include>相类似,但是有所不同:<jsp:include>标签只能使用来包括该应用中的其他文件,而<c:import>则还可以包含外部站点中的静态文件,所以它的功能更加的强大。


    网页内容以String对象的形式输出
    <c:impert url="url" [context="context"][var="var"]
    [scope="{page|request|session|application}"][charEncoding="charEncoding"]>
    ...
    </c:import>


    以Reader
    <c:import url="url" [context="context"] varReader="varreader" [charEncoding="charencoding"]>
    ...
    </c:import>
    url String 需要导入的网页URL
    context String url指定为其他网站的某个URL时,本地网站的路径
    var String 存储导入文件内容的变量
    scope String 变量var的作用域
    charEncoding String 导入文件的字符集

    varReader String 用来读取导入文件内容的Reader对象


    <c:redirect>标签


    用于将请求重定向到其它的Web资源,就相当于在Java程序中执行了response.sendRedirect()方法
    语法1:没有标签体的情况
    <c:redirect url="value" [context="context"]/>


    语法2:有标签体的情况,在标签体中指定重定向时的参数
    <c:redirect url="value" [context="context"]>
        <c:patam name="name" value="value"/>
    </c:redirect>


    url属性:用于指定指定要转发或重定向到目标资源的URL地址,可以使用相对路径和绝对路径
    context属性:用于指定重定向到同一个服务器中其它Web应用的名称

    <c:param>标签


    用于在URL地址中附加参数,它通常嵌套在<c:url>标签内使用
    是和<c:redirect>标签一起使用的,它用来进行参数值的传递
    语法1:使用value属性指定参数的值
    <c:param name="name" value="value"/>
    语法2:在标签体中指定参数的值
    <c:param name="name">
    parameter value
    </c:param>
    name属性:用于指定参数的名称
    value属性:用于指定参数的值,当使用<c:praram>标签为一个URL地址附加参数时,它会自动对参数值进行URL编码,例如,如果传递的参数值为“中国”,则将其转换为“%e4%b8%ad%e5%9b%bd”后再附加到URL地址后面,这也是使用<c:param>标签的最大好处。


    <c:url>标签


    可以在JSP页面中构造一个新的URL地址,实现URL的重写
    语法1:没有标签实体的情况
    <c:url value="value" [context="context"] [var="varName"]
    [scope="{page|request|session|appliction}"] />
    语法2:有标签实体的情况,在标签体中指定构造URL参数
    <c:url value="value" [context="context"] [var="varName"]
    [scope="{page|request|session|appliction}"]>
    <c:param>标签
    </c:url>
    value属性:用于指定构造的URL
    context属性:用于指定导入同一个服务器下其它Web应用的名称
    var属性:用于指定将构造的URL地址保存到域对象的属性名称

    scope属性:用于指定将构造好的URL保存到域对象中


    XML操作标签库


    在Java中可以使用SAX或者DOM等API接口来操作XML文档,尽管这种操作功能非常强大而且灵活,但是要很快熟练掌握是有相当大难度的
    在JSTL中提供了一组专门处理XML文档的标签,这些标签所提供的功能尽管非常有限,但是已经可以满足基本的XML文档处理需要,而且这些标签学习起来明显比掌握复杂的API接口要容易
    如果要在JSP页面中使用XML操作标签库的标签,需要用taglib指令指明这个标签库的路径为
    <%@ taglib="x" uro="http://java.sun.com/jsp/jstl/xml" %>



    核心操作标签


    <x:parse>
    可以用来解析一个XML文档
    以String或Reader对象指定XML
    <x:parse> {doc="xmldocument"|xml="xmldocument"}
    {var="var" [scope="scope"]|varDom="var" [scopeDom="scopedom"]}
    [systemId="systemid"]
    [filter="filter"] />
    以body内容指定XML
    <x:parse>{var="var" [scope="scope"]|varDom="var" [scopeDom="scope"]}
    [systemId="systemid"][filter="filter"]>
        XML document to parse
    </x:parse>
    doc String or Reader 需要解析的XML文件
    xml String or Reader 同doc属性,现已不再使用
    var String 用于存储解析后XML文件的范围变量名
    scope String 范围变量var的作用域
    varDom String 用于存储解析后XML文件的范围变量名
    scopeDom String 范围变量varDom的作用域
    systemId String 用于解析XML文件的路径
    filter org.xml.sax.XMLFilter 解析XML文件时使用在XML文件的过滤器
    使用<x:parse>把一个XML文档解析以后,就可以使用<x:out>标签输出XML节点的值


    <x:out>


    <x:out>标签用于计算XPath表达式,然后把查找到的元素进行输出。XPath标准是用来对XML文档各部分数据进行定位的语言。
    <x:out select="xpathexpression"[escapeXml="{true|false}"]/>
    select值表示需要执行的Xpath表达式、escapeXml表示输出字符串中是否要转换成对应的代码
    <x:set>
    用来把XPath表达式处理的结果存储到某个范围变量中。与<c:set>标签不同之处在于<x:set>标签是把XML中某个节点的内容赋值到一个变量中。
    <x: select="xpathexpression" var="varname" scope=["{page|request|session|application}"] />



    流程控制标签


    包含<x:if>、<x:choose>、<x:when>、<x:otherwise>及<x:forEach>标签
    功能和用法和核心标签库对应的标签非常类似


    转换操作标签


    包含<x:transform>标签和<x:param>标签。

    <x:param>标签的作用和用法也与<c:param>标签类似
    <x:transform>标签
    在网络应用程序中,经常需要通过XSL样式表对一篇XML文件执行转换
    <x:transform xml="expression" xslt="expression" var="name" scope="scope" xmlSystemId="expression" xsltSystemId="expression">

    <x:param name="expression" value="expression"/>



    JSTL数据库标签库


    如果要在JSP页面中使用数据库标签库的标签,需要用taglib指令指明这个标签库的路径为

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


    建立数据源连接标签


    <sql:setDataSource>
    用来建立数据库连接
    使用已存在的数据源连接数据库
    <sql:setDataSource dataSource="dataSource"
    [var="varName"]
    [scope="{page|request|session|application}"] />


    使用JDBC方式连接数据库
    <sql:setDataSource driver="driverName" url="URL" [user="userName"][password="password"][var="varName"][scope="{page|request|session|application}"] />


    数据库操作标签


    <sql:query>标签


    执行数据库中的查询操作

    <sql:query var="varName" dataSource="dataSource" [maxRows="max"][startRow="start"][scope="page|request|session|application"] />


    <sql:param>标签


    向<sql:query>标签的SQL语句中传递参数
    无本体内容
    <sql:param value="value">
    有本体内容
    <sql:param>value</sql:param>


    <sql:update>标签


    对数据库进行插入、更新和删除操作
    <sql:update sql="SQL语句" dataSource="dateSource" [var="varName"][scope="{page|request|session|application}"] />


    <sql:dateParam>标签


    和<sql:param>标签的功能和用法完全相同,不同之处是<sql:dateParam>标签是用来设置日期格式的参数
    <sql:dataParam value="value"[type="{timestamp|time|date}"] />


    <sql:transaction>标签


    数据库操作的事务处理
    <sql:transaction [dataSource="dataSource"][isolation="{read_uncommitted|read_committed|repeatable_read|serializable}"]>
    数据库操作
    </sql:transaction>


    JSTL中的Functions标签库


    为了简化JSP页面中对字符串的操作,JSTL的Functions标签库中提供了一套自定义EL函数,这套自定义EL函数包括了JSP页面制作者经常要用到的字符串操作。
    如果要在JSP页面中使用函数标签库的标签,需要用taglib指令指明这个标签库的路径为

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


    fn:toLowerCase函数与toUpperCase函数


    fn:toLowerCase函数    用于将一个字符串中包含的所有字符转换为小写形式
    fn:toLowerCase(String source)
    fn:toUpperCase函数    用于将一个字符串中包含的所有字符转换为大写形式
    fn:toUpperCase(String source) 


    fn:trim函数
    用于删除一个字符串中开头和末尾的空格

    fn:trim(String source) 


    fn:escapeXml函数
    专门用于将字符串中的“<”、“>”、“"”、“&”等特殊字符进行转义

    fn:escapeXml(String source) 


    fn:length函数
    用于返回字符串中字符的个数,或者集合和数组中元素的个数

    fn:length(source) 


    fn:split函数
    按照指定的分隔符,将一个字符串分割成字符串数组,并将这个字符串数组返回

    fn:split(String source,String delimiter) ? String[]


    fn:join函数
    通过指定的分隔符,将一个字符串数组中的所有元素合并为一个字符串
    fn:join(String  source[], String spearator) ? String


    fn:indexOf函数
    用于返回指定字符串在一个字符串中第一次出现的索引
    fn:indexOf(String source,String target) ? int


    fn:contains函数
    专门用于判断一个字符串中是否包含指定的字符串
    fn:contain(String source,String target) ? boolean


    fn:containsIgnoreCase函数
    专门用于检测一个字符串中是否包含指定的字符串
    fn:containsIgnoreCase(String source,String target) ? boolean


    fn:startsWith函数与fn:endsWith函数

    fn:startsWith函数
    用于判断一个字符串是否以指定字符串开始
    fn:startsWith(String source,String target) 
    fn:endsWith函数
    用于判断一个字符串是否以指定字符串结束
    fn:endsWith(String source,String target) 


    fn:replace函数
    将一个字符串中包含的指定字符串替换为其它字符串,并返回替换后的字符串
        fn:replace(String source,String before,String after)   String
        fn:substring、fn:substringAfter与fn:substringBefore函数
        fn:substring函数用于截取一个字符串中指定子字符串并返回截取到的子字符串
        fn:substring(String source,int beginIndex,int endIndex)   String
        fn:substringBefore函数用于截取并返回指定字符串之前的子字符串
        fn:substringBefore(String source,String target)   String
        fn:substringAfter函数用于截取并返回指定字符串之后的子字符串
        fn:substringAfter(String source,String target)   String
        fn:contains (string, substring) 如果参数string中包含参数substring,返回true
        fn:containsIgnoreCase(string,substring) 如果参数string中包含参数substring(忽略大小写),返回true
        fn:endsWith(string, suffix) 如果参数 string 以参数suffix结尾,返回true
        fn:escapeXml(string) 将有特殊意义的XML(HTML)转换为对应的XML character entity code,并返回
        fn:indexOf(string, substring) 返回参数substring在参数string中第一次出现的位置
        fn:join(array, separator) 将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回
        fn:length(item) 返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数
        fn:replace(string, before, after) 返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果
        fn:split(string, separator) 返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素
        fn:startsWith(string, prefix) 如果参数string以参数prefix开头,返回true
        fn:substring(string, begin, end) 返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符
        fn:substringAfter(string, substring) 返回参数substring在参数string中后面的那一部分字符串
        fn:substringBefore(string, substring) 返回参数substring在参数string中前面的那一部分字符串
        fn:toLowerCase(string) 将参数string所有的字符变为小写,并将其返回
        fn:toUpperCase(string) 将参数string所有的字符变为大写,并将其返回
  • 相关阅读:
    进程的经典同步问题
    数学余数在计算机的用途
    7.货仓选址 绝对值不等式
    6. 排队打水 排序不等式
    5.合并果子 Huffman树
    4.区间覆盖 区间问题
    3.区间分组 区间问题
    2.最大不相交区间数量 区间问题
    1.区间选点 区间问题
    26.拆分-Nim游戏 博弈论
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7582121.html
Copyright © 2011-2022 走看看