1.自定义标签 【理解】
    [1]简介   
        > 在JSP2.0以后,在jsp页面中不建议使用脚本片段<% %>和JSP表达式<%= %>
        > 使用EL来替换的JSP表达式
        > 使用标签来替换脚本片段
        > 在JSP中已经为我们提供了很多的诸如:<jsp:forward page=""></jsp:forward>
            这样的JSP动作标签,这些标签最终在被翻译的时候都会被转换为一段Java代码
        > 标签就是以标签的形式去调用Java程序   
        > 但是JSP的动作标签并不能满足我们的全部需求,所以我们还需要去自定义标签
        > 多个自定义标签就组成了一个自定义标签库
        > 每一个自定义标签的背后都有一个标签处理器类去支持他的功能
 
    [2]使用步骤
        1.创建标签处理器类
            - 创建一个标签处理器类,要求我们要实现SimpleTag接口
                void doTag() --> 标签处理器类中的主要方法,每次标签执行时,doTag()方法都会被调用
                JspTag getParent() --> 获取当前标签的父标签
                void setParent(JspTag parent) --> 设置当前标签的父标签,由服务器调用
                void setJspBody(JspFragment jspBody) --> 设置标签的标签体,该方法由服务器调用,用来设置当前标签的标签体
                void setJspContext(JspContext pc) --> 设置PageContext,PageContext可以用来获取jsp中的其他隐含对象
 
            - 我们说实现SimpleTag接口时,所有方法我们都需要去实现,而这些实现大部分都是重复,
                所以我们真实使用时,一般不会直接实现该接口,而是通过继承SimpleTagSupport的方式去创建一个标签处理器类。
            - SimpleTagSupport中已经实现类SimpleTag中的所有方法,我们只需要重写doTag()方法即可,
                其他的JspContext,标签体,父标签,都可以直接去调用相应的get方法即可
 
        2.在服务器中注册标签处理器类(tld文件)
            - 编写tld文件(标签库的描述文件),实际上它就是一个xml文件,只是他扩展名是tld
            - tld文件需要编写在WEB-INF目录下
            - 标签库的描述信息:
                <!-- 标签库的配置信息 -->
                <tlib-version>1.0</tlib-version>
 
                <!-- 标签的短名,标签的前缀 -->
                <short-name>a</short-name>
 
                <!-- 标签库的唯一标识 -->
                <uri>http://www.bdp.com/taglib/a</uri>
 
            - 自定义标签的描述信息:
                <!-- 具体标签的配置信息 -->
                <tag>
                    <!-- 标签的名字,通过标签名来使用标签 -->
                    <name>MyTag</name>
 
                    <!-- 标签的全类名 -->
                    <tag-class>com.bdp.taglib.MyTag</tag-class>
 
                    <!-- 标签体的类型 -->
                    <body-content>empty</body-content>
                </tag>
 
            - body-content
                - 用来设置标签体的类型,四个可选值:
                    1.empty 表示标签没有标签体,是一个自结束标签
                    2.scriptless 表示当标签体中的内容是一个EL表达式时,服务器会自动解析EL表达式
                    3.JSP 表示标签体可以是一个JSP脚本片段
                    4.tagdependent 表示当标签体是一个EL表达式时,服务器将不会解析
                - 结论:
                    一般情况下,如果是一个自结束标签,则使用empty
                        如果有标签体则使用scriptless
 
            - 如果标签中有属性,则在tag标签中还需要做如下的配置:
                <attribute>
                    <name></name>
                    <required></required>
                    <rtexprvalue></rtexprvalue>
                </attribute>
 
                name:属性名
                required:属性是否是必须的,如果是必须则设置true,否则设置false
                rtexprvalue:如果属性值是一个EL表达式是否自动解析,两个值true则自动解析,false则不解析
 
        3.在页面引入标签库
            <%@ taglib prefix="a" uri="http://www.bdp.com/taglib/a" %> 
            uri:和标签库uri一致,标签库的唯一标识,通过uri来导入指定的标签库
            prefix:标签的前缀,可以随便写,但是我们习惯和short-name一致
 
 
2.JSTL(JSP Standard Tag Library)
    [1] JSTL简介
        > JSTL是JSP的标准标签库
        > JSTL为我们提供了一些常用的标签,供我们日常开发使用(if 、 if...else 、遍历 、 日期格式化)
        > 标签库
            - core :核心标签库
                - 核心标签库是我们JSTL中最常用的一个标签库,它里面封装很多常用的功能
                - 核心标签库又称为c标签
 
            - fn :函数标签库
                - 函数标签库中主要定义了一些字符串相关的方法,函数标签库需要结合EL表达式一起使用
 
            - fmt :格式化标签库(国际化标签库)
                - 对日期和数字进行格式化(国际化)操作
                - 2016/1/18 1/18/2016   1000  1,000
 
            - sql : 数据库标签库   
                - 在jsp中操作数据库的标签。已淘汰
 
            - xml : xml标签库   
                - 在jsp解析xml的标签。已淘汰
 
        > 使用JSTL需要先导入两个jar包:
            - taglibs-standard-impl-1.2.1.jar
            - taglibs-standard-spec-1.2.1.jar
 
    [2] 核心标签库   
        - 在页面中引入核心标签库:
            <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>   
        - 使用:
            out
                作用:将一个对象输出的页面中
                参数:
                    value:要输出的内容,可以是一个EL表达式
                    default:当value属性为空时,要显示的内容(默认值)
                    escapeXml:是否自动转义特殊字符,默认值为true,自动转义
 
                例子:
                    <c:out value="${code }" default="sunwukong" escapeXml="true" ></c:out>
 
            set
                作用:向域中设置一个属性
                参数:
                    var:属性名
                    value:属性值
                    scope:要将属性放入到的域中,可选值:page request session application
                        如果不写,默认是page
                例子:
                    <c:set var="username" value="sunwukong" scope="request" ></c:set>
 
 
            remove
                作用:移除域中的指定属性
                参数:
                    var:要移除的属性的属性名
                    scope:要移除属性的域,可选值:page request session application
                        如果不指定,则移除四个域中属性
                例子:
                    <c:remove var="username" scope="session"></c:remove>
 
            if
                作用:可以java中的if类似
                属性:
                    test:test需要一个布尔值,如果值为true,则执行标签体,否则不执行
                例子:
                    <c:if test="${empty param.username}">请输出用户名!</c:if>
 
 
            choose when otherwise
                作用:和if else 类似
                    choose有两个子标签,when otherwise,when和otherwise必须做完choose的子标签出现,不能单独使用。
                    在choose可以指定多个when标签,但是只能指定一个otherwise,
                        多个when标签只会有一个执行,如果when都不满足条件,则执行otherwise。
                例子:
                    <c:choose>
                        <c:when test="${param.score==100 }">
                            <h3>恭喜您,考了100分!</h3>
                        </c:when>
                        <c:when test="${param.score >= 90 }">
                            <h3>您的分数是A!</h3>
                        </c:when>
                        <c:otherwise>
                            <h3>恭喜你,没及格!</h3>
                        </c:otherwise>
                    </c:choose>
 
 
            forEach
                作用1:可以遍历一组数
                属性:
                    begin:遍历的开始位置,注意不能小于0
                    end:遍历的结束位置
                    var:指定一个变量名
                    step(可选):指定遍历时的步长(每次自增的长度)
                例子:
                    <c:forEach begin="1" end="10" step="1" var="index">
                        ${index}
                    </c:forEach>
 
                作用2:可以遍历集合
                    属性:
                        items:指定要遍历的集合,需要一个EL表达式
                        var:指定一个变量名
                        varStatus:遍历状态,获取当前元素遍历的状态(index count first last)
                    例子:
                        <c:forEach items="${list }" var="hero">
                            ${hero} <br />
                        </c:forEach>
 
                        <c:forEach items="${list }" var="hero" varStatus="vs">
                            ${vs.last }--${vs.first }-${vs.index }---${vs.count }---${hero} <br />
                        </c:forEach>
      *******************************************************************************

          ${vs.index}      输出行号,从0开始。
          ${vs.count}      输出行号,从1开始。
          ${vs.current}   当前这次迭代的(集合中的)项
          ${vs.first}  判断当前项是否为集合中的第一项,返回值为true或false
          ${vs.last}   判断当前项是否为集合中的最后一项,返回值为true或false
          <c:forEach begin='1' end='5' step='2' items='${list}' var='item'>
          begin、end、step分别表示:起始序号,结束序号,跳跃步伐。
      *********************************************************************************  
 
                        注意:遍历Map时,是获取的map中的一个一个键值对,我们可以通过.key获取键,通过.value来获取值
                        <c:forEach items="${map}" var="stu">
                            ${stu.key} --- ${stu.value} <br />
                        </c:forEach>
 
            url
                作用:用来为绝对路径加上项目名
                参数:
                    value:要设置的绝对路径
                    var:变量名,如果不指定var,则路径会直接输出,如果指定var,则路径会放入到page域中
                例子:
                    <c:url value="/index.jsp" var="url">
                        <c:param name="username" value="sunwukong"></c:param>
                        <c:param name="age" value="18"></c:param>
                        <c:param name="gender" value="男"></c:param>
                    </c:url>
                补充:
                    我们可以使用c:param标签在地址后附加请求参数,同时参数中的中文会自动进行url编码
 
            redirect
                作用:请求的重定向
                参数:
                    url:指定重定向的目标地址,注意会自动加上项目名,就不要写项目名
                例子:
                    <c:redirect url="/index.jsp">
                        <c:param name="username" value="sunwukong"></c:param>
                        <c:param name="age" value="18"></c:param>
                        <c:param name="gender" value="男"></c:param>
                    </c:redirect>
                补充:
                    我们可以使用c:param标签在地址后附加请求参数,同时参数中的中文会自动进行url编码   
 
    [3] 函数标签库   
        - 在页面中引入函数标签库   
            <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>   
        - 使用:
            函数标签库需要结合EL表达式一起使用,里边都是一些字符串的相关操作。
        - 例子:
            ${fn:xxxx}
            <!-- fn:contains判断一个字符串是否包含另一个 -->
            ${fn:contains('hello','lO') }  <br />
            <!-- fn:containsIgnoreCase判断一个字符串是否包含另一个,忽略大小写 -->
            ${fn:containsIgnoreCase('hello','lO') }<br />
            <!--fn:escapeXml自动转义特殊字符  -->
            ${fn:escapeXml("<html></html>") }<br />
            <!--fn:join用于将一个String数组转换为一个字符串,第二个参数需要指定一个连接符  -->
            ${fn:join(strs,"@") }<br />
            <!-- fn:split将一个字符串根据指定的字符拆分为一个数组,第二个参数需要指定一个拆分的字符 -->
            ${fn:split("a@b@c@d@e","@")[2] }<br />
            <!-- 将一个字符串转换为大写 -->
            ${fn:toUpperCase("abcdefg") }<br />
            - 具体用法参照alt+/
 

转载请注明出处!

http://www.cnblogs.com/libingbin/

感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。

自定义标签 与 JSTL(JSP Standard Tag Library)的更多相关文章

  1. 标准标签库JSTL(JSP Standard Tag Library)

    1, 核心标签(最常用, 最重要的) 表达式控制标签 out 输出常量 value---直接赋值 输出变量 default---默认值 escapeXml---控制转义字符(默认为true, 如果需要 ...

  2. JSTL的全称:JSP Standard Tag Library, jsp 标准标签库

    JSTL的全称:JSP Standard Tag Library, jsp 标准标签库 JSTL的作用     提供给Java web开发人员一个标准通过的标签函数库和EL来取代传统直接在页面上嵌入j ...

  3. JSTL(JSP Standard Tag Library ,JSP标准标签库)

    JSTL标签之核心标签   JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个实现 Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断.数据管 ...

  4. EL and JSTL(Jsp Standard Tag Libary)(转)

    一.什么是 EL 语言. 表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语音. 二.EL 语言的作用. 为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAS ...

  5. javaEE(7)_自定义标签&JSTL标签(JSP Standard Tag Library)

    一.自定义标签简介 1.自定义标签主要用于移除Jsp页面中的java代码,jsp禁止出现一行java脚本. 2.使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: •编写一个实现T ...

  6. JSTL 标准标签库 (JavaServer Pages Standard Tag library, JSTL)

    JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制标签库的集合,用来解决 像遍历Map或集合.条件测试.XML处理,甚至数据 库访问和数 ...

  7. JSP 标准标签库(JSTL)(JSP Standard Tag Library)

    [1] JSTL简介    > JSTL是JSP的标准标签库    > JSTL为我们提供了一些常用的标签,供我们日常开发使用(if . if...else .遍历 . 日期格式化)   ...

  8. EL(Expression Language)和JSTL标签(JSP Standard Tag Library)

    一.EL表达式: Expression Language提供了在 JSP 脚本编制元素范围外(例如:脚本标签)使用运行时表达式的功能.脚本编制元素是指页面中能够用于在JSP 文件中嵌入 Java代码的 ...

  9. JSP Standard Tag Library JSP标准标签库

    了解了基本的标签的底层实现,可以看系统定义的强大的标准标签 1.首先引入两个jar包 2.基本语法 <%@ taglib prefix="c" uri="http: ...

随机推荐

  1. 记一次串口通信调试,慎用SerialPort.Close

    做项目是遇到了串口通信,真是遇到了一个大坑,不知道是微软的坑还是我的坑. 让我慢慢道来完整的经历. 项目中以前是vb 写的,是vb与vb 之间进行串口通信,现在改成C#和之前的vb程序进行串口通信. ...

  2. HTML 5表单应用小结

    本文内容        HTML 5表单的组织方式         HTML 5表单的新增特性        访问表单控件及响应表单控件事件 HTML 5表单的组织方式 ★  将表单字段及其标签关联起 ...

  3. 实现了IEnumerable接口的GetEnumerator 即可使用 Foreach遍历,返回一个IEnumerator对象

    #region 程序集 mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framewor ...

  4. SEO技巧汇集

    每个人都喜欢好用的技巧,对吗?这里有55个用于搜索引擎优化的小技巧,甚至你的老妈用起来都易如反掌.哦,不是我的老妈,但你明白我的意思.这意味着网页设计师和SEO新手中大部分人都能迅速上手,没有任何困难 ...

  5. 使用MySQL WorkBench导出数据库

    1. 在MySQL WorkBench的Server Administrator中双击要连接的数据库: 2. 点击左边的Data Export,在右边的数据库列表中选择要导出的数据库: 3. Expo ...

  6. 【Java每日一题】201612015

    package Dec2016; import java.util.HashSet; public class Ques1205 { public static void main(String[] ...

  7. pageEncoding的默认设置

    windows-->preference-->myeclipse-->files and editors-->jsp 右侧 Encoding 选择  ISO 10646/Uni ...

  8. Insight API开源项目介绍

           首先,在阅读本文以前假设您已经了解比特币Bitcoin基本原理. Insight API是一个开源基于比特币Bitcoin  blockchain的REST风格的API框架.Insigh ...

  9. Java接口之间的继承

    /** * Created by xfyou on 2016/11/3. * 多接口之间的继承 */ public class HorrorShow { static void u(Monster b ...

  10. 不简单的SQL查询和排序语句

    真不简单!! 一:使用select语句进行查询 语法: SELECT    <列名> FROM      <表名> [WHERE    <查询条件表达式>] [OR ...