自定义标签

自定义标签的开发与应用步骤

  • 编写完成标签功能的 Java 类(标签处理器)
  • 编写标签库描述(tld)文件,在tld文件中对自定义中进行描述
  • 在 JSP 页面中导入和使用自定义标签

①. 创建一个标签处理器类: 实现javax.servlet.jsp.tagext.SimpleTag接口.

package yang.mybatis.tag;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import java.io.IOException; /**
* Created by yangshijing on 2017/11/24 0024.
*/
public class HelloSimpleTag implements javax.servlet.jsp.tagext.SimpleTag{
@Override
public void doTag() throws JspException, IOException {
System.out.println("doTag");
} @Override
public void setParent(JspTag jspTag) {
System.out.println("setParent"); } @Override
public JspTag getParent() {
System.out.println("getParent");
return null;
} @Override
public void setJspContext(JspContext jspContext) {
System.out.println("setJspContext"); } @Override
public void setJspBody(JspFragment jspFragment) {
System.out.println("setJspBody"); }

②. 在 WEB-INF 文件夹下新建一个 .tld(标签库描述文件) 为扩展名的 xml 文件.

<?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">
<!--描述TLD 文件-->
<description>MyTag 1.0 core library</description>
<display-name>MyTag core</display-name>
<tlib-version>1.0</tlib-version>
<!--建议在Jsp页面上使用的标签的前缀-->
<short-name>myshortname</short-name>
<!-- 作为 tld 文件的 id, 用来唯一标识当前的 TLD 文件, 多个 tld 文件的 URI 不能重复. 通过 JSP 页面的 taglib 标签的 uri 属性来引用. -->
<uri>http://mycompany.com</uri> <!-- Invoke 'Generate' action to add tags or functions -->
<!--描述自定义的HelloSimpleTag 标签-->
<tag>
<!--标签名,在 JSP 页面上使用标签时的名字-->
<name>hello</name>
<!--标签所在的全类名-->
<tag-class>yang.mybatis.tag.HelloSimpleTag</tag-class>
<!--标签体的类型-->
<body-content>empty</body-content>
</tag>
</taglib>

③. 在 tld 文件中描述自定义的标签:

<!-- Invoke 'Generate' action to add tags or functions -->
<!--描述自定义的HelloSimpleTag 标签-->
<tag>
<!--标签名,在 JSP 页面上使用标签时的名字-->
<name>hello</name>
<!--标签所在的全类名-->
<tag-class>yang.mybatis.tag.HelloSimpleTag</tag-class>
<!--标签体的类型-->
<body-content>empty</body-content>
</tag>

④. 在 JSP 页面上使用自定义标签:

  • 使用 taglib 指令导入标签库描述文件:
<%@taglib uri="http://mycompany.com" prefix="nchu" %>
  • 使用自定义的标签:
 <nchu:hello/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--导入标签库描述文件--%>
<%@taglib uri="http://mycompany.com" prefix="nchu" %>
<%@ taglib prefix="nchu" uri="http://mycompany.com" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<nchu:hello/>
</body>
</html>

⑤.从结果可以看出,使用自定义标签时,首先调用自定义SimpleTag实现类的SetJspContext()方法,然后调用doTag()方法

@Override
public void setJspContext(JspContext jspContext) {
    System.out.println("setJspContext");
  }

JspContext 是PageContext的父类,通过该方法传入的参数既是PageContext对象;可以通过PageContext对象获取jsp的隐含对象,进而在doTag()方法中对自定义标签实现功能。

在浏览器上输出Hello World

package yang.mybatis.tag;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import java.io.IOException; /**
* Created by yangshijing on 2017/11/24 0024.
*/
public class HelloSimpleTag implements javax.servlet.jsp.tagext.SimpleTag{
private PageContext pageContext;
@Override
public void doTag() throws JspException, IOException {
pageContext.getOut().print("Hello world!");
System.out.println("doTag");
} @Override
public void setParent(JspTag jspTag) {
System.out.println("setParent"); } @Override
public JspTag getParent() {
System.out.println("getParent");
return null;
} @Override
public void setJspContext(JspContext jspContext) {
pageContext = (PageContext) jspContext;
boolean b = jspContext instanceof PageContext;
System.out.println("setJspContext "+b); } @Override
public void setJspBody(JspFragment jspFragment) {
System.out.println("setJspBody"); }
}

SimpleTag——认识自定义标签的更多相关文章

  1. Servlet------>jsp自定义标签SimpleTag(jsp2.0以后的方法,1-5已经淘汰了)

    自定义标签能做什么: 1.移除java代码 2.控制jsp页面某一部分是否执行 3.控制整个jsp是否执行 3.jsp内容重复输出 4.修改jsp内容输出 位置: TagDemo1.java pack ...

  2. [JSP]自定义标签库taglib

    自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...

  3. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

  4. 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

    EL应用      自定义一个标签,实现两个字符串的相加 1回顾      1.1servlet生命周期           init(ServletConfig)           service ...

  5. EL函数以及自定义标签的应用

    一.EL函数(调用普通类的静态方法) 编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤): ①编写一个普通的java类,提供一个静态方法,功能自定,例如下: package cn.wzbril ...

  6. JSTL 自定义标签

    编写描述标签的tld文件,把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签 package test.yz; import java.io.IOException; impor ...

  7. JSP自定义标签/自定义标签打包

    有这样一个业务需求: 当我们在编辑某个用户时,需要设置该用户的角色,在转到编辑页面时,就需要自动勾选上该用户已经选择的角色,如下图: 当我们点击编辑时,会查询用户详细信息,以及角色集合传到编辑页面. ...

  8. javaweb回顾第八篇如何创建自定义标签

    前言:在javaweb开发中自定义标签的用处还是挺多的.今天和大家一起看自定义标签是如何实现的. 1:什么是标签 标签是一种XML元素,通过标签可以使JSP页面变得简介易用,而且标签具有很好的复用性. ...

  9. 自定义标签 与 JSTL(JSP Standard Tag Library)

    1.自定义标签 [理解]     [1]简介            > 在JSP2.0以后,在jsp页面中不建议使用脚本片段<% %>和JSP表达式<%= %>     ...

随机推荐

  1. verilog 2001中的一些新语法

    比较有用的:1,generate语句,但需注意,generate-for中变量范围是已知的确定值, generate-case,generate-if语句中变量都必须是固定的, generate必须跟 ...

  2. 关于setdefault和defaultdict

    c参考链接:http://blog.csdn.net/real_ray/article/details/17919289 defaultdict就是为没有的键给一个默认的值,实际是实现了一个__mis ...

  3. Django--django-admin.py on windows does not work

    使用命令:Python django-admin.py startproject projectname 使用django-admin.py startapp myblog没有创建新的app,使用下面 ...

  4. C#反射 -- 基础

    两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时 ...

  5. [樹莓派]用mkusb来制作U盘启动安装Ubuntu 15.04

    之前實踐過這文章的描述,還可以成功:http://www.linuxdiyf.com/linux/12719.html,轉記錄餘下: 官方英文文档,教你在Ubuntu 15.04下使用mkusb来制作 ...

  6. layui与layer同时引入冲突的问题

    之前在项目中只有用layer,但是后来有用到了layui,结果发现同时引入这两个东东 会出现冲突的问题 导致代码运行不正常 后来网上找到了解决办法: 学习源头:http://fly.layui.com ...

  7. log4net内部调试开启

    最近用log4net写入日志到mysql数据库,死活写不进去,就想能不能看log4net的错误记录,在网上一找,还真有:开启log4net的内部调试,作个记录: <appSettings> ...

  8. 【转】Jmeter和LR上传文件和下载

    背景: 在某个申请业务中,需要上传附件文件,然后才能提交该申请 遇到的问题: 1,  在使用Jmeter或者LR进行录制时,无法录制到上传文件的请求,只能通过Fiddler能查看到该请求 2,  因为 ...

  9. spring-boot多环境配置文件

    spring-boot多环境配置文件 目录 配置 多环境配置文件名称要遵循格式 application-{profile}.yml application.yml spring: profiles: ...

  10. java成神之——HttpURLConnection访问api

    HttpURLConnection 访问get资源 访问post资源 访问Delete资源 获取状态码 结语 HttpURLConnection 访问get资源 HttpURLConnection c ...