Jsp 自定义tag标签

原创 2015年07月10日 22:15:21

Jsp自定义tag标签

自定义tag标签的好处
程序员可以自定一些特定功能的标记, 用来封装代码, 达到分工, 重用性等多种好处.
如何存放tag标签
通常在web工程WEB-INF文件夹下创建tags文件夹来存放自定义的tag,如/WEB-INF/tags
tag标签的语法
要知道怎样定义tag标签就需要知道tag标签的基本属性,例如:

<%@ tag body-content="empty" trimDirectiveWhitespaces="true" pageEncoding="UTF-8"%>

通常我们在*.tag文件的开头加上以上的代码来告诉jsp容器这是一个tag标记文件。

body-content有以下三种属性:
1. empty:这个是一个空标记.
2. scriptless:标记主体可以有内容, 并且jsp容器会去处理里面的jsp元素, 这些内容可以是文本, EL表达式, 标准动作甚至另一个自定义标记.
3. tagdependent:标记主体可以有内容, 而jsp容器会把它们当作纯文件处理

trimDirectiveWhitespaces=“true”表示删除多余的空行
pageEncoding=”UTF-8” 表示page的编码格式

标记中也可以定义attribute,例如:

<%@ attribute name="x" required="true" rtexprvalue="true" %>
<%@ attribute name="y" required="true" rtexprvalue="true" %>

attribute的属性介绍如下:
1. name :这个attribute的名称.
2. required : true/false, 是否必须的.
3. rtexprvalue : true/false, 这个attribute可否使用EL表达式, 否则为纯文本.
4. type : 设定这个attribute的类型, jsp容器会把结果自动转换成这个类.

单纯的说以上的定义是不是有点糊涂呢?农夫选豆种——举例(粒)为证:
先展示出自定义的tag在web工程下的目录结构,
这里写图片描述

我们看一下index.jsp的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib tagdir="/WEB-INF/tags/" prefix="yu" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>define tag</title>
</head>
<body>
    <!-- test tag [body-content="empty"] -->
    <yu:add x="1" y="2"/>

</body>
</html>

该index.jsp中引用了add.tag文件,看一下add.tag文件的定义:

<%@ tag body-content="empty" trimDirectiveWhitespaces="true" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ attribute name="x" required="true" rtexprvalue="true" %>
<%@ attribute name="y" required="true" rtexprvalue="true" %>
<div>
    <h4>The result of x+y is</h4> 
    result = ${x+y}
</div>

运行起来程序我们看看运行结果:
这里写图片描述
至此,基本上已经理解了tag文件的使用了吧,那我们做进一步的学习。
继续编写index.jsp代码,来验证body-content=”scriptless”的tag文件:

<!-- test tag [body-content="scriptless"] -->
<yu:scriptless_tag>
This tag's body-content is [scriptless], let's have a test, i'm here.<br/>
<label>contextPath:<label/> ${pageContext.request.contextPath}
</yu:scriptless_tag>

那我们来看一下scriptless_tag.tag文件的定义:

<%@ tag body-content="scriptless" trimDirectiveWhitespaces="true"  pageEncoding="UTF-8"%>
<div style="background-color: red; width=auto">my backgroud color is red</div>
<jsp:doBody></jsp:doBody>
<div style="background-color: blue; width=70px;">my backgroud color is blue</div>

细心的朋友发现这里面多了一个\<\jsp:doBody>标签,该标签的作用就是讲index.jsp中该标记文件标记的主体显示在该处,来看一下程序运行结果吧,一目了然:
这里写图片描述
在index.jsp文件中scriptless_tag标签标记的主体显示在了红色背景和蓝色背景之间,并且将代码${pageContext.request.contextPath}解析成了 /yuTestTag

继续编写index.jsp代码,来验证body-content=”tagindependent”的tag文件:

<!-- test tag [body-content="tagindependent"] -->
<yu:tagdependent_tag>
This tag's body-content is [tagindependent], let's have a test, i'm here.
<label>contextPath:<label/> ${pageContext.request.contextPath}
</yu:tagdependent_tag>

scriptless_tag.tag文件的定义和scriptless_tag.tag的内容基本一样:

<%@ tag body-content="tagdependent" trimDirectiveWhitespaces="true" language="java" pageEncoding="UTF-8"%>
<div style="background-color: red; width=auto">my backgroud color is red</div>
<jsp:doBody></jsp:doBody>
<div style="background-color: blue; width=70px;">my backgroud color is blue</div>

继续看看运行结果:
这里写图片描述
代码${pageContext.request.contextPath}没有被解析,只是当做纯文本文件

最后附上index.jsp的完整代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib tagdir="/WEB-INF/tags/" prefix="yu" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>define tag</title>
</head>
<body>
    <!-- test tag [body-content="empty"] -->
    <yu:add x="1" y="2"/>

    <hr>

    <!-- test tag [body-content="scriptless"] -->
    <yu:scriptless_tag>
    This tag's body-content is [scriptless], let's have a test, i'm here.<br/>
    <label>contextPath:<label/> ${pageContext.request.contextPath}
    </yu:scriptless_tag>

    <hr>

    <!-- test tag [body-content="tagindependent"] -->
    <yu:tagdependent_tag>
    This tag's body-content is [tagindependent], let's have a test, i'm here.
    <label>contextPath:<label/> ${pageContext.request.contextPath}
    </yu:tagdependent_tag>
</body>
</html>

到此我相信这三种类型的tag的区别已经显而易见了,先简单的写到这,如有不妥请留言补充说明。

jsp中Tag的使用(自定义标签)

Tag文件可以实现代码的复用,这些代码可能是许多JSP页面都需要的。为了能让一个Web应用中的JSP页面使用某一个Tag文件,必须把这个Tag文件存放到Tomcat服务器指定的目录中,也就是说,如果某...
  • djx123456
  • djx123456
  • 2012年07月12日 17:49
  • 3430

JSP中的TAG

JSP标签有两种实现方法,一种是使用tag 文件,一种是使用tld文件。 1、使用tag文件 标签名和tag文件名一致, tag文件为JSP文件,可以有属性,把JSP页面当JavaBean文件一样使用...
  • hongweigg
  • hongweigg
  • 2013年09月25日 11:43
  • 18760

开发第一个JSP自定义标签(Tag)

开发和使用JSP自定义标签过程:1.开发标签实现类.  HelloTag_Interface.java文件内容:import javax.servlet.jsp.tagext.Tag;import j...
  • lip009
  • lip009
  • 2006年10月10日 22:39
  • 9548

java--自定义标签(tag、tld两种)

1.一篇不错的 java自定义标签的文章地址:http://gaoshu2006.blog.sohu.com/113222643.html 2.sun公司java自定义标签原文地址:http:/...
  • white__cat
  • white__cat
  • 2014年12月01日 14:47
  • 34388

jsp参考(一) 动作元素[action]

说明 该元素为另外一个JSP动作定义了一个属性值。还可以与jsp:element>动作结合,从而创建一个模板文本标记元素。   语法 jsp:attribute name="attrName" [tr...
  • plusir
  • plusir
  • 2006年08月24日 23:54
  • 3740

jsp:invoke jsp:doBody attribute与variable两个指令元素

JSP/Servlet: 、与指令元素 在Tag File中可以使用与动作元素,前者是用来处理卷标本体文字,后者则是用来设 定标签间的Fragment,这两个动作元素搭配着attribute与var...
  • zhou8622
  • zhou8622
  • 2016年11月27日 22:17
  • 1223

【Java.Web】JSP —— 标签库taglib —— 自定义JSP标签 —— JSP Tag API

JSP Tag API Servlet 容器在运行翻译JSPwen'jian
  • robinjwong
  • robinjwong
  • 2014年10月06日 14:51
  • 2061

JavaWeb学习篇之----自定义标签&&JSTL标签库详解

今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年04月17日 10:26
  • 43253

自定义标签tag

一、基本概念:  1.标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都...
  • yuannauy
  • yuannauy
  • 2007年06月02日 10:46
  • 4165

JSP自定义标签(tag)

 什么是自定义标签?1,用户自定义的Java语言元素, 实质是运行一个或者两个接口的JavaBean;2,可以非常紧密地和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处理能力...
  • kongfanyu
  • kongfanyu
  • 2009年11月03日 14:13
  • 7531
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jsp 自定义tag标签
举报原因:
原因补充:

(最多只允许输入30个字)