servlet的自定义标签的开发步骤

1.为什么需要使用自定义标签

(1)与JSP页面整体统一

(2)还具有一定的业务逻辑功能,例如:循环,判段。。。

  (3)替代原JSP页面中<%%> 

2.自定义标签开发步骤(3步):

(1)自定义一个标签处理类,实现SimpleTag接口

package cn.wenhao.www.web.serlvet.el;

import java.io.IOException;

import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;

/**
 *类的作用:定义的标签处理类
 *
 *
 *@author 一叶扁舟
 *@version 1.0
 *@创建时间: 2014-9-9 上午10:25:32
 */
public class IpTag implements SimpleTag {

	private PageContext context;

	// web容器第二步会调用的顺序
	@Override
	public void doTag() throws JspException, IOException {
		System.out.println("执行doTag的顺序……");
		ServletRequest request = context.getRequest();
		String addr = request.getRemoteAddr();
		String host = request.getRemoteHost();
		int port = request.getRemotePort();

		JspWriter out = context.getOut();
		out.write("<font size='36' color='blue'>" + addr + ":" + host + ":"
				+ port + "</font>");

	}

	@Override
	public JspTag getParent() {
		System.out.println("执行doTag的顺序……");
		return null;
	}

	@Override
	public void setJspBody(JspFragment arg0) {
		System.out.println("执行setJspContext的顺序……");
	}

	// web容器首先会调用的,第一步
	@Override
	public void setJspContext(JspContext pc) {
		System.out.println("执行setJspContext的顺序……");
		context = (PageContext) pc;
	}

	@Override
	public void setParent(JspTag arg0) {
		System.out.println("执行setParent的顺序……");
	}

}

(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.wenhao.www.web.serlvet.el.IpTag</tag-class>
    <body-content>empty</body-content>
  </tag>

</taglib>

(3). 在JSP页面中,通过<%@taglib%>指令引用标签库

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/simple" prefix="simple" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

  </head>

  <body>
  自定义标签,客户端的IP地址:<simple:ip></simple:ip>

  </body>
</html>

运行的结果图:

3.SimpleTag方法介绍

(1).setJspContext方法

用于把JSP页面的pageContext对象传递给标签处理器对象

(2).setParent方法

用于把父标签处理器对象传递给当前标签处理器对象

(3).getParent方法

用于获得当前标签的父标签处理器对象

(4).setJspBody方法

用于把代表标签体的JspFragment对象(即标签体内容)传递给标签处理器对象

(5)doTag方法

用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容。

4.SimpleTag接口方法的执行顺序

(1).当web容器开始执行标签时,会调用如下方法完成标签的初始化

WEB容器调用标签处理器对象的setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象。

WEB容器调用标签处理器对象的setParent方法,将父标签处理器对象传递给这个标签处理器对象。

注意,只有在标签存在父标签的情况下,WEB容器才会调用这个方法。

如果调用标签时设置了属性,容器将调用每个属性对应的setter方法把属性值传递给标签处理器对象。如果标签的属性值是EL表达式或脚本表达式,则WEB

容器首先计算表达式的值,然后把值传递给标签处理器对象。

如果简单标签有标签体,容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来。

(2).执行标签时:

容器调用标签处理器的doTag()方法,开发人员在方法体内通过操作JspFragment对象,就可以实现是否执行、迭代、修改标签体的目的。

时间: 2024-11-05 23:32:08

servlet的自定义标签的开发步骤的相关文章

JavaWeb-12 (自定义标签库开发&amp;JSTL标签库)

JavaWeb-12:自定义标签库开发&JSTL标签库 自定义标签库开发 一.自定义标签简介 自定义标签主要用于移除Jsp页面中的java代码. 使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: 1.编写一个实现Tag接口的Java类(标签处理器类). 2.编写标签库描述符(tld)文件,在tld文件中把标 实验:项目架构如下: a.tld <?xml version="1.0" encoding="utf-8" ?> &l

自定义标签库开发与el表达式

1.自定义标签库的开发自定义标签库主要用于移除jsp页面中的java 代码. 步骤一:编写一个实现Tag接口的类(建议继承TagSupport),把java代码一直到这个类中. package cn.soldier.tag; import java.io.IOException; import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.TagSupport; public class viewIP extends

自定义标签库开发(简单标签开发)

实现Tag接口,BodyTag接口,IterationTag接口的标签开发技术一般称为传统标签开发技术. 实现SimpleTag接口的标签开发技术,一般称为简单标签开发技术. JSP2.0里新增了SimpleTag. 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口来实现标签的功能.实现SimpleTag接口的标签通常称为简单标签.简单标签共定义了5

jstl标签基础开发步骤

step1. 导包(导入要使用的标签的jar文件). step2. 使用taglib指令引入要使用的标签. taglib指令: uri:标签的命名空间. prefix:命名空间的别名. 注: 命名空间:是为了区分同名的元素而添加的前缀. 自定义标签: step1. 写一个java类,继承SimpleTagSupport类. step2. 在doTag方法里面,编写处理逻辑. step3. 描述标签.(.tld文件里面) 注: <body-content>的值可以是 empty 没有标签体. s

Java_JSP自定义标签的开发与应用

在JSTL提供了四个标签库(核心标签库.国际化标签库.数据库标签库和XML标签库),涉及到了几十个标签.虽然这些标签可以完成比较复杂的工作,但它们仍然无法满足程序中的特殊需求.因此,就需要用户根据自己的需要来定制JSP标签,这种由用户自己实现的JSP标签被称为自定义标签. .1 自定义标签基础 自定义标签和JSTL中的标签从技术上看没有任何区别,可以将这些标签统称为JSP标签.JSP标签在JSP页面中通过XML语法格式被调用,当JSP引擎将JSP页面翻译成Servlet时,就将这些调用转换成执行

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例 EL表达式 1.获取域对象中的值 2.EL表达式支持运算 ${ num1 + num2 } EL获取常用的WEB对象 1.pageScope 获取page域对象的值 2.requestScope 获取request域对象的值 3.sessionScope 获取session域对象的值 4.applicationScope 获取application域对象的值 * 例子:向某个域中来存入值 req

Java Web总结十六之一自定义标签

一.自定义标签简介 1.为什么要使用自定义标签? 自定义标签主要用于移除Jsp页面中的<%java%>代码. 2.开发自定义标签的步骤: 1)开发自定义标签处理类,该类需要实现SimpleTag接口/SimpleTagSupport类,重写doTag()方法. 2)编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述,并放置在WEB-INF/目录下. 3)完成以上操作,即可在JSP页面中导入和使用自定义标签. 二.自定义标签描述 1.实现SimpleTag接口的标签通常称为简单标

JavaWeb之 JSP:自定义标签

当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签. 自定义标签 下面我们先来开发一个自定义标签,然后再说它的原理吧! 自定义标签的开发步骤 步骤一 编写一个普通的java类,继承TagSupport类~ package com.vmaxtam.dotest; import javax.servlet.jsp.tagext.TagSupport; public class MyTagTest extends TagSupport { } 步骤二 重写父类的se

Servlet和JSP之自定义标签学习

  此文章会讲述简单标签处理器,因为经典自定义标签处理器没有简单标签处理器方便使用,故在此不进行描述. 参考:慕课网的<JSP自定义标签>视频; <Servlet.JSP和Spring MVC初学指南>的第六章; IBM的<利用 JSP 2 提供的 SimpleTagSupport 开发自定义标签>; 菜鸟教程的JSP自定义标签文章. 自定义标签   自定义标签 自定义标签就是将方法封装到自定义标签处理类中,然后使用方法与JSTL标签来达到,解决JSP中JavaBean