`
爱问知识人
  • 浏览: 28297 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

JSP自定义标签

    博客分类:
  • Java
 
阅读更多

      由于之前学习JSP时只是了解可以自定义JSP标签,但从没自己定义和使用过,具体怎么定义和使用不太清楚。最近,在项目过程中遇到一些问题,比如页面中接收或传递的某个值需要进行其他处理,而这样的处理在JSP页面写代码又不太适合,在后台处理再返回前台又比较麻烦,于是想到了使用JSP的自定义标签来解决这样的问题,然后对JSP自定义标签进行了简单学习,在此做下记录,并附上自己做的简单示例,希望对有需要的朋友有所帮助。

       下面简单说一下具体步骤:

1.不用多说都知道,创建Web工程,我的工程命名为Tag;

2.创建JavaBean实体类Userinfo.java,代码如下:

package com.util.bean;

public class Userinfo {

	private String userName;
	private int age;
	private String email;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}

 

3.创建Tag.java类继承TagSupport类,用于自定义标签,代码如下:

package com.util.taglib;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import com.util.bean.Userinfo;

public class Tag extends TagSupport{

	private Userinfo user;
	//一般情况下我们只需重写doStartTag(),doEndTag()即可

	//在开始标签属性设置后调用,如果返回SKIP_BODY则忽略标签之中的内容,如果返回EVAL_BODY_INCLUDE则将标签体的内容进行输出
	public int doStartTag() throws JspException{
		try{
			JspWriter out = this.pageContext.getOut();
			if(user == null){
				out.println("NO Userinfo Found...");
				return SKIP_BODY;
			}
			out.println("<table width='500px' border='1' align='center'>");
            out.println("<tr>");
            out.println("<td width='20%'>Username:</td>");
            out.println("<td>" + user.getUserName() + "</td>");
            out.println("</tr>");
            out.println("<tr>");
            out.println("<td>Age:</td>");
            out.println("<td>" + user.getAge() + "</td>");
            out.println("</tr>");
            out.println("<tr>");
            out.println("<td>Email:</td>");
            out.println("<td>" + user.getEmail() + "</td>");
            out.println("</tr>");
            out.println("</table>");
		}catch(Exception e){
			System.out.println("出错啦!");
			throw new JspException(e.getMessage());
		}
		return SKIP_BODY;
	}
	
	@Override
	//在结束标签之前调用,返回SKIP_PAGE跳过整个jsp页面后面的输出,返回EVAL_PAGE执行页面余下部分
    public int doEndTag() throws JspException {
        return EVAL_PAGE;
    }

    @Override
    //生命周期结束时调用
    public void release() {
        super.release();
        this.user = null;
    }
    //getter and setter
    public Userinfo getUser(){
    	return user;
    }
    //setPageContext() 将所在jsp页面的pageContext注入进来,目的是为了在后面的方法中可以访问到jsp页面对象的pageContext属性
    //setParent()       设置此标签的父标签
    //setAttribute()   将标签中的属性注入到此class的属性,不需要自己实现但要提供属性的get与set方法

    public void setUser(Userinfo user){
    	this.user = user;
    }

}

 

4.创建Taguti.java类,用于自定义标签功能(函数),代码如下:

package com.util.taglib;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import com.util.bean.Userinfo;

public class Tag extends TagSupport{

	private Userinfo user;
	//一般情况下我们只需重写doStartTag(),doEndTag()即可

	//在开始标签属性设置后调用,如果返回SKIP_BODY则忽略标签之中的内容,如果返回EVAL_BODY_INCLUDE则将标签体的内容进行输出
	public int doStartTag() throws JspException{
		try{
			JspWriter out = this.pageContext.getOut();
			if(user == null){
				out.println("NO Userinfo Found...");
				return SKIP_BODY;
			}
			out.println("<table width='500px' border='1' align='center'>");
            out.println("<tr>");
            out.println("<td width='20%'>Username:</td>");
            out.println("<td>" + user.getUserName() + "</td>");
            out.println("</tr>");
            out.println("<tr>");
            out.println("<td>Age:</td>");
            out.println("<td>" + user.getAge() + "</td>");
            out.println("</tr>");
            out.println("<tr>");
            out.println("<td>Email:</td>");
            out.println("<td>" + user.getEmail() + "</td>");
            out.println("</tr>");
            out.println("</table>");
		}catch(Exception e){
			System.out.println("出错啦!");
			throw new JspException(e.getMessage());
		}
		return SKIP_BODY;
	}
	
	@Override
	//在结束标签之前调用,返回SKIP_PAGE跳过整个jsp页面后面的输出,返回EVAL_PAGE执行页面余下部分
    public int doEndTag() throws JspException {
        return EVAL_PAGE;
    }

    @Override
    //生命周期结束时调用
    public void release() {
        super.release();
        this.user = null;
    }
    //getter and setter
    public Userinfo getUser(){
    	return user;
    }
    //setPageContext() 将所在jsp页面的pageContext注入进来,目的是为了在后面的方法中可以访问到jsp页面对象的pageContext属性
    //setParent()       设置此标签的父标签
    //setAttribute()   将标签中的属性注入到此class的属性,不需要自己实现但要提供属性的get与set方法

    public void setUser(Userinfo user){
    	this.user = user;
    }

}

 

5.在WEB-INF目录下创建标签文件tag.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"> -->
<taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd">
  
  <!-- 自定义自定义标签的版本 -->
  <tlib-version>1.0</tlib-version>
  <!-- 标签库要求的JSP规范版本 -->
  <jsp-version>2.0</jsp-version>
  <!-- JSP页面编写工具可以用来创建助记名的可选名字 -->
  <short-name>cc</short-name>
  <!-- 唯一标识该标签库的的URI(自定义) -->
  <uri>http://www.tag.mytag.com/</uri>
  
  <tag>
    <!-- 唯一标签名 -->
    <name>dispuserinfo</name>
    <!-- 标签类的完全限定名 -->
    <tag-class>com.util.taglib.Tag</tag-class>
    <!--  正文内容类型:如果不需要标签体则设置empty,反之设定jsp -->
    <body-content>empty</body-content>
    <!-- 由工具显示的可选名 -->
    <display-name>disname</display-name>
    <!-- 可以由工具使用的小图标 -->
    <!-- <small-icon>aa</small-icon> -->
    <!-- 可以由工具使用的大图标 -->
    <!-- <large-icon>bb</large-icon> -->
    <!-- 可选的标签特定的信息 -->
    <!-- <description>descinfo</description> -->
    <!-- 可选的脚本变量信息 -->
    <!-- <variable>param</variable> -->
    <!-- 标签属性信息(如果有的话) -->
    <attribute>
      <!-- 指定标签名 -->
      <name>user</name>
      <!-- 是否是必须,如果非必须没设置则为空 -->
      <required>false</required>
      <!-- 是否可在属性中使用表达式 -->
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
  
  <!-- Listener元素(标签库可以指定一些事件监听器类,Web容器将初始化监听器类并以类似在WAR级定义的监听器的方式注册它们,必须包含监听类的完全限定名) -->
  <!-- <listener>
    <listener-class>com.servlet.taglibServlet</listener-class>
  </listener>
  <listener>
    <listener-class>com.servlet.otherServlet</listener-class>
  </listener>
   -->
  
  <!-- 自定义的函数库 -->
  <function>
    <!-- 自定义标签函数功能名(与方法名称可以不同) -->
    <name>currentTime</name>
    <!-- 自定义标签函数所在的类全路径 -->
    <function-class>com.util.taglib.Tagutil</function-class>
    <!-- 自定义标签所在类方法名 -->
    <function-signature>java.lang.String curTime()</function-signature>
  </function>
  
  <function>
    <name>welcomeInfo</name>
    <function-class>com.util.taglib.Tagutil</function-class>
    <function-signature>java.lang.String welcomeInfo(java.lang.String)</function-signature>
  </function>
  
</taglib>

 6.在web.xml配置文件中配置自定义标签,配置代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
 
 <!-- 自定义标签 -->
 <jsp-config>
  <taglib>
   <!-- 标签库的uri路径,即jsp头文件中声明<%@ taglib uri="http://www.tag.mytag.com/" prefix="cc"%>的uri -->
   <taglib-uri>http://www.tag.mytag.com/</taglib-uri>
   <!-- tld文件所在的位置 -->
   <taglib-location>/WEB-INF/tag.tld</taglib-location>
  </taglib>
 </jsp-config>
 
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
 
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 
</web-app>

 

7.在JSP页面中引入相关类及自定义标签,并为bean对象赋值,如下:

<%@ page language="java" import="java.util.*,com.util.bean.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.tag.mytag.com/" prefix="cc" %>
<%
Userinfo user = new Userinfo();
user.setUserName("花无影");
user.setAge(20);
user.setEmail("wangyi@163.com");
pageContext.setAttribute("userinfo",user);
%>

 

8.使用自定义标签进行页面输出,如下:

<body>
    <center><h1>JSTL自定义标签</h1></center>
    <hr>
    <center><font color="red"><h2><b>1.自定义标签</b></h2></font></center>
    <cc:dispuserinfo user="${pageScope.userinfo}"/><br>
    <hr>
    <center><font color="red"><h2><b>2.自定义函数库</b></h2></font></center>
    当前访问系统时间:${cc:currentTime() }<br>
    ${cc:welcomeInfo("花无影") }
    <hr>
</body>

 9.页面显示结果如图:



 

    到此结束!

  

    (注:由于本人水平有限,写的不好还望各位朋友见谅,欢迎各位提出宝贵意见)

  • 大小: 7.7 KB
  • Tag.zip (10.4 KB)
  • 下载次数: 6
分享到:
评论

相关推荐

    jsp 自定义标签的使用

    本教程将深入探讨JSP自定义标签的使用,同时结合实例介绍分页和下拉框绑定值的封装。 一、JSP自定义标签基础 1. **定义标签库(Tag Library)**:自定义标签首先需要定义一个TLD(Tag Library Descriptor)文件,它...

    jsp 自定义标签实例

    本实例将深入探讨如何实现一个简单的JSP自定义标签。 首先,自定义标签的实现主要依赖于两个核心概念:Tag接口和TagSupport类。`Tag`接口定义了自定义标签必须实现的方法,如`doStartTag()`和`doEndTag()`,它们...

    jsp自定义标签例子,能在Tomcat下直接运行

    在JSP自定义标签的例子中,我们可以看到这个压缩包文件可能包含了一个完整的示例项目,可以在Apache Tomcat这样的Servlet容器下直接运行。Apache Tomcat是一款开源的Servlet容器,广泛用于部署和运行Java Web应用...

    JSP自定义标签学习笔记

    本篇学习笔记将深入探讨JSP自定义标签的相关概念、创建方法以及实际应用。 一、概述 1.1 使用简单标签机制 JSP自定义标签提供了类似HTML标签的语法结构,通过自定义标签,开发者可以封装复杂的Java代码,使得页面...

    jsp自定义标签报错的问题

    在使用JSP自定义标签时,开发者可能会遇到一些报错问题,这通常涉及到项目结构、类路径设置或自定义标签的编译与打包方式。在本文中,我们将深入探讨这些问题,以及如何解决“JspException”这个特定异常。 首先,...

    jsp自定义标签库实现数据列表显示

    本文将详细讲解如何利用JSP自定义标签库实现数据列表的显示,以及涉及到的相关技术。 首先,`UserListTag.java` 是自定义标签的核心类,它继承了`javax.servlet.jsp.tagext.TagSupport` 或 `javax.servlet.jsp....

    JSP自定义标签之自动完成框

    首先,我们要理解JSP自定义标签的概念。自定义标签是JSP的一种扩展机制,它允许开发者创建自己的标签库,以更加清晰和可维护的方式编写页面。自定义标签的实现通常涉及三个主要部分:标签库描述符(TLD)、标签处理...

    JSP自定义标签之日期显示

    本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过自定义标签来优雅地处理日期格式化和展示。 首先,我们要理解JSP自定义标签的基本概念。自定义标签是JSP的一种扩展,它不是Java内置的标签,而是由开发者...

    权威实用jsp自定义标签demo<select,checkbox,radio>

    综上所述,“权威实用jsp自定义标签demo,checkbox,radio&gt;”教程旨在帮助开发者掌握如何创建和使用与选择器相关的自定义标签,从而提升JSP开发的效率和质量。通过学习这个教程,你可以了解到自定义标签的核心概念、...

    JSP自定义标签JSP自定义标签

    综上所述,JSP自定义标签提供了一种强大的机制,使得JSP开发者能够创建定制的、可重用的代码片段,提升Web应用的开发效率和质量。通过理解和熟练运用自定义标签,开发者可以更好地组织和管理JSP项目,实现更高效的...

    jsp自定义标签编写的分页

    本教程将深入探讨如何利用JSP自定义标签来编写一个灵活、可扩展的分页系统,该系统不依赖于特定的数据库,具有很高的通用性。 首先,理解JSP自定义标签的工作原理至关重要。自定义标签由三部分组成:标签库描述符...

    jsp自定义标签库注意事项

    【jsp自定义标签库注意事项】 在Java服务器页面(JSP)开发中,自定义标签库是一种强大的工具,它能够帮助开发者创建可重用的代码片段,提高代码的可读性和可维护性。以下是对JSP自定义标签库的详细解释和使用注意...

    jsp权限控制,jsp自定义标签实现

    使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...

    JSP自定义标签动态属性支持

    首先,我们需要理解JSP自定义标签的基本结构。自定义标签通常由两部分组成:标签库描述符(TLD)和标签处理类。TLD文件定义了标签的名称、属性、行为等元数据,而标签处理类则实现了这些行为,处理由JSP页面传递过来的...

    jsp自定义标签 jsp自定义标签

    jsp自定义标签jsp自定义标签jsp自定义标签jsp自定义标签

    jsp自定义标签大全.rar

    本资源“jsp自定义标签大全.rar”提供了一套全面的JSP自定义标签的实例和指南,旨在帮助开发者深入理解和应用这一特性。 **JSP自定义标签的基本概念** JSP自定义标签不同于标准动作标签(如&lt;jsp:include&gt;或&lt;jsp:...

    JSP自定义标签实例与详细讲解

    本教程将深入探讨JSP自定义标签的实例与详细讲解。 一、JSP自定义标签概述 JSP自定义标签是类似于HTML标签的自定义组件,但它们提供了更强大的功能,可以封装Java代码,提供复杂的业务逻辑。自定义标签通过TLD(Tag...

    由浅到深详细讲解JSP自定义标签

    本文将深入讲解JSP自定义标签的相关概念、格式、处理过程以及创建和使用自定义标签库的基本步骤。 1. 基本概念: - **标签**:JSP标签是XML元素,用于简化JSP页面,使其更易读且支持多语言版本。标签名和属性区分...

Global site tag (gtag.js) - Google Analytics