• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JSP > JSP自定义标签简单入门教程

JSP自定义标签简单入门教程

作者:Summer_warmer 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Summer_warmer通过本文主要向大家介绍了jsp自定义标签,jsp自定义标签详解,jsp自定义标签开发,jsp自定义标签uri,jsp中自定义标签等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在sun官方文档上有下面这样一段话。

官方文档声明

public interface SimpleTag
extends JspTag
Interface for defining Simple Tag Handlers.
Simple Tag Handlers differ from Classic Tag Handlers in that instead of supporting doStartTag() and doEndTag(), the SimpleTag interface provides a simple doTag() method, which is called once and only once for any given tag invocation. All tag logic, iteration, body evaluations, etc. are to be performed in this single method. Thus, simple tag handlers have the equivalent power of BodyTag, but with a much simpler lifecycle and interface.

To support body content, the setJspBody() method is provided. The container invokes the setJspBody() method with a JspFragment object encapsulating the body of the tag. The tag handler implementation can call invoke() on that fragment to evaluate the body as many times as it needs.

A SimpleTag handler must have a public no-args constructor. Most SimpleTag handlers should extend SimpleTagSupport.
</div>

生存周期及调用流程

The following is a non-normative, brief overview of the SimpleTag lifecycle. Refer to the JSP Specification for details.

A new tag handler instance is created each time by the container by calling the provided zero-args constructor. Unlike classic tag handlers, simple tag handlers are never cached and reused by the JSP container.
The setJspContext() and setParent() methods are called by the container. The setParent() method is only called if the element is nested within another tag invocation.
The setters for each attribute defined for this tag are called by the container.
If a body exists, the setJspBody() method is called by the container to set the body of this tag, as a JspFragment. If the action element is empty in the page, this method is not called at all.
The doTag() method is called by the container. All tag logic, iteration, body evaluations, etc. occur in this method.
The doTag() method returns and all variables are synchronized.

简单标签使用小案例

必知必会:简单标签也是一个标签,所以声明的过程也Tag的一样,同样是三步。

1、建继承SimpleTag类的实现类,重写doTag方法
2、tld文件中进行严格的声明
3、jsp页面中taglib的命名空间及标签前缀的声明,然后进行调用自定义的简单标签

第一步:创建实现类:

package web.simpletag;
import java.io.IOException;
import java.io.StringWriter;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;


/**
 * 控制标签体是否执行
 * @author Summer
 *
 */
public class BodyController extends SimpleTagSupport {
  static{
    /*
     * 简单标签整体的执行流程如下:
     * 1.浏览器向web服务器发送请求,然后web服务器调用servlet(jsp)
     * 2.complier解释器进行初始化工作,先是调用setJspContext方法,将pageContext对象传递进去
     * 3.然后是看看此标签的父标签,即setParent方法
     * 4.再就是调用doTag方法了吧?但是要知道doTag内部会使用JspFragment对象,所以就必须先得到它,因此应该是调用setJspBody(JspFragment jspBody)方法
     * 5.最后是调用doTag 方法,执行相关的代码逻辑
     */
  }

  /**
   * 简单标签可以使用这一个方法实现所有的业务逻辑
   */
  @Override
  public void doTag() throws JspException, IOException {
    //代表标签体的对象
    JspFragment fragment = this.getJspBody();
    //fragment.invoke(null);是指将标签中的内容写给谁,null代表浏览器


    //1.修改标签体的内容
//   fragment.invoke(null);


    //2.控制标签体内容的重复输出
//   for(int i=1;i<=5;i++){
//     fragment.invoke(null);//设置为null,默认为向浏览器输出
//   }


    //3.修改标签体的内容
    PageContext context = (PageContext) fragment.getJspContext();
    StringWriter writer = new StringWriter();
    fragment.invoke(writer);
    String content = writer.getBuffer().toString();

    this.getJspContext().getOut().write(content.toUpperCase());

    //4.控制jsp页面的执行与否,只需要掌握一个原理即可
    /*
     * SkipPageException - If the page that (either directly or indirectly) invoked this 
     * tag is to cease evaluation. A Simple Tag Handler generated from a tag
     * file must throw this exception if an invoked Classic Tag Handler
     *  returned SKIP_PAGE or if an invoked Simple Tag Handler threw
     *  SkipPageException or if an invoked Jsp Fragment threw a 
     *  SkipPageException.
     */
//   throw new SkipPageException();
  }


}
</div>

在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">

  <description>JSTL 1.1 XML library</description>
  <display-name>JSTL XML</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>x</short-name>
  <uri>/simplesummer</uri>


  <!-- 控制标签体内容的的简单标签的自定义标签 -->
  <tag>
    <name>BodyController</name>
    <tag-class>web.simpletag.BodyController</tag-class>
    <body-content>scriptless</body-content>
  </tag>
</taglib>

</div>

第三步:在jsp页面中进行声明然后调用:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@taglib uri="/simplesummer" prefix="summer"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用SimpleTag接口实现的控制标签体内容是否执行的测试页面</title>
</head>
<body>
  <summer:BodyController>Summer</summer:BodyController>


</body>
</html>

</div>

总结:
简单标签可以替代BodyTag接口完成同样的操作,但是有更加的简单和轻便
简单标签lifeCycle逻辑清晰,调用规则明确
使用相关流对象就可以完成对标签体的操控maniplate

以上就是本文的全部内容,希望对大家的学习有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • jsp中点击图片弹出文件上传界面及实现预览实例详解
  • JSP自定义标签案例分析
  • JSP自定义标签基础知识学习
  • JSP自定义标签简单入门教程
  • JSP自定义标签入门学习
  • jsp通过自定义标签库实现数据列表显示的方法
  • jsp自定义标签用法实例详解
  • JSP自定义标签rtexprvalue属性用法实例分析
  • JSP中图片的上传与显示方法实例详解
  • JSP使用自定义标签防止表单重复提交的方法

相关文章

  • 2017-05-11JSP避免Form重复提交的三种方案
  • 2017-05-11JSP简明教程
  • 2017-05-11JSP随机验证图片如何制作
  • 2017-05-11jsp form表单方法示例
  • 2017-05-11JDBCTM 指南:入门
  • 2017-05-11jsp用过滤器解决中文乱码问题的方法
  • 2017-05-11JSP 点击链接后下载文件(相当于右键另存)功能
  • 2017-05-11JDBCTM 指南:入门4 - Statement
  • 2017-05-11JSP开发入门(三)--JSP与JavaBean
  • 2017-05-11JSP页面中超链接传递中文参数出现乱码问题解决方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 无边框窗口代码详解
    • JDO 2.0查询语言的特点
    • 初探Java类加载机制
    • Java中使用JCOM操作Office对象
    • Jsp中解决session过期跳转到登陆页面并跳出iframe框架的方法
    • 随机生成文件名的函数
    • 通过viewport实现jsp页面支持手机缩放
    • java Lucene 中自定义排序的实现
    • dbcp 连接池不合理的锁导致连接耗尽解决方案
    • Spring.xml 标签配置补充

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有