快速业务通道

JSP的运行内幕

作者 凌众技术 来源 互联网 浏览 发布时间 2012-01-14

  在_jspx_meth_html_html_0()方法中,首先从_jspx_tagPool_html_html_locale池中得到一个org.apache.struts.taglib.html.HtmlTag的实例,然后设置这个tag实例的页面上下文及上级标签,由于html:html标签是页面的最顶层标签,所以它的parent是null。然后对该标签的内容进行解析。HTML代码直接输出,下面主要看看%lt;html:html></html:html>标签之间包含的<bean:message key="index.title"/>标签的解析。对bean:message标签的解析类似于html:html,Tomcat也将其放入一个单独的方法_jspx_meth_bean_message_0()中进行。 

bean:message标签的解析 

  代码清单7:_jspx_meth_bean_message_0()方法片断 

  //对message定制标签的处理方法
  private boolean _jspx_meth_bean_message_0(
  javax.servlet.jsp.tagext.Tag _jspx_th_html_html_0, 
  javax.servlet.jsp.PageContext pageContext) throws Throwable {
  JspWriter out = pageContext.getOut();
  /* ---- bean:message ---- */
  org.apache.struts.taglib.bean.MessageTag
  _jspx_th_bean_message_0 =(org.apache.struts.taglib.bean.MessageTag) 
  _jspx_tagPool_bean_message_key.get(org.apache.struts.taglib.bean.MessageTag.class);
  _jspx_th_bean_message_0.setPageContext(pageContext);
  _jspx_th_bean_message_0.setParent(_jspx_th_html_html_0);
  _jspx_th_bean_message_0.setKey("index.title");
  int _jspx_eval_bean_message_0 = _jspx_th_bean_message_0.doStartTag();

  if (_jspx_th_bean_message_0.doEndTag()== javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
  return true;
  _jspx_tagPool_bean_message_key.reuse(_jspx_th_bean_message_0);
  return false;
  }


  同样,对html:bean也需要从池中得到一个标签类的实例,然后设置环境。这里不再赘述。我们只专注对MessageTag定制标签类特殊的处理部分。定制标签类的开发不在本文讨论范围之内。在index.jsp中定义了一个bean:message标签,并设置了一个属性:。Tomcat在解析时,调用MessageTag对象的key属性设置方法setKey(),将该属性置入。然后调用MessageTag的doStartTag()和doEndTag()方法,完成解析。如果doEndTag()方法的返回值为javax.servlet.jsp.tagext.Tag. SKIP_PAGE,表明已经完成解析,返回true,Tomcat将立即停止剩余页面代码的执行,并返回。否则把该MessageTag的实例放回池中。 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号