欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP学习笔记(3)——JSTL 标签库

程序员文章站 2022-04-11 08:08:21
JSP Standard Tag Lib,名为JSP标准标签库, 设计的目的主要用来方便我们将数据输出 ,而不是使用JSP中的语法 。 平常使用的话,我们会在JSP在嵌套HTML代码来实现数据的获取,比如说把一个list中的内容转换为表格显示,需要使用到循环,还要在循环中嵌套HTML代码,看起来很不 ......

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

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

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

  • 核心标签 c.tld
  • 格式化标签 f.tld
  • sql 标签 s.tl
  • xml 标签 x.tld
  • jstl 函数

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

核心标签库 c.tld

JSP学习笔记(3)——JSTL 标签库

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.count 从1开始
</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}"/>