JSP自定义标签

来源:互联网 发布:nba2k17麦迪动作数据 编辑:程序博客网 时间:2024/06/06 07:33
标签转化为对被 称为tag handler的对象的操作,即当 servlet执⾏行行时Web container调⽤用那些操作。
JSP标签扩展可以让你创建新的标签并且可以直接插⼊入到 ⼀个JSP⻚页⾯面
继承SimpleTagSupport类并重写的doTag()⽅方法来开发⼀ 个最简单的⾃自定义标签。
我们如何做一个自定义标签呢<EX:run/>
1.首先编写标签的逻辑功能类,即继承SimpleTagSupport类
2.定义标签格式⽂文件TLD
3.使⽤用JSP指令引⼊入TLD⽂文件
4.就可以使⽤用标签了了
One:
public class EXrun extends SimpleTagSupport {public EXrun(){}public void doTag() throws IOException{JspWriter out = getJspContext().getOut();out.println("my first jsp tag");}}

<taglib><tlib-version>1.0</tlib-version><jsp-version>2.0</jsp-version><short-name>Example TLD</short-name><tag><name>run</name><!-- 这里的值就是上面的标签中的run --><tag-class>tag.EXrun</tag-class><!-- 表示的是包名加类名 --><body-content>empty</body-content><!-- 表示标签的中间不能填写数据 -->
</tag></taglib>

后面注意在你的jsp运行文件上配置你的自定义标签
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%> <%@ taglib prefix="EX" uri ="WEB-INF/EX.tld"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Insert title here</title></head><body><EX:run></EX:run></body></html>
运行结果为my first jsp tag
Two:那么学会了第一步,就会想到如何在标签中加入内容比如说:<EX:bodytag>你好世界</EX:bodytag>
同样的我重新定义了一个类
public class EXBodyTag extends SimpleTagSupport {public EXBodyTag(){}public void doTag(){StringWriter sw = new StringWriter();try {getJspBody().invoke(sw);getJspContext().getOut().println(sw.toString());} catch (JspException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

这边只要在最先创建的tld中增加就好了
<tag><name>BodyTag</name><tag-class>tag.EXBodyTag</tag-class><body-content>scriptless</body-content></tag>
这样你就可以在你的jsp中使用<EX:BodyTag>你好</EX:BodyTag>

Three:最后说说标签中的属性吧,其实就是我们在类中设置的变量,和上面的做法一致:such:<EX:AttrTag message="hello world">
public class EXAttrTag extends SimpleTagSupport {private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public void doTag(){try {if(message !=null){JspWriter out =getJspContext().getOut();out.println(message);}else{    StringWriter sw = new StringWriter();getJspBody().invoke(sw);getJspContext().getOut().println(sw.toString());}}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (JspException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
我在这边做了判断,如果我们没有设置属性的话就显示我们标签中的内容,不然的话不显示

<tag><name>AttrTag</name><tag-class>tag.EXAttrTag</tag-class><body-content>scriptless</body-content><attribute><name>message</name></attribute></tag>

同样的在tld中添加,输出的时候<EX:AttrTag message="hello world"></EX:AttrTag>
最后的全部输出:


原创粉丝点击