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(); } } } } }
相关推荐
写一个自定义标签要继承什么类 SimpleTagSupport,一般调用doTag方法 或者实现SimpleTag接口 5.Jsp如何处理json 在 jsp 中处理 JSON,通常需要配套使用 JQuery 控件,并且导入一些 Common jar 包。 使用 ...
component标签:生成一个自定义的组件。 div标签:AJAX标签,生成一个div片段。 fielderror标签:输出异常提示信息。 tabbedPanel:AJAX标签,生成HTML中的Tab页。 tree标签:生成一个树形结构。 treenode标签:...
<HTML><HEAD>关于java异常处理(讲义)--JSP中文网 ; charset=gb2312" http-equiv=Content-Type> 关于java异常处理(讲义),JSP中文网> 关于java异常处理(讲义)> href=...
24.1 JSP include指令/标签的不足 302 24.2 Tiles布局和定义 303 24.2.1 布局页面 303 24.2.2 Tiles定义 304 24.3 Struts Tiles插件 305 24.4 Struts Tiles示例 306 24.5 小结 309 第25章 JFreeChart插件 310 25.1 ...
Struts是一个基于Sun J2EE平台的MVC框架,Struts把Servlet、JSP、自定义标签和信息资源(Message Resources)整合到统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套 MVC模式,极大的节省了时间[4]。...
14、JSP中初始化workspace的标签 78 15、JSP中用标签输出一条内容 78 (二)、标签及其功能的使用 78 1、Writing links to Web Content Management content 78 (三)拖放 JSP标记 80 1)<dnd:drag/> 80 2)...
8.1.3 Struts框架执行流程 118 8.2 MyEclipse创建基于Struts框架的项目 119 8.2.1 创建Struts项目 119 8.2.2 Struts组件向导 121 8.2.3 Struts配置文件编辑器 124 8.3 Struts应用实例:登录系统 125 8.4 本章小结 ...
一、准备工作及实例 3 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 ... 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图来看: 60
jsp被编译之后会转换为servlet执行 java基本数据类型有哪些?String是不是基本数据类型,他们有何区别? 答:基本数据类型8种:int、short、byte、long、float、double、char、boolean String不是基本数据类型,引用...
第4章 程序流程控制 4.1 顺序结构 4.2 条件语句 4.2.1 if语句 4.2.2 if-else语句 4.2.3 if-else-if语句 4.2.4 if语句的嵌套 4.2.5 布尔表达式 4.2.6 开关语句 4.3 循环语句 4.3.1 while循环结构 4.3.2 do...
"职位,如班委,普通学 " " " "生 " 图5 录入数据后的登陆权限表 3、系统详细设计文档 3.1、系统执行流程图 图6 系统执行流程图 3.2、类的划分 表3 学生信息查询类 "类名 "类的成员属性与方法 "说明 " "StuQuery.jav...
"职位,如班委,普通学 " " " "生 " 图5 录入数据后的登陆权限表 3、系统详细设计文档 3.1、系统执行流程图 图6 系统执行流程图 3.2、类的划分 表3 学生信息查询类 "类名 "类的成员属性与方法 "说明 " "StuQuery.jav...
"职位,如班委,普通学 " " " "生 " 图5 录入数据后的登陆权限表 3、系统详细设计文档 3.1、系统执行流程图 图6 系统执行流程图 3.2、类的划分 表3 学生信息查询类 "类名 "类的成员属性与方法 "说明 " "StuQuery.jav...
"职位,如班委,普通学 " " " "生 " 图5 录入数据后的登陆权限表 3、系统详细设计文档 3.1、系统执行流程图 图6 系统执行流程图 3.2、类的划分 表3 学生信息查询类 "类名 "类的成员属性与方法 "说明 " "StuQuery.jav...
"职位,如班委,普通学 " " " "生 " 图5 录入数据后的登陆权限表 3、系统详细设计文档 3.1、系统执行流程图 图6 系统执行流程图 3.2、类的划分 表3 学生信息查询类 "类名 "类的成员属性与方法 "说明 " "StuQuery.jav...
"职位,如班委,普通学 " " " "生 " 图5 录入数据后的登陆权限表 3、系统详细设计文档 3.1、系统执行流程图 图6 系统执行流程图 3.2、类的划分 表3 学生信息查询类 "类名 "类的成员属性与法 "说明 " "StuQuery.jav...
"职位,如班委,普通学 " " " "生 " 图5 录入数据后的登陆权限表 3、系统详细设计文档 、系统执行流程图 图6 系统执行流程图 、类的划分 表3 学生信息查询类 "类名 "类的成员属性与方法 "说明 " " "JPanel jp1 "定义...
3.6.4 为自定义校验器开发专用标签 169 3.6.5 使用托管Bean的方法执行校验 173 3.6.6 绑定到Bean属性的校验器 175 3.7 本章小结 177 第4章 利用JDBC和JTA访问 数据库和管理全局事务 178 4.1 JDBC和容器管理的数据源 ...