zoukankan      html  css  js  c++  java
  • Servlet 之jsp(下)--JSTL

      JavaServer Pages Standard Tag Library为jsp标准标签库,jsp规范一部分。sun定义规范即接口。apache对规范进行了实现,开发时导入其jar包即可,但tomcat有自己的jar包支持,不同的tomcat版本也有差异,使用时需要注意。

      使用要求:容器必须支持Servlet 2.4 且JSP 2.0 以上版本,下载地址:http://tomcat.apache.org/taglibs/standard/。目前主流开发中,使用比较多的就是核心标签库(<c:out>),国际化标签库(<fmt:formatDate>)以及函数标签库(<fn:indexOf("adhsjakh","s")>),函数标签库之前已经介绍过,数据库标签与XML标签很少用到,所以本篇主要是核心库和国际化库常用的内容,最后提一下自定义标签库的思路。

    =============================================================>

      核心标签库在导入时存在1.0和1.1两个版本,但在taglib引用时区别就只是路径上有区别,所以特别注意。

      常用核心库的内容,首先是一个域操作的例子:

    ...
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ page isELIgnored="false"%>
    </head>
    <body>
        <c:out value="hello,This is jstl-c test!"></c:out>
        <br>
        <c:out value="${empty user}"></c:out>
        <br>
        <c:out value="<a>html编码显示</a>" escapeXml="true"></c:out>
        ====>
        <c:out value="<a>html编码转义后显示</a>" escapeXml="false"></c:out>
        <br>
        <hr/>
        <c:set value="changchun" var="place" scope="request"></c:set>
        c:set设置后取值:${requestScope.place }
        <c:remove var="place" scope="request"/>
        <br>
        c:remove后再取值:${requestScope.place }
    </body>
    ...

    页面展示:

    hello,This is jstl-c test! 
    true 
    <a>html编码显示</a> ====> html编码转义后显示 
    c:set设置后取值:changchun 
    c:remove后再取值:

      逻辑控制操作的例子:

    ...
    <title>Insert title here</title>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ page isELIgnored="false"%>
    </head>
    <body>
        <c:set var="username" value="changchun" scope="session"></c:set>
        <c:if test="${not empty sessionScope.username }">
            <b>not empty</b>
        </c:if>
        <c:if test="${empty sessionScope.username }">
            <b>empty</b>
        </c:if>
        <br>
        <c:choose>
            <c:when test="${not empty sessionScope.username }">
                <b>choose中显示有值!</b>
                <br>
            </c:when>
        </c:choose>
        <c:choose>
            <c:when test="${param.id<=10 }">
                param.id<=10
            </c:when>
            <c:when test="${param.id>100 }">
                param.id>100
            </c:when>
            <c:otherwise>
                <b>所输入的数值不在关注范围内</b>
            </c:otherwise>
        </c:choose>
    </body>
    ...

    页面展示:

    http://localhost:8080/RFP02W/views/cTestLogic.jsp?id=18
    not empty 
    choose中显示有值! 
    所输入的数值不在关注范围内

       另一个比较常用的就是url处理,对于复杂的地址,可以用<c:url>进行简化:

    ...
        <h2>Hello World!</h2>
        <a href="${pageContext.request.contextPath}/views/elTest.jsp">elTest</a>
        <a href="${pageContext.request.contextPath}/views/cTest.jsp">cTest</a>
        <a href="${pageContext.request.contextPath}/views/cTestLogic.jsp">cTestLogic</a>
        
        <c:url value="/views/elTest.jsp" var="elTest" scope="session"></c:url>
        <a href="${sessionScope.elTest }">try elTest again!</a>
    ...

    简化后的地址与之前的效果一致,如果需要在其后加参数,直接在里面引用<c:param>,用name与value进行赋值。

      <c:foreach>可以对字符串,数组,集合实现遍历,使用得当可以减少脚本的篇幅,使代码易于理解。此处略过。

    =================================================================>

      最后fmt标签库简单举个例子:

    <body>
        <%
            pageContext.setAttribute("date", new Date());
        %>
        <fmt:formatDate value="${date}" pattern="yyyy-MM-dd hh:mm:ss:SSS"/><br>
        <fmt:formatNumber value="3.1415926"></fmt:formatNumber><br>
        <fmt:formatNumber value="3.1415926" pattern="#.##"></fmt:formatNumber><br>
        <fmt:formatNumber value="3" pattern="#.##"></fmt:formatNumber><br>
        <fmt:formatNumber value="3" pattern="0.00"></fmt:formatNumber><br>
    </body>

    页面效果:

    2016-10-12 01:16:36:364
    3.142
    3.14
    3
    3.00

    =================================================================>

      自定义标签的作用无非是为了减少jsp页面中冗余的脚本代码,对于高复用的脚本块来说,自定义标签可以代替脚本块。但目前的通用做法是要将展示与逻辑进行分离,逻辑的部分会放到servlet中进行更灵活的处理,所以这里简要介绍思路,具体要用时可以查阅资料。

    开发步骤
    1.编写实现类
    2.编写配置文件,确定使用时那个实现类
    3.在jsp中引用配置文件,使用标签
    实现类
    要求:实现接口 SimpleTag,继承类 SimpleTagSupport

    传统标签:实现接口Tag,继承类TagSupport,功能更强大,但实现繁琐。
    简单标签:接口SimpleTag,继承SimpleTagSupport ,在jsp2.0之后提供
    提供标记接口父类:JspTag
    配置文件
    tld文件 tld是taglib description 的缩写 , 标签类库的描述文件,是jsp解析程序可以通过配置文件获得相应的实现类
    tld文件基于xml文件,扩展名为tld,内容xml
    tld位置:
    1.WEB-INF目录,及子目录,但 classes、lib目录除外
    2.WEB-INF/lib/*.jar/META-INF/目录下,jar文件内
    简单标签生命周期:
    1. 创建标签实例
    2. 设置PageContext,执行setJspContext()
    3. 每一个属性setter方法,执行 setPattern()
    4. 如果有标签体,执行setJspBody()
    5. 执行doTag()
    执行标签体
    this.getJspBody().invoke(null) ; 输出到浏览器。
    在doTag()方法体中,throw SkipPageException() 异常 可以阻止当前标签之后内容的输出。

  • 相关阅读:
    Java泛型学习笔记
    Java泛型学习笔记
    Java泛型学习笔记
    Java泛型学习笔记
    Java泛型学习笔记
    Java泛型学习笔记
    Java泛型学习笔记
    有1到100共100个数, 从1开始, 每隔1, 2, 3... 个数拿走一个数, 最后剩下几?(约瑟夫环)
    推荐一个自动抽取pdf高亮笔记的web应用
    协程
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/5951453.html
Copyright © 2011-2022 走看看