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();
        }
      }
    }
  }
}

 

高速光耦在隔离串口通信中的选型与优化策略 本文深入探讨了高速光耦在隔离串口通信中的关键作用与选型优化策略。针对串口通信中因普通光耦响应慢导致的误码问题,文章详细分析了响应时间、电流传输比、供电电压与隔离耐压等核心选型指标,并对比了6N137、HCPL-0601等主流型号。同时,提供了电路设计、PCB布局的优化技巧及实用的调试指南,旨在帮助工程师实现高速、稳定的隔离串口通信。 阅读详情

相关推荐

银河麒麟桌面版V10搭建Qt4.8.6开发环境

银河麒麟桌面版V10搭建Qt4.8.6开发环境

qq_34932364的博客 2399

jsp中自定义标签的执行过程

提: tomcat服务器启动时,加载到每个web应用,加载每个web应用的WEB-INF目录下的所有文件!!!例如web.xml, tld文件!!!第一步:创建自定义标签1. 创建标签处理器类[java] view plain copypublic class MyFirstTag implements SimpleTag {      JspContext jspContext;        ...

lzf的博客 696

Cesium 模拟飞机坠毁功能

Cesium 模拟飞机坠毁功能,粒子模拟

QQhelphelp的博客 1068

记使用JSTL时的一次愚蠢错误

今天使用jstl的foreach,平时没问题,今天出现如下错误: javax.el.PropertyNotFoundException: Property 'id' not found on type java.lang.String javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193) javax.el.

Java Dynamic的专栏 3919

Ubuntu安装有线网卡驱动

问题:插入网线后,无法识别有线连接。 原因:主板有线网卡的型号和系统中网卡的驱动不匹配 解决 前提条件: 需要连wifi通网,因为需要安装dkms,和下载驱动。 删除原驱动 1、查看网卡型号 lspci | grep net 我的网卡型号是8125 2、查看网卡驱动 lspci -k 网卡驱动是r8169 3、卸载网卡驱动 找出位置 modinfo r8169 | grep filename 然后删除 rm path/r8169.ko 卸载驱动 rmmod r8169 查看是否卸载成功 lsm

weixin_43932656的博客 1万+

【Unity3D优化】优化内置shader的内存占用

在打AB包的过程中,并不会把这些Built-in的shader单独打包,并与材质球和预设体做好依赖,因此打AB包时,Unity会自行在材质球和预制体的AB包内每一个都包含进去用到的Built-in的Shader,而且运行时,由于加载的是不同的AB包,shader也是不同的实例,占用的也是多份内存。结合项目特点可以分析,由于项目里使用了大量的粒子特效,一些特殊的效果,会给特效师写定制的shader,但是这些常见的效果,特效师直接使用了Unity Built-in的shader。继续优化内存占用。

a310989583的专栏 2312

JavaWeb学习篇之----自定义标签&&JSTL标签库详解

今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面就来看一下自定义标签的简介: 自定义标签主要用于移除Jsp页面中的java代码。 移除jsp页面中的java代码,只需要完成两个步骤: 编写一个实现Tag接口的Java类,并覆盖doSt...

weixin_30586085的博客 351

基于 YOLOv26 的食品包装缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习的食品包装缺陷智能检测系统。该系统能够自动识别多种常见包装缺陷,包括密封不良、破损、污染、标签错误等8类问题。相比传统人工检测方法,该系统具有高精度、多类别分类、实时推理等优势。文章详细介绍了系统架构,包含数据采集、预处理、YOLOv26检测模型和后处理四个核心模块,并提供了完整的环境配置和数据处理代码实现。该系统为食品包装行业提供了一种高效、准确的智能视觉质检解决方案。

一键难忘的博客 683

JSP:自定义标签的实现步骤及小例

1. 步骤   * 标签处理类(标签也是一个对象,那么就需要先有类!)   * tld文件,它是一个xml   * 页面中使用来指定tld文件的位置 2. 标签处理类JspTag---{Tag、SimpleTag}   SimpleTag接口:   * void doTag():每次执行标签时都会调用这个方法;   * JspTag getParent():返回父标签(非生命周期

熊诗言的博客 931

RT-DETR训练自己的数据集(从代码下载到实例测试)

在Windows10上配置CUDA环境教程是百度提出的一种实时目标检测模型。RT-DETR采用了与DETR相同的编码器和解码器结构,但对其进行了大量的优化,在保持较高检测精度的同时,实现了实时目标检测,为目标检测领域提供了一种新的有效解决方案,具有广泛的应用前景,如自动驾驶、智能监控、机器人等领域。以上是RT-DETR官方的论文和代码,详细介绍了RT-DETR的构成和实现。在YOLOv10中也实现了RT-DETR的代码,所以本文使用YOLOv10的项目文件进行RT-DETR的训练和测试。YOLOv10。

Limiiiing的博客 4万+

深耕车载智能:奇瑞安卓车机开发工程师岗位深度解析与面试指南

奇瑞控股集团招聘安卓车机开发工程师(J22602),负责车载应用开发、性能优化及整车适配。要求大专以上学历,3年以上车机开发经验,精通Android框架及车机特定技术(如Vehicle HAL)。岗位需具备性能调优能力、整车系统适配经验,熟悉车规级开发环境。面试重点考察技术深度、项目经验及问题解决能力,涉及基础技术、性能优化及整车适配等维度。随着智能座舱发展,该职位需持续学习新技术(如AAOS),关注行业趋势(多屏联动、舱驾融合)。职业发展建议深化Android技术,拓展车规硬件知识,提升软技能。

郑伟强dev的专栏 478

jsp自定义标签 线程安全

我们在编写自定义标签的时候设置属性如下 public class InputTag extends TagSupport { private static final long serialVersionUID = 1L; private String onclick; private String style; private String styleClas...

java的天空 241

无线传感网络的Matlab实现

Matlab是一种功能强大的数值计算和数据分析工具,也可以用于无线传感网络的建模和仿真。根据实际需求,可以进一步扩展和优化模型,例如考虑节点能量消耗、网络路由、数据融合等方面的问题。函数用于绘制节点之间的连接关系,其中第一个参数是邻接矩阵,描述了节点之间的连接关系。这里使用了一个4个节点的简单例子,可以根据实际需求修改节点数量和连接关系。可以使用Matlab中的图形绘制函数来可视化节点的位置和连接关系。在无线传感网络中,节点的能量是一个关键因素。通过计算节点的剩余能量,可以评估节点的能量消耗情况。

2301_79331387的博客 248

JSP自定义标签详解1

JSP自定义标签 自定义JSP标签概述 自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时,就可以在页面中插入这个标签,从而完成相应的功能。 使用自定义标签,可以分离程序逻辑和表示逻辑,将Java代码从HTML中剥离,便于美工维护页面;自定义标签也提供了可重用的功能组件,能

fengdongkun的专栏 1559

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaWeb学习心得之JSP自定义标签

一、自定义标签的开发步骤 1.编写Java类实现Tag接口(标签处理器类) import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import jav

寒风中的信 326

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JSP标签体系及自定义JSP标签

一 . JSP标签体系   二 . 标签的执行流程:     三.自定义标签; 3.1 自定义标签的主要作用:移除jsp中的java脚本。它属于jsp的技术 3.2、编写一个自定义标签的步骤:(传统标签的定义) 3.3写一个类,直接或间接实现javax.servlet.jsp.tagext.Tag。一般通过继承TagSupport来间接实现Tag接口     3.4、覆

Whatever is worth doing is worth doing well. 1379

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

自定义标签库开发

自定义标签库开发 自定义标签简介 l  自定义标签主要用于移除Jsp页面中的java代码。 l  快速入门:使用自定义标签输出客户机IP l   移除jsp页面中的java代码,只需要完成两个步骤: •    编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代码写到doStartTag方法中。 •    编写标签库描述符(tld)文件,在tl

张晓丛的专栏 1538

JSP自定义标签

自定义JSP标签的执行过程 •当一个含有自定义标签的JSP页面被JSP引擎(Web容器)转译成Servlet时,JSP引擎遇到自定义的标签,会把这个自定义标签转化成对一个称为“标签处理类”的调用。之后,当这个JSP页面被执行时,JSP引擎就会调用这个“标签处理类”对象,并执行其内部定义的相应操作方法,从而完成相应的功能。 自定义JSP标签的开发流程 •

646

基于JSP 自定义标签使用实例介绍

关注微信号:javalearns   随时随地学Java 或扫一扫 随时随地学Java 添加JSP自定义标签: 先添加一个tld文件到WEB-INF文件夹中 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2.0">

263

JAVA自定义标签教程及实例代码

自定义标签主要用于移除Jsp页面中的java代码 快速入门:使用自定义标签输出客户机的IP 移除jsp页面中的java代码,只需要完成两个步骤: 编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代码写到doStartTag方法中。 编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述。 完成以上操作,即可在JS

秋芝林的专栏 617

jsp课程(8)---自定义jsp标签

自定义JSP标签概述 1.自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时,就可以在页面中插入这个标签,从而完成相应的功能。 2.使用自定义标签,可以分离程序逻辑和表示逻辑,将Java代码从HTML中剥离,便于美工维护页面;自定义标签也提供了可重用的功能组件,能够提高工程的...

管子(zero)的杂乱空间 172

jsp(转载)

1.自定义JSP标签概述 自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时,就可以在页面中插入这个标签,从而完成相应的功能。使用自定义标签,可以分离程序逻辑和表示逻辑,将Java代码从HTML中剥离,便于美工维护页面;自定义标签也提供了可重用的功能组件,能够提高工程的开发效率

datudou000的专栏 240

Javaweb自定义标签

项目中用到自定义的标签文件,但是却在web.xml中没有看到相关的标签配置,原来如果web应用使用servelet2.4以上的版本就不需要在web.xml中定义了,servelet会自动加载tld文件,有两种方式使用自动加载 1、打成jar包时,将tld文件放在META-INF文件夹下(参考standard,jar) 2、直接将自定义tld文件放在WEB-INF下(也可以放在WEB-...

weixin_30287169的博客 79

自定义标签入门

为什么80%的码农都做不了架构师?>>> ...

weixin_33851604的博客 83

JSP自定义标签库

JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时,就可以在页面中插入这个标签,从而完成相应的功能。 使用自定义标签,可以分离程序逻辑和表示逻辑,将Java代码从HTML中剥离,便于美工维护页面;自定义标签也提供了可重用的功能组件,能够提高工程的开发效率。 自定义标签主要用于移除J

1005

jsp自定义标签

自定义标签继承树: 自定义标签类-----&gt;继承SimpleTagSupport------&gt;实现SimpleTag接口 自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类 /** * 标签处理器类 * @author APPle * 1)继承SimpleTagSupport * */ public class ...

weixin_40775755的博客 751
上一篇: 通过值集合或者遍历set集合方式,访问map对象里面的值
下一篇: jdbc操作myqsl数据库模板代码
forlab
博客等级 码龄15年 2粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值