一般情况下开发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\目录
相关推荐
NULL 博文链接:https://li7jia7.iteye.com/blog/1820638
本文为大家分享了JSP自定义标签入门学习教程,希望大家喜欢。 1.JSP自定义标签: 自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
自定义标签类都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,或者TagSupport除此之外,JSP自定义标签类还有如下要求。 如果标签类包含属性,每个属性都有对应的getter和setter方法。 重写doTag()...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用JDOM解析XML、在JSP中应用SAX解析XML、EL表达式、JSTL标签库、自定义标签、Hibernate...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用JDOM解析XML、在JSP中应用SAX解析XML、EL表达式、JSTL标签库、自定义标签、Hibernate...
mail组件、程序日志组件、JavaScript脚本语言、CSS样式、XML入门技术、在JSP中应用Ajax技术、在JSP中应用DOM解析XML、在JSP中应用JDOM解析XML、在JSP中应用SAX解析XML、EL表达式、JSTL标签库、自定义标签、Hibernate...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...
完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...