标记文件:很想include,但是比include更好

  • 建立和使用标记文件的最简方法
  1. 取一个被包含文件(如Header.jsp),把它重命名为带有一个.tag扩展名(Header.tag);

  2. 把标记文件(Header.tag)放在WEB-INF目录下一个名为tags的目录中;

  3. 在JSP中放一个taglib指令(有一个tagdir属性),并调用这个标记;

  • 如何向标记文件发送参数?

    对于标记文件,发送的不是请求参数,而是标记属性!

    在JSP中调用标记:



    在标记文件中使用属性:

  • 如何定义标记文件中所需要的属性——使用attribute指令

    attribute指令只能由标记文件使用,它与定制TLD中的tag部分的attribute子元素有些相似。



    若属性值很大,则把属性从标记文件中取出来,作为体。即在标记文件中不要attribute指令了:

  • 如果没有TLD,那么如何声明体中的内容?——tag指令

    标记文件中不但有attribute指令,还有tag指令,tag指令有body-content属性可以声明标记文件的体内容的类型。body-content属性的值有以下三种:
scriptless(default) tagdependent empty
不允许脚本 标记体看作纯文本 标记体中什么也没有

实际上,标记文件标记的体中绝对不允许有scriptlet脚本(可以有EL表达式)。

  • 容器在哪里查找标记文件?

    容器会在4个位置查找标记文件:
  1. 直接在WEB-INF/tags目录中查找
  2. 在WEB-INF/tags的子目录中查找
  3. 在WEB-INF/lib下的JAR文件的META-INF/tags目录中查找
  4. 在WEB-INF/lib下的JAR文件的META-INF/tags的子目录中查找

    注意,如果标记文件部署在一个JAR中,这个标记文件必须有个TLD;若直接凡在Web应用中,就不需要TLD。

如果标记文件还不够,有时还需要Java

到目前为止,利用标记文件,非Java程序员也能建立定制标记。因为无涉及Java类来处理标记的功能,也不涉及为标记文件建立TLD。

但是,若想要自己编写的标记文件可被别人以JAR的形式调用,那么必须要有TLD,甚至标记处理器(Java类)。

  • 标记处理器

    标记处理器不同于标记文件,他是完成标记工作的Java类,与EL函数有些相似,但是更强大更灵活。

    EL函数只是一些静态方法,而标记处理器类可以访问标记属性、标记体,甚至能访问页面上下文,从而得到作用域属性和请求及响应。
  • 定制标记处理器的两种类型:简单和传统

    一般来说,简单类型几乎能满足所有需要。

建立一个简单标记处理器

  • 一般步骤
  1. 编写一个扩展SimpleTagSupport的类
  2. 实现doTag()方法
  3. 为标记创建一个TLD
  4. 部署标记处理器和TLD
  5. 编写一个使用标记的JSP

  • 一个例子







简单标记处理器的生命周期

自己定制一个有属性简单标记(类似c:forEach?)

停止页面处理——SkipPageException

停止页面处理,不仅仅是抛出异常,而是希望页面已经处理的前一部分作为响应出现,但是不会出现因为某些原因停止处理的后一部分。





可见标记以后的页面信息(Back in the page ….)没有输出!

若从一个被包含页面调用标记,会发生什么情况?

SkipPageException只是停止直接调用标记的页面,外层页面会仍然继续执行。

简单标记的要点

简单标记和传统标记的区别

传统标记对比简单标记可以看看:

《Head First Servlets & JSP》-10-定制标记开发的更多相关文章

  1. 《Head First Servlets & JSP》-9-使用JSTL

    安装JSTL1.1的说明 JSTL1.1不是JSP2.0规范的一部分,能访问servlet和JSP API并不意味着能访问JSTL. 使用JSTL之前,需要将jstl.jar文件安装到Web应用的WE ...

  2. Head First Servlets & JSP 学习笔记 第九章 —— 使用JSTL

    JSTL1.1 不是JSP2.0规范的一部分!你能访问Servlet和JSP API 不意味着你能访问JSTL! 使用JSTL之前,需要将两个文件("jstl.jar" 和 &qu ...

  3. 《深入浅出Windows 10通用应用开发》

        <深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...

  4. 《Head First Servlets & JSP》-7-使用JSP

    学习的知识点 JSP,最后会变成一个servlet JSP最终或变成一个完整的servlet在Web应用中运行,只不过这个servlet类会由容器写好. JSP中的scriptlet 所谓script ...

  5. 《Head First Servlets & JSP》-8-无脚本的JSP

    以前servlet和JSP交互的代码 servlet代码示例: JSP代码示例: 若属性不是一个String而是一个Bean呢? 一个简单的JavaBean servlet代码示例: JSP代码示例: ...

  6. 《Head First Servlets & JSP》-1-前言

    <Head First Servlets & JSP>(中文版) BB,KS & BB著, 苏钰函,林剑译,中国电力出版社 数据交互 Web浏览器和Web服务器:通过Htt ...

  7. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mappe ...

  8. 深入分析JavaWeb Item23 -- jsp自己定义标签开发入门

    一.自己定义标签的作用 自己定义标签主要用于移除Jsp页面中的java代码. 二.自己定义标签开发和使用 2.1.自己定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 要编写一 ...

  9. kettle系列-4.kettle定制化开发工具类

    要说的话这个工具类还是比较简单的,每个方法体都比较小,但用起来还是可以的,把开发中一些常用的步骤封装了下,不用去kettle源码中找相关操作的具体实现了. 算了废话不多了,直接上重点,代码如下: im ...

随机推荐

  1. C中的时间函数的用法

    C中的时间函数的用法    这个类展示了C语言中的时间函数的常用的用法. 源代码: #include <ctime>#include <iostream> using name ...

  2. sklearn_算法选择

  3. P1230 智力大冲浪(洛谷)

    题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...

  4. Dubbo与Zookeeper

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  5. 异常:java.lang.IllegalStateException: No instances found of configserver(里面是一个微服务名)

    今天本地测试代码时出现了个异常,该异常出现的原因是:微服务启动的顺序出现了问题: 应该先启动本地eureka,然后在启动本地配置中心,然后在启动具体的微服务.

  6. spring学习十三

    1: RESTful URL : 域和端口 / servlet / 资源 / 参数id 2:  静态资源访问处理? 采用RESTful架构后,需要将web.xml中控制器拦截的请求设置为/,这样会将c ...

  7. 一个hitbernate配置文件,带几个表(注意mapping);如果连接字符串没有设置utf-8,向insert mysql 会产生乱码(utf8 或 utf-8)

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuratio ...

  8. SpringMVC中使用forward和redirect进行转发和重定向以及重定向时如何传参详解

    转自:http://blog.51cto.com/983836259/1877188 2016-11-28 09:45:59   如题所示,在SpringMVC中可以使用forward和redirec ...

  9. js和jQuery常用选择器

    笔者觉得js是前台基础中的基础,而其选择器则是js基础中的基础,因长期使用框架导致js生疏,所有查资料,回顾一下js的常用选择器: 1.document.getElementById("id ...

  10. 使用mui框架后a标签无法跳转

    由于最近工作项目上使用到前台mui框架,笔者在将H5转换为jsp时,遇见各种各样问题,原因归结为对mui框架不熟悉,今天就遇见一个特别奇怪的问题,界面中超链接<a>标签无法跳转,笔者试着添 ...