一般情况下开发jsp自定义标签需要引用以下两个包
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的)。
目标1:自定义一个用表格显示用户信息的简单标签
效果图:
在jsp页面使用此自定义标签:
假设我们有一个UserInfo的javabean,那么在JSP页面使用此标签只需调用此标签即可
-
-
<%
-
UserInfo user = new UserInfo();
- user.setUserName("Xuwei");
- user.setAge(33);
- user.setEmail("test@test.test");
- pageContext.setAttribute("userinfo", user);
-
%>
-
-
-
<cc:showUserInfo user="${pageScope.userinfo }" />
开发步骤:
简单标签的开发我们只要实现Tag接口即可,为了简单起见可以直接继承实现了此接口的TagSupport类
1 创建自定义标签类
- public class UserInfoTag extends TagSupport {
-
- private UserInfo user;
-
- @Override
- 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) {
- throw new JspException(e.getMessage());
- }
- return SKIP_BODY;
- }
-
- @Override
- public int doEndTag() throws JspException {
- return EVAL_PAGE;
- }
-
- @Override
- public void release() {
- super.release();
-
this.user = null;
- }
-
- //getter and setters
- public UserInfo getUser() {
- return user;
- }
- public void setUser(UserInfo user) {
-
this.user = user;
- }
- }
-
2 在Web-Inf创建标签库描述文件.tdl(Tag Library Description)
- <?xml version="1.0" encoding="UTF-8"?>
-
<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-version>2.0</jsp-version>
-
<short-name>cc</short-name>
-
<uri>/mytaglib</uri>
-
<tag>
-
<name>showUserInfo</name>
-
<tag-class>com.mytags.UserInfoTag</tag-class>
-
<body-content>empty</body-content>
-
<attribute>
-
<name>user</name>
-
<required>false</required>
-
<rtexprvalue>true</rtexprvalue>
-
</attribute>
-
</tag>
-
</taglib>
3 配置web.xml
- <jsp-config>
-
<taglib>
-
<taglib-uri>/mytaglib</taglib-uri>
-
<taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
-
</taglib>
-
</jsp-config>
4 在需要使用此标签的jsp页面头部引入
- <%@ taglib uri="/mytaglib" prefix="cc"%>
5 使用(参照上面的使用步骤)
此致,一个简单的JSP标签开发完成
标签类说明:
我们创建的UserInfoTag类继承了TagSupport类,而它又实现了Tag接口,Tag接口的生命周期由其所在的容器控制,如下图:
setPageContext() 将所在jsp页面的pageContext注入进来,目的是为了在后面的方法中可以访问到jsp页面对象的pageContext属性
setParent() 设置此标签的父标签
setAttribute() 将标签中的属性注入到此class的属性,不需要自己实现但要提供属性的get与set方法
doStartTag() 在开始标签属性设置后调用,如果返回SKIP_BODY则忽略标签之中的内容,如果返回EVAL_BODY_INCLUDE则将标签体的内容进行输出
doEndTag() 在结束标签之前调用,返回SKIP_PAGE跳过整个jsp页面后面的输出,返回EVAL_PAGE执行页面余下部分
release() 生命周期结束时调用
特别说明:在tomcat4.1之后的版本中默认开启了标签缓冲池(websphere和weblogic并不会这么做),所以执行完标签后并不会执行release()方法(_jspDestroy()时才释放),也就是说同一个jsp页面自定义标签不管使用多少次只会存在一个实例,但也并不是每一个标签都会为其创建一个缓冲池,要根据参数来判断,例如:
- <cc:UserInfoTag user=”…” />
-
<cc:UserInfoTag />
上面例子中由于参数不同就会创建两个标签缓冲池。
这个问题可以通过设定tomcat的配置文件加以解决:
在%tomcat%\conf\web.xml加入enablePooling参数,并设置为false(不缓存自定义标签)。
- <init-param>
-
<param-name>enablePooling</param-name>
-
<param-value>false</param-value>
-
</init-param>
清空%tomcat%\conf\目录
相关推荐
**JSP自定义标签开发入门** 在Java Web开发中,JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,以实现动态内容的生成。然而,为了提高代码的可读性和可维护性,通常会推荐...
本实例将带你深入理解JSP自定义标签的创建和使用。 首先,我们要了解自定义标签的结构。自定义标签通常由三部分组成:标签库描述文件(TLD)、标签处理类(Tag Handler)和JSP页面。TLD是XML格式的文件,用于定义...
通过学习和实践这个JSP自定义标签入门实例,你可以掌握创建和使用自定义标签的基本流程,为进一步深入JSP开发打下坚实的基础。同时,了解自定义标签也是理解JavaServer Faces (JSF)和其他MVC框架中组件化开发的关键...
1. `tld.xml`:这是我们的TLD文件,定义了自定义标签的详细信息。 2. `GreetingTag.java`:这是一个Java类,实现了`javax.servlet.jsp.tagext.Tag`接口,处理自定义标签的逻辑。 3. `web.xml`:Web应用的部署描述符...
本教程将引导您了解如何入门JSP自定义标签的使用。 **JSP自定义标签介绍** JSP自定义标签是JSP页面中的一个关键特性,它允许开发者创建自己的标签库,以封装复杂的业务逻辑或视图呈现。这使得JSP页面更加清晰,易于...
在Java Web开发中,自定义标签(Custom Tags)是一种强大的工具,它允许开发者创建可重用的组件,提高代码的可读性和维护性。这里我们将深入探讨如何通过给定的"简单的自定义标签入门例子"来理解这个概念。 首先,...
1. JSP自定义标签:JSP自定义标签允许开发者创建自己的标签库,以提高代码的可读性和可复用性,类似于HTML中的自定义元素。 2. TLD(Tag Library Descriptor)文件:定义自定义标签的关键文件,它包含了关于标签的...
《JSP网络开发入门与实践》是一本专为初学者设计的教程,涵盖了从基础到实践的JSP(JavaServer Pages)技术。JSP是一种基于Java的动态网页开发技术,它允许开发者在HTML中嵌入Java代码,实现服务器端的动态内容生成...
【Java JSP web开发】 Java JSP(JavaServer Pages)是一种动态网页技术,用于创建交互式的Web应用程序。本教程系列全面涵盖了从基础到高级的Java JSP Web开发知识,包括多个关键章节。 1. **Web概述**:这部分介绍...
- **用Taglib实现循环**:通过自定义标签库实现循环遍历等功能。 - **关于JSTL**:介绍JavaServer Pages Standard Tag Library(JSTL)的核心标签库及其使用方法。 #### 第10章 综合电子留言板 - **电子留言板用户...
**JSP(Java Server Pages)技术是Web开发领域中一种重要的服务器端...继续深入学习JSP的高级特性,如自定义标签、EL和JSTL的高级用法、过滤器和监听器等,你将能够更好地驾驭Web开发。祝你在JSP的学习旅程中取得成功!
"JSP网络开发入门与实践"这个主题涵盖了许多核心概念和技术,旨在帮助初学者掌握JSP的精髓,并在实际项目中应用。 首先,JSP的基础知识包括: 1. **JSP页面结构**:一个JSP页面由HTML、CSS、JavaScript以及嵌入的...
JSP自定义标签** 自定义标签允许开发者创建自己的标签库,提高代码的可读性和可重用性。通过编写TLD(Tag Library Descriptor)文件定义标签的行为。 **8. JSP的生命周期** JSP页面经历编译、初始化、服务和销毁四...
**JSP(Java Server Pages)** 是一种...书中可能还会涵盖一些高级主题,如自定义标签库的开发、AJAX与JSP的结合、JSP与Spring MVC框架的集成等,旨在帮助读者从基础到进阶,全面掌握JSP技术,实现从新手到专家的转变。
3. taglib指令:引入自定义标签库。 三、JSP脚本元素 1. Scriptlet:在中编写Java代码,用于执行服务器端逻辑。 2. Expression Language(EL):使用${}表示,用于在页面上显示Java对象的值。 3. Declaration:声明...
如果你是初学者,可以参考`CND8 学院`发布的`JSP 教程`,它包含了关于JSP自定义标签的详细讲解和实践案例,适合用来入门学习。 总之,掌握JSP自定义标签对于提升JSP开发效率和代码质量至关重要。通过实践和理解...
**JSP(Java Server Pages)开发入门初级教程** JSP是Java平台上的动态网页技术,由Sun Microsystems在1999年推出,旨在简化Web应用的开发。它结合了HTML和Java代码,允许开发者在静态页面中嵌入动态Java代码,从而...
- **标签处理类的创建**:为了增强JSP页面的功能性和灵活性,可以自定义标签库。这通常涉及到创建标签处理类,如`MytagInfo.java`和`MytagParam.java`,它们分别用于处理嵌套标签的信息和参数。 #### 六、国际化与...