Java自定义标签

一、自定义标签简介

自定义标签主要用于移除Jsp页面中的<%java%>代码。

实现SimpleTag接口/SimpleTagSupport类,重写doTag()方法。

二、SimpleTag方法介绍

setJspContext方法 用于把JSP页面的pageContext对象传递给标签处理器对象 
setParent方法 用于把父标签处理器对象传递给当前标签处理器对象 
getParent方法 用于获得当前标签的父标签处理器对象 
setJspBody方法 用于把代表标签体的JspFragment对象(即标签体内容)传递给标签处理器对象 
doTag方法 用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容。

三、SimpleTag接口方法的执行顺序

WEB容器调用标签处理器对象的setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象。
WEB容器调用标签处理器对象的setParent方法,将父标签处理器对象传递给这个标签处理器对象。注意,只有在标签存在父标签的情况下,WEB容器才会调用这个方法。
如果调用标签时设置了属性,容器将调用每个属性对应的setter方法把属性值传递给标签处理器对象。如果标签的属性值是EL表达式或脚本表达式,则WEB容器首先计算表达式的值,然后把值传递给标签处理器对象。
如果简单标签有标签体,容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来。

四、JspFragment类

javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素,即<%%>。
WEB容器在处理简单标签的标签体时,会把标签体内容用一个JspFragment对象表示,并调用标签处理器对象的setJspBody方法把JspFragment对象传递给标签处理器对象。JspFragment类中只定义了两个方法,如下所示:
getJspContext方法 用于返回代表调用页面的JspContext对象.
public abstract void invoke(java.io.Writer out)  用于执行JspFragment对象所代表的JSP代码片段参数
out用于指定将JspFragment对象的执行结果写入到哪个输出流对象中,如果传递给参数out的值为null,则将执行结果写入到JspContext.getOut()方法返回的输出流对象中。(简而言之,可以理解为写给浏览器)

五、在TLD中描述标签属性

、自定义标签的开发步骤

1.写一个标签处理类

//标签处理类
public class IpTag implements SimpleTag {  //or extend SimpleTagSupport
	private PageContext pageContext;
	//Web容器调用NO1
	public void setJspContext(JspContext pc) {
		System.out.println("setJspContext()");
		pageContext = (PageContext) pc;
	}
	//Web容器调用NO2
	public void doTag() throws JspException, IOException {
		System.out.println("doTag()");
		//取得HttpServletRequest请求对象
		HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
		//取得客户端的IP地址
		String ip = request.getRemoteAddr();
		//取得out(JspWriter)对象
		JspWriter out = pageContext.getOut();
		//向浏览器输出
		out.write("<font size='44' color='red'>"+ip+"</font>");
	}
        ...
}
2.在/WEB-INF/目录下,写一个*.tld文件,目的是让Web容器知道自定义标签和标签处理类的对应关系
<?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">
  <tlib-version>1.0</tlib-version>
  <short-name>simple</short-name> //前缀
  <uri>http://java.sun.com/jsp/jstl/simple</uri>
  <tag>
    <name>ip</name>//标签名
    <tag-class>cn.itcast.web.jsp.tag.IpTag</tag-class>
    <body-content>empty/scriptless</body-content>
  </tag>
  <attribute>
    <name>XXX</name>
    <required>true/false</required>
    <rtexprvalue>true/false</rtexprvalue>
  </attribute>
</taglib>
3.在JSP页面中,通过<%@taglib%>指令引用标签库
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/simple" prefix="simple" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <body>
  	客户端IP为:<simple:ip/>
  </body>
</html>
4. 部署web应用,访问simple.jsp即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java自定义标签是指在JSP页面中自定义标签,以便在JSP页面中使用自己开发的标签,便于模块化和重用。下面我们通过一个实例来了解Java自定义标签的用法。 假设我们需要在JSP页面中显示一个表格,表格的数据是从后台数据库中读取的。为了避免在JSP页面中写大量的Java代码,我们可以使用Java自定义标签来实现。 首先,我们需要在项目中创建一个Java类,用于实现自定义标签的功能。该类需要继承TagSupport类,并且需要实现doStartTag()方法和doEndTag()方法。doStartTag()方法用于处理开始标签,doEndTag()方法用于处理结束标签。 下面是一个简单的实例,该实例实现了一个自定义标签,用于在JSP页面中显示一个表格: ``` public class TableTag extends TagSupport { private List<Object[]> data; // 表格数据 public void setData(List<Object[]> data) { this.data = data; } public int doStartTag() throws JspException { try { JspWriter out = pageContext.getOut(); out.print("<table>"); out.print("<tr><th>姓名</th><th>年龄</th></tr>"); for(Object[] row : data) { out.print("<tr>"); out.print("<td>" + row[0] + "</td>"); out.print("<td>" + row[1] + "</td>"); out.print("</tr>"); } out.print("</table>"); } catch (IOException e) { throw new JspException(e.getMessage()); } return SKIP_BODY; } public int doEndTag() throws JspException { return EVAL_PAGE; } } ``` 在上面的代码中,我们定义了一个TableTag类,该类继承自TagSupport类。我们还定义了一个data属性,用于存储表格数据。在doStartTag()方法中,我们使用JspWriter输出表格的HTML代码,并且将数据填充到表格中。在doEndTag()方法中,我们返回EVAL_PAGE,表示继续执行JSP页面的剩余部分。 接下来,我们需要在JSP页面中使用该自定义标签。为了使用该标签,我们需要在JSP页面中引入该自定义标签: ``` <%@ taglib prefix="mytag" uri="/WEB-INF/taglib.tld" %> ``` 在上面的代码中,我们定义了一个mytag前缀,并且指定了自定义标签的URI。URI是一个唯一的标识符,用于识别自定义标签库。 下面是一个使用自定义标签的JSP页面: ``` <mytag:table data="${data}" /> ``` 在上面的代码中,我们使用mytag前缀引入自定义标签,并且使用data属性传递数据。在后台Java代码中,我们需要将数据存储到request或session中,以便在JSP页面中使用。 以上就是Java自定义标签的实例分析,通过该实例,我们可以了解到Java自定义标签的用法以及如何在JSP页面中使用自定义标签

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值