首页 > 编程知识 正文

html自定义标签如何实现,html嵌入java代码

时间:2023-05-05 02:14:44 阅读:51909 作者:2143

在jsp开发时,当jsp内置标签以及JSTL标签库都满足不了需求时,可以根据自己的需求来自定义标签。其实在jsp页面使用标签就等同于调用某个对象的某个方法。

自定义标签步骤:先定义标签处理类(如继承SimpleTagSupport类),再编写TLD文件(标签库描述库文件)。

定义标签类可以编写一个实现SimpleTag接口的类,

http://www.Sina.com/http://www.Sina.com/mytag 1http://www.Sina.com/simple tag {

33558 www.Sina.com/pagecontext context;

33558 www.Sina.com/jspfragmentbody;

@Override

http://www.Sina.com/http://www.Sina.com/dotag (3358 www.Sina.com/JSP exception,IOException { ) ) )。

context.getOut ().print ) (这是自定义标签);

}

@Override

33558 www.Sina.com/jsptaggetparent (

http://www.Sina.com/http://www.Sina.com /

}

//以下三个方法在doTag方法之前调用在tomcat之前,因此可以在doTag方法中使用传递的对象

//设置标签体

@Override

3358 www.Sina.com/http://www.Sina.com/setjspbody {

public.body=body;

}

//JSP上下文对象,其子类为PageContext

@Override

3358 www.Sina.com/http://www.Sina.com/setjspcontext (jspcontextcontext ) {

http://www.Sina.com/. context=(pagecontext ) context;

}

//设定父标签

@Override

3358 www.Sina.com/http://www.Sina.com/setparent (jsptagarg0) {

}

}

class

器)调用,所以把传递过来的对象赋值给成员变量后,就可以在doTag方法里面就可以使用传过来的对象了(这里没有用到父标签所以setParent方法体没写代码),其中在doTag方法里面使用PageContext对象获取输出流输出了一句字符串。

编写好标签处理类后,还需要在配置tld文件。

一般tld文件都放在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">

 

  <tlib-version>1.0</tlib-version><!-- 自定义标签库的版本号 -->

  <short-name>tag</short-name><!-- 自定义标签库的简称 -->

  <uri>http://www.tianye.cn/tag1.0</uri><!-- 自定义标签库的uri -->>

  <tag>

  <name>MyTag1</name><!—指定当前标签名称 -->

  <tag-class>cn.tianye.tag.MyTag1</tag-class><!—指定当前对应标签出处理类 -->

  <body-content>empty</body-content><!-- 标签体内容格式 -->

  </tag>

  </taglib>

上面需要这注意的是<body-content>元素的可选值有

empty:也就是没有标签体(如果在这里设置的是empty,那么在jsp页面上就不能有标签体。)

JSP:传统标签支持它,SimpleTag已经不支持使用<body-content>JSP</body-content>

(标签内容是可以有任何东西,比如EL,JSTL,HTML以及<%%>等)

scriptless:标签体内容不能是java脚本,可以是EL,JSTL,字符串等,在SimpleTag中需要标签体可以使用这选项。

tagdependent:标签体内容不作运算,全由标签处理类自行处理,无论标签体内容是EL,JSTL等,都不会作运算。(这个基本没有人会使用,因为用起来太麻烦,什么都要自己处理)

配置好tld文件后就可以在jsp页面上使用了,在使用自定义标签之前,需要先使用指令导入标签库。

使用taglib导入标签库,uri是tld文件的存放位置

<%@taglib prefix="t" uri="/WEB-INF/tlds/tianye.tag.tld" %>

使用自定义标签

<hr>

   <h1><t:MyTag1/></h1>

   <hr>

 

 

 

 

效果

自定义有标签体的标签

首先需要获取标签体对象(JspBody)、把标签体内容输出到页面、tld中指定标签内容格式为scriptless。

标签处理类代码

public class MyTag3 extends SimpleTagSupport {

   @Override

   public void doTag() throws JspException, IOException {

   this.getJspContext().getOut().print("***************<br>");

   //执行标签体的内容,把结果输出到页面

   Writer writer = this.getJspContext().getOut();

   this.getJspBody().invoke(writer);

   this.getJspContext().getOut().print("<br>***************");

   }

}注:上面的类继承了SimpleTagSupport类(SimpleTagSupport类实现了SimpleTag接口,也就是它已经把所有Tomcat(服务器)传递的对象保存了,不需要我们自己操作保存传递过来的对象了,同时也提供了get方法供子类调用),重写了doTag()方法,然后调用对象获取当前jsp输出流,执行标签体内容,把结果写入指定流中即输出到页面上。

tld文件(也就是<body-content>可选项改为scriptless,其他跟前面的一样)

<tag>

  <name>MyTag3</name>

  <tag-class>cn.tianye.tag.MyTag3</tag-class>

  <body-content>scriptless</body-content>

  </tag>

在jsp页面上使用标签(可以标签体可以是EL,也可以是字符串)

<%request.setAttribute("title", "It doesn't matter where you came from,"); %>

 <h1><t:MyTag3>${requestScope.title }</t:MyTag3></h1>

 <h1><t:MyTag3>what matters is who you choose to be.</t:MyTag3></h1>

效果

其中还可以自定义带有属性的标签,这里就不过多描述

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。