JavaWeb基础—JSP自定义标签入门

自定义标签的作用:替换JSP页面的java代码

步骤:1.标签处理类(标签是一个对象,那也就需要先有类)  

   2.tld文件 它是一个xml(可以向c标签里借),一般放到WEB-INF下,不让客户端浏览器看到
      核心配置 <tag>
        <name>myTag</name>
        <tag-class>com.jiangbei.tag.MyTag</tag-class>
        <body-content>empty</body-content>
          </tag>
        【注意tag-class里面的对应的类记得改!】
   3.使用<%@taglib%>指定tld文件路径

  例如:

    标签处理类:

public class MyTag implements SimpleTag{

    private PageContext pageContext;
    private JspFragment body;

    @Override
    public void doTag() throws JspException, IOException {
        // 想要向页面输出,需要out,pageContext一个顶九个,可以得到out
        pageContext.getOut().print("Hello World");

    }

    @Override
    public JspTag getParent() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void setJspBody(JspFragment jspBody) {
        this.body = jspBody;

    }

    @Override
    public void setJspContext(JspContext pc) {
        //服务器传过来给他保存起来
        this.pageContext = (PageContext) pc;

    }

    @Override
    public void setParent(JspTag parent) {
        // TODO Auto-generated method stub

    }

}

在此目录下建立tld文件

文件内容如下:

<?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">

    <tlib-version>1.0</tlib-version>
    <short-name>itcast</short-name>
    <uri>http://www.itcast.cn/tags/1.0</uri>

    <tag>
        <name>myTag</name>
        <tag-class>com.jiangbei.tag.MyTag</tag-class>
        <body-content>empty</body-content>
    </tag>

    <tag>
        <name>myTag2</name>
        <tag-class>com.jiangbei.tag.MyTag2</tag-class>
        <body-content>empty</body-content>
    </tag>

    <tag>
        <name>myTag3</name>
        <tag-class>com.jiangbei.tag.MyTag3</tag-class>
        <body-content>scriptless</body-content>
    </tag>

    <tag>
        <name>myTag4</name>
        <tag-class>com.jiangbei.tag.MyTag4</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
            <name>test</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

</taglib>

直接继承类而避免直接实现接口:

  

public class MyTag3 extends SimpleTagSupport{

    @Override
    public void doTag() throws JspException, IOException {
        //获取流,为了执行的参数输出
        Writer out = this.getJspContext().getOut();
        out.write("********************<br/>");
        //执行标签体内容,写到指定的流中(页面上)
        this.getJspBody().invoke(out);
        out.write("<br/>********************");
    }

}

标签处理类(JspFragment jsp片段,就是内容)
实现simpleTag接口:5个方法(当然不会你自己调用,tomcat帮你调用)
doTag()每次执行标签时都会调用这个方法,会在其它方法之后被tomcat调用
set/getParent 操作父标签的方法,其中get为非声明周期方法
setJspBody(JspFragment jspBody)
void setJspContext(JspContext pc)
当然,有时候实现接口是非常不方便的,于是就有了一个类给我们继承
SimpleTagSupport,已经帮我们把东西都存好了,并且提供了get方法
供子类调用
标签体内容支持的类型
empty
JSP:已经不支持!(标签体内容可以是JAVA脚本、EL表达式等)
scriptless 是EL表达式(当然普通字符串也是可以得)
第四种无用!

可以使用在标签处理类doTag()方法中throw new SkipPageException,
tomcat认识这个标签,它会进行捕获。后面的不会再执行
work目录下看真身可以看到实现究竟

可以给标签添加属性:
给标签处理类添加属性
在tld文件中对属性进行配置(都见WEB-INF下的tlds的itcast_tld)
rtexprvalue:运行时表达式值,就是可不可以是EL表达式值

时间: 2024-10-24 18:39:49

JavaWeb基础—JSP自定义标签入门的相关文章

JSP自定义标签入门实例详解

JSP自定义标签主要能用到的两个包 javax.servlet.jsp.*;javax.servlet.jsp.tagext.*; 自定义标签<userInfo:showUserInfo/>实现对用户的展现. 效果图如下 定义用户累User.java  get set就不在赘述. private String userName; private Integer age; private String email; public User(){ this.userName="张三&qu

JSP自定义标签开发入门《转》

JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的). 目标1:自定义一个用表格显示用户信息的简单标签 效果图: 在jsp页面使用此自定义标签: 假设我们有一个UserInfo的javabean,那

JSP自定义标签开发入门

一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的). 目标1:自定义一个用表格显示用户信息的简单标签 效果图: 在jsp页面使用此自定义标签: 假设我们有一个UserInfo的javabean,那么在JSP页面使用此标签只

【Jsp】JSP自定义标签与MODEL1、MODEL2标准

在JSP2.0之后支持自定义标签,现在一般都是jsp2.4的版本了,所以无须考虑版本的问题.直接使用就可以了.虽然一般开发的过程中,很少会自己定义JSP标签,但是通过一个JSP自定义标签的学习,可以从一定程度上理解struts等框架把好好的JSP标签改得面目全非的机理.正如Jquery本质是Javascript一样,SSH实际上Jsp.其实也没有什么,一个简单的例子就能够完全说明如何在JSP中自定义的标签. 通过自定义标签就能够达到所谓的MODEL2标准,在展示层VIEW给别人看的网页中不得出现

JSP自定义标签渲染时报Illegal to flush错误

javax.servlet.ServletException:Illegal to flush within a custom tag 此错误是因为在JSP页面中的某一个自定义标签的doStartTag或doEndTag中用了out.flush,而其他的自定义标签没有导致.可以去掉out.flush. JSP自定义标签渲染时报Illegal to flush错误,布布扣,bubuko.com

JSP 自定义标签 生命周期

1. 2. JSP 自定义标签 生命周期,布布扣,bubuko.com

整理一份jsp自定义标签以及权限控制标签

jsp自定义标签使用场景因地制宜,可以实现自定义的标签输出功能也可以实现权限的管理 1:先定义标签类 1-1:页面输出标签 package com.suyin.web.jspsectag; import java.io.IOException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; public cla

一个简单的jsp自定义标签

学到了一个简单的jsp自定义标签,后面有更多的例子,会更新出来: 例子1: 步骤: 1.编写标签实现类: 继承javax.servlet.jsp.tagext.SimpleTagSupport; 重写doTag,实现在网页上输出: 2.在web-inf目录或其子目录下,建立helloword.tld文件,即自定义标签的说明文件 注意:标签处理类必须放在包中,不能是裸体类:不需要修改web.xml: //tld: tag lib description 标签库描述 java代码: package

JSP自定义标签配置

JSP自定义标签 <taglib> <taglib-uri>/WEB-INF/you.tld</taglib-uri> <taglib-location>/WEB-INF/you.tld</taglib-location> </taglib> 由这个配置可知,JSP自定义标签配置文件不是放在lib目录下,也不是放在classes文件夹中,更不是放在WebRoot目录下,而是放在WEB-INF目录下