`
dou_shini8820
  • 浏览: 77834 次
社区版块
存档分类
最新评论

java自定义标签的开发步骤

 
阅读更多

 在jsp页面记录访问者的IP,可使用如下java代码:

 

<%
String ip = request.getRemoteAddr();
out.print(ip);
%>

 自定义标签的作用就是把jsp上的java代码移植到java文件中。

 

步骤:

1.写一个类来实现上述java代码,这个类要实现Tag接口,通常我们继承tagSupport这个类,

这个接口里有doStartTag().doEndtag(),setPageContext()等方法,当tomcat编译jsp页面开始一个标签时就执行doStartTag中的方法,setPageContext()在这之前把jsp上的page传递给“标签处理器类”了,也就意味我们可以获得request等对象了。

 

2.对于自定义标签我们需要一个描述标签意义的文件,这个文件是放在WEB-INF下的tld文件。

文件中有<Tag>的描述,需要设置相应的标签处理器类和uri-----以便在jsp页面导入。

 

3.在jsp页面使用taglib引入我们的uri,并指定prefix(通常和tld的文件名相同)。

 

4.在jsp页面使用我们开发的标签<pp:showIP/>

 

 

 

二。开发if。。。else自定义标签

 

首先思考,当jsp页面的if执行了,那么就要通知else这个java类不要执行,因此他们要有个共同的变量来标识,从而需要使用一个父标签来控制这个变量。这就类似与jstl中的

 

<c:choose>
	<c:when test="${user != null}">
		aaaaaaaaaa
	</c:when>
	<c:otherwise>
		bbbbbbbbbbb
	</c:otherwise>
</c:choose>
 

 

1.创建3个类ChooseTag,WhenTag,OtherwiseTag。

ChooseTag:中的isDao用来标识when标签和otherwise标签是否执行了,如果其中任何一个执行了,另外一个就不需要执行了。为了控制when和otherwise,需要doTag,调用getJspBody().invoke(null);

 

 

private boolean isDo;

	public boolean isDo() {
		return isDo;
	}

	public void setDo(boolean isDo) {
		this.isDo = isDo;
	}

	@Override
	public void doTag() throws JspException, IOException {
		this.getJspBody().invoke(null);
	}

 

 

 WhenTag:有一个test变量,是boolean型的,when执行前要判断其父标签的isDo是否为true,不为true且test变量为true时才执行。this.getParent()可以获取父标签,需要强制转换成ChooseTag。

 

when执行了后,要把isDo设置为true。

 

private boolean test;

	public void setTest(boolean test) {
		this.test = test;
	}

	@Override
	public void doTag() throws JspException, IOException {
		ChooseTag parent = (ChooseTag) this.getParent();
		if(test && !parent.isDo()){
			this.getJspBody().invoke(null);
			parent.setDo(true);
		}
	}

  OtherwiseTag:

 

 

@Override
	public void doTag() throws JspException, IOException {
		ChooseTag parent = (ChooseTag) this.getParent();
		if(!parent.isDo()){
			this.getJspBody().invoke(null);
			parent.setDo(true);
		}
	}
 

 

2.在WEB-INF下建luo.tld文件:

 

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>SimpleTagLibrary</short-name>
    <uri>http://baidu.com</uri>
    
    <tag>
        <name>choose</name>
        <tag-class>com.luo.web.tag.ChooseTag</tag-class>
        <body-content>scriptless</body-content>
    </tag>
    <tag>
        <name>when</name>
        <tag-class>com.luo.web.tag.WhenTag</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
        	<name>test</name>
        	<required>true</required>
        	<rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
    <tag>
        <name>otherwise</name>
        <tag-class>com.luo.web.tag.OtherwiseTag</tag-class>
        <body-content>scriptless</body-content>
    </tag>
</taglib>

 其中<body-content>scriptless</body-content>的scriptless包括JSP,表示有标签体,when标签还有个属性test。

3.在jsp最上面引入luo.tld

 

<%@taglib uri="http://baidu.com" prefix="c"%>

uri也可以表示成/WEB-INF/luo.tld 

 

三、打包

1、新建普通java工程,把刚才写的几个tag类连同包一起copy过来,然后再建立META-INF文件夹,把luo.tld copy进去,报错不用管

 

 

2、将工程导出jar格式,其中的.project文件和.classpath不用导

 

分享到:
评论

相关推荐

    java_web_第8章_自定义标签.ppt

    9.1 简单标签的开发 9.2 理解TLD文件 9.3 几种类型标签的开发 9.1.1 标签扩展API 9.1.2 自定义标签的开发步骤 9.1.3 SimpleTag接口及其生命周期 9.1.4 SimpleTagSupport类

    Java开发详解.zip

    031704_【第17章:Java数据库编程】_JDBC操作步骤及数据库连接操作笔记.pdf 031705_【第17章:Java数据库编程】_执行数据库更新操作笔记.pdf 031706_【第17章:Java数据库编程】_ResultSet接口笔记.pdf 031707_【第...

    JAVA上百实例源码以及开源项目源代码

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    JAVA上百实例源码以及开源项目

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    android开发入门与实战(下)

    11.2 应用开发步骤 11.2.1 界面设计始终是第一位——实现UI 11.2.2 必备的动力源泉——数据操作和存储 11.2.3 华丽转身——实现多页面跳转 11.2.4 始终为用户做好服务——增加Service 11.2.5 细节决定成败——完善...

    JSP基础与案例开发详解 光盘part1

    书中理论知识讲解透彻,实例开发步骤清晰,既适合初学者和具有一定Java编程经验的用户使用,也适合广大软件开发者和编程爱好者作为参考用书,同时也是大中专院校及社会培训机构的首选教材。 本书以Java为平台,结合...

    JSP基础与案例开发详解 光盘part2

    书中理论知识讲解透彻,实例开发步骤清晰,既适合初学者和具有一定Java编程经验的用户使用,也适合广大软件开发者和编程爱好者作为参考用书,同时也是大中专院校及社会培训机构的首选教材。 本书以Java为平台,结合...

    java初学者必看

    1.5.1 Java开发工具包 1.5.2 Java运行环境 1.6 Java技术体系 1.7 Java虚拟机 1.7.1 虚拟机数据类型 1.7.2 Java虚拟机的生命周期 1.7.3 Java虚拟机的体系结构 1.8 垃圾收集器 1.9 本章习题 第2章 Java开发...

    Java EE常用框架.xmind

    在Shiro中默认是使用ini文件去对比的,但我们开发往往是去数据库比较,因此我们需要自定义realm 自定义也很简单:继承AuthorizingRealm类就好了 自定义的realm支持散列算法 授权方式 编程式:通过写if...

    java自学之道

    第5章 Java图形界面开发 5.1 开发自己的控件 5.2 控件的排布示例 5.3 开发自己的QQ聊天系统 5.4 颜色选择器 5.5 按钮测试 5.6 密码验证器 5.7 绘制自己的坐标 5.8 多种字体显示 5.9 窗口风格选择器 5.10 右键菜单 ...

    21天学通Java-由浅入深

    28 1.3 程序开发过程 29 1.4 编码规范 29 1.5 HelloWorld:第一个Java程序 30 1.5.1 编写程序代码 30 1.5.2 编译程序代码并运行 30 1.5.3 注意事项 31 1.6 使用Eclipse集成开发工具开发 32 1.7 综合练习 32 1.8 小结...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    基于JavaWeb的停车场管理系统源码+报告+说明.zip

    通过实现停车场管理系统的功能,培养自己WEB应用设计与开发的能力,综合应用WEB开发中js技术、Servlet与JSP,以及JavaBean、自定义标签等技术,结合后台数据库管理,并且设计一套关于停车时间计算的收费标准,设计并...

    Java/JavaEE 学习笔记

    一、开发struts1应用的基本步骤...283 二、Struts的工作流程......................284 三、struts-config.xml配置文件中主要的元素和属性.........286 四、RequestProccessor.....................287 五、Struts1...

    低清版 大型门户网站是这样炼成的.pdf

    2.3.2 struts 2应用基本开发步骤—搭建eportal应用 69 2.3.3 struts 2中集成fckeditor 80 2.3.4 struts 2中集成displaytag 83 2.4 struts 2国际化实现 85 2.4.1 web应用的中文本地化 85 2.4.2 struts 2应用的...

    J2EE应用开发详解

    80 5.6.9 config对象 80 5.7 JSP自定义标签 81 5.8 小结 84 第6章 XML、CSS和XSLT 85 6.1 XML 85 6.1.1 什么是XML 85 6.1.2 XML的产生 85 6.1.3 XML的用途 86 6.1.4 XML元素 87 6.1.5 XML属性 87 6.1.6 XML语法规则 ...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

    cms后台管理

    Jeecms是基于Spring注解,在自定义标签时对于实体类和dao service等注意注解的问题。 五 自定义标签及使用自己创建的表的实现过程 下面是我自己定义的标签mycontent_list 首先,在数据库里创建了一个jc_...

Global site tag (gtag.js) - Google Analytics