首页 > 编程 > JSP > 正文

JSP模板应用指南(下)

2020-06-01 23:26:24
字体:
来源:转载
供稿:网友
执行模板
  这里所讨论的模板将在三种定制标签下执行:

  Template: insert

  Template: put

  Template: get

  insert 标签中包含一个模板,但是在包含之前,put 标签存储有一些信息——name, URI和Boolean 值(用来指定将内容是包含还是直接显示)——关于模板所包含的内容。在template:get中包含(或显示)了指定的内容,随后将访问这些信息。

  template:put 把Bean 存储在请求区域(但并不直接存储),因为如果两个模板使用了相同的内容名,一个嵌套模板就将覆盖封装模板中的内容。

  为了保证每一个模板能够只存取它自己的信息,template:insert 保留了一个hashtable堆栈。每一个insert 开始标签建立一个 hashtable并把它放入堆栈。封装的put 标签建立bean并把它们保存到最近建立的hashtable中。随后,在被包含模板中的 get 标签访问hashtable中的bean。图 4 显示了堆栈是如何被保留的。


  图 4. 在请求区域存储模板参数 点击放大(24 KB)

  在图 4中每一个模板访问正确的页脚、footer.html 和footer_2.html。如果 bean被直接存储在请求区域,图 4中的step 5将覆盖在step 2中指定的footer bean。

模板标签执行
  接下来我们将分析三个模板标签的执行: insert, put和get。我们先从图 5开始。这个图表说明了当一个模板被使用时,insert和put标签事件的执行顺序。


  图 5. put和insert 标签执行顺序 点击放大(24 KB)

  如果一个模板堆栈已经不存在,insert 开始标签就会建立一个并把它放置到请求区域。随后一个hashtable也被建立并放到堆栈中。

  每一个 put 开始标签建立一个PageParameter bean,并存储在由封装的insert标签建立的hashtable中。

  插入 end 标签包含了这个模板。这个模板使用get标签来访问由put标签建立的bean。在模板被处理以后,由insert 开始标签建立的hashtable就从堆栈中清除。

  图 6显示template:get的顺序图表。


  图 6. get标签的顺序图表 点击放大(11 KB)

模板标签列表
  标签handler很简单。在例 3.a中列出了Insert标签类——标签handler。

  例 3.a. InsertTag.java

  packagetags.templates;

  import java.util.Hashtable;

  import java.util.Stack;

  import javax.servlet.jsp.JspException;

  import javax.servlet.jsp.PageContext;

  import javax.servlet.jsp.tagext.TagSupport;

  public class InserttagextendstagSupport {

   private Stringtemplate;

   private Stack stack;

   // setter method fortemplate 属性

   public void setTemplate(Stringtemplate) {

     this.template =template;

   }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表