• JSTL标签库


    • 什么是JSTL
      • 是标签语言,是apache对EL表达式的扩展。
    • JSTL四大标签库
      • core:核心标签库
        • <c:out>输出
          <%-- 导入标签库 --%>
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          
          <%
              String data = "fat rabbit";
              pageContext.getRequest().setAttribute("data", data);
          %>
          <%-- value可以是字符串常量,也可以是EL表达式 --%>
          <%-- escapeXml默认为true,若为false不转义,原样输出 --%>
          <c:out value="${data}" escapeXml="false"></c:out>
        • <c:set>创建/设置域属性
          <%-- 导入标签库 --%>
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

          <c:set var="data" value="fat rabbit" scope="request"></c:set>
          <%--escapeXml默认为true,若为false不转义,原样输出 --%>
          <c:out value="${data}" escapeXml="false"></c:out>
        •  <c:remove>删除域变量
          <%-- 导入标签库 --%>
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <%-- 若不指定scope,则表示删除所有域中的该名称的变量,若指定,则指删除指定域中该名称的变量 --%>
          <c:remove var="data" scope="request"></c:remove>
        • <c:url>指定一个路径,它会在路径前面自动添加项目名
          <%-- 导入标签库 --%>
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <%-- 若添加var属性,则url标签就不会输出内容到页面,而是生成url保存到域中 --%>

          <c:url value="/index.jsp" var="f"></c:url>

          <%-- 带参数的 --%>
          <c:url value="/index.jsp">
          <c:param name="isLogin" value="true"></c:param>
          </c:url>
        • <c:if>
          <%-- 导入标签库 --%>
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

          <c:if test="${empty param.data}"> data数据为null </c:if>
        • <c:choose>
          <%-- 导入标签库 --%>
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

          <c:choose > <c:when test="${empty param.data}"> data数据为null </c:when> <c:otherwise> data数据中有数据啦 </c:otherwise> </c:choose>
        • <c:foreach>
          <%-- 导入标签库 --%>
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

          <c:forEach var="i" begin="1" end="10"> ${i} </c:forEach>

          <%-- 类似于高级for的使用 --%>
          <%
          char[] datas = {'f','a','t','r','a','b','b','i','t'};
             pageContext.getRequest().setAttribute("datas",datas);
          %>
          <%-- items指定要循环的对象,可以是数组或集合。 --%>
          <%-- var创造变量,循环遍历获取items中每个值赋值给变量--%>
          <c:forEach items="${datas}" var="data">
          ${data}
          </c:forEach>

          <!-- varStatus是创建一个循环状态变量 -->
          <c:forEach items="${datas}" var="data" varStatus="vs">
          <!-- 循环元素的个数 -->
          count= ${vs.count}
          <!-- 循环元素的下标 -->
          index= ${vs.index}
          <!-- 是否为第一个元素 -->
          first=${vs.first}
          <!-- 是否为最后一个元素 -->
          last=${vs.last}
          <!-- 当前元素 -->
          current=${vs.current}<br/>
          </c:forEach>
      • fmt:格式化标签库
        • <%-- 导入标签库 --%>
          <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
          
          <%
              Date date = new Date();
              pageContext.getRequest().setAttribute("date",date);
          %>
          <%-- ftm标签库是用来格式化输出的,通常需要格式化的有时间、数字 --%>
          <%-- value指定一个Date类型的变量,pattern指定输出的模版 --%>
          <fmt:formatDate value="${requestScope.date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>

          <%
          double num = 8.2389123;
          pageContext.getRequest().setAttribute("data",num);
          %>
           
          <%-- 两者都会四舍五入,区别在于前者如果不足位会以0位,后者不补,有几位补几位--%>
          <fmt:formatNumber value="${requestScope.data}" pattern="0.00 "></fmt:formatNumber>
          <fmt:formatNumber value="${requestScope.data}" pattern="#.## "></fmt:formatNumber>
           
      • sql:数据库标签库
      • xml:xml标签库
    • 自定义标签
      •   
        /**
         * 实现标签处理类(1)
         */
        
        public class TestTag implements SimpleTag {

        private PageContext pageContext;
        private JspFragment jspFragment;

        /**
        * 每次执行标签时就会调用这个方法
        * @throws JspException
        * @throws IOException
        */
        @Override
        public void doTag() throws JspException, IOException {

        System.out.println("fat rabbit");
        }

        /**
        * 设置父标签
        * @param jspTag
        */
        @Override
        public void setParent(JspTag jspTag) {

        }

        /**
        * 返回父标签
        * @return
        */
        @Override
        public JspTag getParent() {
        return null;
        }

        /**
        * 设置jsp上下文对象,pageContext继承他
        * @param jspContext
        */
        @Override
        public void setJspContext(JspContext jspContext) {
        this.pageContext = (PageContext) jspContext;
        }

        /**
        * 设置标签体
        * @param jspFragment
        */
        @Override
        public void setJspBody(JspFragment jspFragment) {
        this.jspFragment = jspFragment;
        }
        }
        
        
        /**
        * 实现标签处理类(2),一般写标签处理类都继承SimpleTagSupport
        * SimpleTagSupport实现了SimpleTag接口
        * 提供了get方法供子类调用
        */
        public class TestTag extends SimpleTagSupport {

        @Override
        public void doTag() throws JspException, IOException {

        //获取当前页面的输入流
        Writer out = this.getJspContext().getOut();
        //执行标签体内容,把结果写到指定的流中
        out.write("______________________________________________________________________________<br/>");
        this.getJspBody().invoke(out);
        out.write("______________________________________________________________________________<br/>");

        }
        }


        <!-- tld文件一般都放到WEB-INF之下,这样保证客户端访问不到,一个tld文件可以部署多个标签 -->
        <?xml version="1.0" encoding="UTF-8" ?>
        <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">

        <!-- -->
        <tlib-version>1.0</tlib-version>
        <!-- -->
        <short-name>muriel</short-name>
        <!-- -->
        <uri>http://www.muriel.cn/el.functions</uri>

        <tag>
        <!-- 标签名 -->
        <name>testTag</name>
        <!-- 标签处理类 -->
        <tag-class>com.muriel.tag.TestTag</tag-class>
        <!--
        标签体
        empty:无标签体
        tagdependent:只能是EL表达式,也可以是其他标签
        scriptless:标签体内容不会被执行,而是直接赋值标签处理类
        -->
        <body-content>scriptless</body-content>

        </tag>
        </taglib>



        <%-- 导入标签库 --%>
        <%
        String data = "fat rabbit";
        pageContext.getRequest().setAttribute("data", data);
        %>
        <t:testTag>
        ${data}<br/>
        </t:testTag>



        /**
        * 自定义带属性的标签
        */
        public class TestTag extends SimpleTagSupport {

        private boolean isOk = true;


        @Override
        public void doTag() throws JspException, IOException {

        if (isOk)
        //如果传递的输出流为null,表使用的就是当前的页面out。等同于this.getJspContext().getOut()的效果
        this.getJspBody().invoke(null);
        }

        /**
        * 这个方法会由tomcat来调用,并且在doTag方法之前
        *
        * @param ok
        */
        public void setOk(boolean ok) {
        isOk = ok;
        }
        }


        <?xml version="1.0" encoding="UTF-8" ?>
        <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">

        <!-- -->
        <tlib-version>1.0</tlib-version>
        <!-- -->
        <short-name>muriel</short-name>
        <!-- -->
        <uri>http://www.muriel.cn/el.functions</uri>

        <tag>
        <!-- 标签名 -->
        <name>testTag</name>
        <!-- 标签处理类 -->
        <tag-class>com.muriel.tag.TestTag</tag-class>
        <!--
        标签体
        empty:无标签体
        tagdependent:只能是EL表达式,也可以是其他标签
        scriptless:标签体内容不会被执行,而是直接赋值标签处理类
        -->
        <body-content>scriptless</body-content>
        <attribute>
        <!-- 指定属性名 -->
        <name>isOK</name>
        <!--指定是否为必须的。 若必须为true,不必须为false -->
        <required>true</required>
        <!-- 指定属性是否可以使用EL。runtime expretion value运行时表达式值 -->
        <rtexprvalue>true</rtexprvalue>
        </attribute>
        </tag>
        </taglib>


        <%-- 导入标签库 --%>
        <%@taglib prefix="t" uri="/WEB-INF/tlds/test.tld" %>
        <%
        String data = "fat rabbit";
        pageContext.getRequest().setAttribute("data", data);
        %>

        <t:testTag ok="${!empty data}">
        ${data}
        </t:testTag>
         
  • 相关阅读:
    cefsharp设置默认语言
    C#创建委托实例
    C++/C#互调步骤
    mybatis别名
    redis
    数据库优化方面的事情:
    Properties类使用详解
    七层协议以及如何很好得记忆
    Http 请求到后端过程
    【转】那些年用过的Redis集群架构(含面试解析)
  • 原文地址:https://www.cnblogs.com/fatRabbit-/p/10132899.html
Copyright © 2020-2023  润新知