`
forlab
  • 浏览: 133503 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsp自定义标签的执行流程

 
阅读更多

1、客户端访问jsp页面,遇到自定义的标签;

2、初始化自定义标签对应的标签处理器,并通过setPageContext()方法,设置pageContext给标签对象;

3、看标签是否有父标签,如果有,则实例化父标签对应的处理器对象。并通过setParent()方法设置给标签对象;

4、调用doStartTag()方法

5、执行标签体

6、调用doEndTag()方法

7、释放资源

8、执行标签体后面的jsp相关的代码

 

以下是tomcat下面运行jsp后的java代码

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

  private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

  private static java.util.List _jspx_dependants;

  static {
    _jspx_dependants = new java.util.ArrayList(1);
    _jspx_dependants.add("/WEB-INF/simpletag/simple.tld");
  }

  private javax.el.ExpressionFactory _el_expressionfactory;
  private org.apache.AnnotationProcessor _jsp_annotationprocessor;

  public Object getDependants() {
    return _jspx_dependants;
  }

  public void _jspInit() {
    _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
    _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
  }

  public void _jspDestroy() {
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html;charset=ISO-8859-1");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\r\n");
      out.write("\r\n");

String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

      out.write("\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("  <head>\r\n");
      out.write("    <title>My JSP 'index.jsp' starting page</title>\r\n");
      out.write("  </head>\r\n");
      out.write("  \r\n");
      out.write("  <body>\r\n");
      out.write("  ");
 
  	String ip = request.getRemoteAddr();
  	out.print(ip);
   
      out.write('\r');
      out.write('\n');
      out.write(' ');
      if (_jspx_meth_simple_005fsimple5_005f0(_jspx_page_context))
        return;
      out.write("\r\n");
      out.write("  </body>\r\n");
      out.write("</html>\r\n");
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try { out.clearBuffer(); } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }

  private boolean _jspx_meth_simple_005fsimple5_005f0(PageContext _jspx_page_context)
          throws Throwable {
    PageContext pageContext = _jspx_page_context;
    JspWriter out = _jspx_page_context.getOut();
    //  simple:simple5
    www.itcast.cn.Simple5 _jspx_th_simple_005fsimple5_005f0 = new www.itcast.cn.Simple5();
    org.apache.jasper.runtime.AnnotationHelper.postConstruct(_jsp_annotationprocessor, _jspx_th_simple_005fsimple5_005f0);
    _jspx_th_simple_005fsimple5_005f0.setJspContext(_jspx_page_context);
    // /index.jsp(18,1) name = name type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
    _jspx_th_simple_005fsimple5_005f0.setName(9);
    _jspx_th_simple_005fsimple5_005f0.setJspBody(new index_jspHelper( 0, _jspx_page_context, _jspx_th_simple_005fsimple5_005f0, null));
    _jspx_th_simple_005fsimple5_005f0.doTag();
    org.apache.jasper.runtime.AnnotationHelper.preDestroy(_jsp_annotationprocessor, _jspx_th_simple_005fsimple5_005f0);
    return false;
  }

  private class index_jspHelper
      extends org.apache.jasper.runtime.JspFragmentHelper
  {
    private javax.servlet.jsp.tagext.JspTag _jspx_parent;
    private int[] _jspx_push_body_count;

    public index_jspHelper( int discriminator, JspContext jspContext, javax.servlet.jsp.tagext.JspTag _jspx_parent, int[] _jspx_push_body_count ) {
      super( discriminator, jspContext, _jspx_parent );
      this._jspx_parent = _jspx_parent;
      this._jspx_push_body_count = _jspx_push_body_count;
    }
    public boolean invoke0( JspWriter out ) 
      throws Throwable
    {
      out.write("fdfd");
      return false;
    }
    public void invoke( java.io.Writer writer )
      throws JspException
    {
      JspWriter out = null;
      if( writer != null ) {
        out = this.jspContext.pushBody(writer);
      } else {
        out = this.jspContext.getOut();
      }
      try {
        this.jspContext.getELContext().putContext(JspContext.class,this.jspContext);
        switch( this.discriminator ) {
          case 0:
            invoke0( out );
            break;
        }
      }
      catch( Throwable e ) {
        if (e instanceof SkipPageException)
            throw (SkipPageException) e;
        throw new JspException( e );
      }
      finally {
        if( writer != null ) {
          this.jspContext.popBody();
        }
      }
    }
  }
}

 

分享到:
评论

相关推荐

    jsp 自定义标签实例

    在JavaServer Pages (JSP) 技术中,自定义标签是扩展JSP功能的关键手段,它允许开发者创建可重用的组件,提高...在给定的实例中,我们可以看到一个简单的自定义标签的实现和使用过程,涵盖了JSP自定义标签的基本流程。

    jsp自定义嵌套标签

    以`haveChildTag`为例,该类继承自`BodyTagSupport`,通过覆盖`doStartTag()`和`doEndTag()`方法,可以控制标签的执行流程。其中,`doStartTag()`方法用于决定是否评估标签体,而`doEndTag()`则负责标签结束时的操作...

    JSP自定义标签JSP自定义标签

    综上所述,JSP自定义标签提供了一种强大的机制,使得JSP开发者能够创建定制的、可重用的代码片段,提升Web应用的开发效率和质量。通过理解和熟练运用自定义标签,开发者可以更好地组织和管理JSP项目,实现更高效的...

    jsp的自定义标签

    **JSP自定义标签详解** 在Java服务器页面(JSP)技术中,自定义标签是扩展JSP功能的重要手段,它允许开发者创建可重用的组件,这些组件的行为类似于HTML标签,但具备更强大的功能和灵活性。这篇博客将深入探讨JSP...

    JSP自定义标签详解

    通过以上讲解,我们可以了解到JSP自定义标签的基本原理和使用方式,以及如何创建和管理自定义标签库。这有助于开发者将复杂的功能模块化,提高代码的复用性和可维护性,同时降低了JSP页面的复杂度。在实际开发中,...

    JSP自定义标签 eclipse项目

    **JSP自定义标签**是JavaServer Pages (JSP)技术的一个强大特性,它允许开发者创建可重用的、自定义的行为组件,以提高代码的复用性和可维护性。在传统的JSP开发中,我们通常使用内置标签,如`&lt;jsp:include&gt;`或`...

    jsp自定义标签实例

    JSP自定义标签是JavaServer Pages (JSP) 技术的一个强大特性,它允许开发者创建...以上就是关于JSP自定义标签的基本概念、实现流程和相关知识点的详细解释。通过掌握这些知识,开发者可以更高效地构建动态Web应用程序。

    JSP自定义标签.ppt

    JSP自定义标签是JavaServer Pages(JSP)技术中的一种高级特性,它允许开发者创建可重用的、自定义的HTML元素,这些元素能够执行特定的Java代码逻辑,而无需在页面中直接嵌入Java代码。这极大地提高了JSP页面的...

    JSP自定义标签开发使用

    【JSP自定义标签开发使用】知识详解 JSP(JavaServer Pages)是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码。在JSP中,自定义标签的使用可以增强代码的可读性和可维护性,使得复杂的业务逻辑更易于封装...

    JSP自定义标签-源码.rar

    本资料“JSP自定义标签-源码.rar”可能包含了实现自定义标签的完整源代码,这将有助于我们深入理解JSP自定义标签的工作原理和开发流程。 **自定义标签的组成部分** 1. **标签库(Tag Library)**:一组相关的...

    jsp 自定义标签有实例的DLC

    本DLC(Digital Learning Content,数字学习资源)将深入探讨如何创建和使用JSP自定义标签,并通过实例来帮助理解这一过程。 一、JSP自定义标签基础 1.1 JSP标准标签库(JSTL) 在自定义标签之前,我们需要了解...

    jsp自定义标签中的困扰

    JSP自定义标签是通过Java语言实现的,它们扩展了JSP标准标签库(JSTL)的功能。`BodyTagSupport`是JSP API提供的一种用于处理包含内容(body)的标签的支持类,它是`TagSupport`的子类。 1. **doStartTag()**:这是...

    自定义JSP标签样例

    自定义标签允许开发者创建自己的标签库,这些标签可以像HTML标签一样在JSP页面中使用,但它们可以执行更复杂的业务逻辑或呈现动态内容。下面我们将深入探讨自定义JSP标签的原理、创建过程及其应用。 一、JSP标签...

    掌握自定义jsp标签s

    一、JSP自定义标签概述 1. JSP自定义标签的作用:自定义标签提供了一种封装业务逻辑和视图的方式,使得代码结构更加清晰,降低了HTML和Java代码的混合度,提高了代码的可读性和可维护性。 2. 标签库(Tag Library...

    struts实现自定义标签

    以上就是使用 Struts 实现自定义标签的基本流程。通过自定义标签,我们可以创建符合项目需求的特定功能,降低 JSP 页面的复杂度,提升开发效率。在实际开发中,根据具体业务需求,可以扩展更多的自定义标签来满足...

    自定义标签的内容及使用

    JSP自定义标签的种类随着JSP版本的更新也在不断丰富,JSP 1.2中的传统标签与JSP 2.0中新增的简单标签和标签文件,为开发者提供了更多的选择。通过熟练掌握自定义标签的开发和使用,可以显著提高JSP应用的开发效率和...

    掌握自定义jsp标签

    在Java服务器页面(JSP)开发中,自定义标签(Custom Tags)是提高代码复用性和可维护性的重要工具。自定义标签允许开发者创建自己的HTML标签,这些标签封装了特定的功能,可以像标准HTML标签一样在JSP页面中使用。...

    开发自定义JSP标签

    在JavaServer Pages (JSP) 技术中,自定义标签是扩展JSP功能的一种重要方式,它允许开发者创建可重用的、封装了特定功能的组件。自定义标签可以像HTML标签一样在JSP页面中使用,提供了一种抽象和封装业务逻辑的方式...

Global site tag (gtag.js) - Google Analytics