zoukankan      html  css  js  c++  java
  • JSP学习笔记(3)——JSTL 标签库

    JSP Standard Tag Lib,名为JSP标准标签库,设计的目的主要用来方便我们将数据输出,而不是使用JSP中的语法<% %> <%= %> <%! %>

    平常使用的话,我们会在JSP在嵌套HTML代码来实现数据的获取,比如说把一个list中的内容转换为表格显示,需要使用到循环,还要在循环中嵌套HTML代码,看起来很不优雅,而且代码不好阅读。

    根据JSTL标签所提供的功能,可以将其分为5个类别。

    • 核心标签 c.tld
    • 格式化标签 f.tld
    • SQL 标签 s.tl
    • XML 标签 x.tld
    • JSTL 函数

    标签库可以和EL表达式联用

    核心标签库 c.tld

    set

    相当于setAttribute方法

    语法:

    <c:set
       var="<string>"
       value="<string>"
       target="<string>"
       property="<string>"
       scope="page|requset|session|application"/>
    属性描述是否必要默认值
    value 要存储的值 主体的内容
    target 要修改的属性所属的对象
    property 要修改的属性
    var 存储信息的变量
    scope var属性的作用域 Page

    scope属性有四种选择:page,requset,session,application

    //下面的标签相当于pageContext.setAttribute("html");
    <c:set var="html" value="<h1>hello</h1>"/>
    
    <c:set var="html" value="<h1>hello</h1>" score="request"/>

    out

    语法:

    <c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
    属性描述是否必要默认值
    value 要输出的内容
    default 输出的默认值 主体中的内容
    escapeXml 是否忽略XML特殊字符 true
    //html是上面set的内容
    //输出<h1>hello</h1>,忽略了转义
    <c:out value="${pageScope.html}"></c:out>
    //输出显示一级标题hello
    <c:out value="${pageScope.html}" escapeXml="false"></c:out>

    if

    标签判断表达式的值,如果表达式的值为 true 则执行其主体内容

    语法:

    <c:if test="<boolean>" var="<string>" scope="<string>">
       ...
    </c:if>
    属性描述是否必要默认值
    test 条件
    var 用于存储条件结果的变量
    scope var属性的作用域 page
    <c:if test="${"hello".startWith("h")}" var="flag" >
       <p>hello以h开头</p>
    </c:if>
    
    //if-else语句
    <c:if test="${"hello".startWith("h")}" var="flag" >
       <p>hello以h开头</p>
    </c:if>
    <c:if test="${flag}">
       <p>hello不以h开头</p>
    </c:if>

    remove

    标签用于移除一个变量(删除数据),可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。

    语法:

    //相当于xx.removeAttrbute
    <c:remove var="<string>" scope="<string>"/>

    choose

    <c:set value="3000" var="sal" />
    <c:choose>
        <c:when test="${sal <3000}">
            <p>z混日子</p>
        </c:when>
        <c:when test="${sal >=300 and sal <5000}">
            <p>还算凑合</p>
        </c:when>
        <c:otherwise>
            <p>富有</p>
        </c:otherwise>
    </c:choose>

    import

    相当于指令 <%@ include
    菜鸟 JSTL-import

    redirect

    重定向

    url

    用于生成url,优点是可以把url存在变量中,之后便于引用

    菜鸟 JSTL——url

    param

    可作为上面import,redirect,url中的子标签,表明带参

    forEach

    语法:

    <c:forEach
        items="<object>"
        begin="<int>"
        end="<int>"
        step="<int>"
        var="<string>"
        varStatus="<string>">
    属性描述是否必要默认值
    items 要被循环的信息
    begin 开始的元素(0=第一个元素,1=第二个元素) 0
    end 最后一个元素(0=第一个元素,1=第二个元素) Last element
    step 每一次迭代的步长 1
    var 代表当前条目的变量名称
    varStatus 代表循环状态的变量名称
    <c:forEach var="item" items="${lists}" varStatus="staus">
        ${item}
        staus.index 当前的下标 0开始
        staus.count1开始
    </c:forEach>

    forTokens

    属性和forEach用于,不过多了一个属性delims,表明分隔符,有多个分隔符使用空格隔开

    <c:set var="token" value="2010,2,3.25,47,58:62"/>
    <c:forTokens items="${token}" delims=", . :" var="item">
        <p>${item}</p>
    </c:forTokens>

    格式化标签

    引用:

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

    requestEncoding

    使用<fmt:requestEncoding>标签来指定字符集,用于解码来自表单的数据。在字符集不是ISO-8859-1时必须使用这个标签。

    <fmt:requestEncoding value="UTF-8" />

    formatNumber

    <fmt:formatNumber
      value="<string>"
      type="<string>"
      pattern="<string>"
      currencyCode="<string>"
      currencySymbol="<string>"
      groupingUsed="<string>"
      maxIntegerDigits="<string>"
      minIntegerDigits="<string>"
      maxFractionDigits="<string>"
      minFractionDigits="<string>"
      var="<string>"
      scope="<string>"/>
    属性描述是否必要默认值
    value 要显示的数字
    type NUMBER,CURRENCY,或 PERCENT类型 Number
    pattern 指定一个自定义的格式化模式用与输出
    currencyCode 货币码(当type="currency"时) 取决于默认区域
    currencySymbol 货币符号 (当 type="currency"时) 取决于默认区域
    groupingUsed 是否对数字分组 (TRUE 或 FALSE) true
    maxIntegerDigits 整型数最大的位数
    minIntegerDigits 整型数最小的位数
    maxFractionDigits 小数点后最大的位数
    minFractionDigits 小数点后最小的位数
    var 存储格式化数字的变量 Print to page
    scope var属性的作用域 page

    fromatData

    <fmt:formatDate
      value="<string>"
      type="<string>"
      dateStyle="<string>"
      timeStyle="<string>"
      pattern="<string>"
      timeZone="<string>"
      var="<string>"
      scope="<string>"/>
    属性描述是否必要默认值
    value 要显示的日期
    type DATE, TIME, 或 BOTH date
    dateStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
    timeStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
    pattern 自定义格式模式
    timeZone 显示日期的时区 默认时区
    var 存储格式化日期的变量名 显示在页面
    scope 存储格式化日志变量的范围 页面

    数据库连接

    引用:

    <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
    标签描述
      指定数据源
      运行SQL查询语句
      运行SQL更新语句
      将SQL语句中的参数设为指定值
      将SQL语句中的日期参数设为指定的java.util.Date 对象值
      在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

    连接数据库

    <sql:setDataSource var="myDb"
                           driver="oracle.jdbc.driver.OracleDriver"
                           url="jdbc:oracle:thin:@localhost:1521:ORCL"
                           user="xx"
                           password="xx"
                           scope="application"/>

    查询

    <sql:query var="resultSet" dataSource="${myDb}">
            select * from employee  where ename like ? and sal>=? and hiredate<?
            <%--这里的顺序与上面的?顺序相同 --%>
            <sql:param value="%A%"/>
            <sql:param>1000.0</sql:param>
            <sql:dateParam value="${hiredate}"/>
        </sql:query>

    注意:结果集对象的类型不是java.sql.ResulSet 的实例,而是javax.servlet.jsp.jstl.sql.Result 的实例

    获取数据

    <c:forEach var="emp" items="${resultSet.rows}">
            <tr>
                <td>${emp.empno}</td>
                <td>${emp.ename}</td>
                <td>${emp.job}</td>
                <td>${emp.mgr}</td>
                <td><fmt:formatDate value="${emp.hiredate}" pattern="yyyy年MM月dd日"/></td>
                <td><fmt:formatNumber value="${emp.sal}" type="currency" /> </td>
                <td>${emp['comm']}</td>
                <td>${emp['deptno']}</td>
            </tr>
          </c:forEach>

    自定义JSTL标签

    1. 定义类

    定义一个类,继承与javax.servlet.jsp.tagext.SimpleTagSupport(简单标签的支持类,不允许标签内有主体内容)

    重写doTag方法,标签解析之后会自动执行此方法

    类中的成员属性名需要与标签的属性名一致,成员属性需要有get/set方法

    获得JSP中的out对象:

    JspContext jspcontext = this.getJspContext();
    JspWriter out = jspcontext.getOut();
    out.println(s);
    

    2. 编写tlc文件

    在web-inf目录下新建tld文件,文件名随意。tlc文件主要说明标签如何使用,是由哪一个类实现和一些标签的属性配置。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <taglib xmlns="http://java.sun.com/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
            version="2.1">
    
        <tlib-version>1.0</tlib-version>
        <!--下面的两个属性,之后引用需要用到-->
        <short-name>lq</short-name>
        <uri>http://www.lanqiao.com/tag</uri>
    
        <tag>
            <description>完成日期的格式化输出</description>
            <!--标签名-->
            <name>printDate</name>
            <!--标签实现类-->
            <tag-class>com.lanqiao.tag.PrintDateTag</tag-class>
            <!--标签主休形式-->
            <body-content>empty</body-content>
            <attribute>
                <name>date</name>
                <!--属性是否必须-->
                <required>false</required>
                <!--是否可使用EL或脚本求值-->
                <rtexprvalue>true</rtexprvalue>
                <type>java.util.Date</type>
            </attribute>
            <attribute>
                <name>pattern</name>
                <!--属性是否必须-->
                <required>false</required>
                <!--是否可使用EL或脚本求值-->
                <rtexprvalue>false</rtexprvalue>
                <type>java.lang.String</type>
            </attribute>
        </tag>
    
    </taglib>
    

    3. 引用自定义标签

    jsp中使用<%@ taglib prefix=”Short-Name” uri=”uri”%>指令引入标签库才能使用。

    4. 使用

    request.setAttribute("now",new Data());
    <lq:printDate date="${now}"/>
  • 相关阅读:
    python虚拟环境--virtualenv
    python使用smtplib发送邮件
    python网络编程
    python操作MySQL数据库
    python面向对象
    python内置函数总结
    python异常处理
    python文件I/O
    python模块
    python函数
  • 原文地址:https://www.cnblogs.com/chaoyang123/p/11548839.html
Copyright © 2011-2022 走看看