文章目录
  1. 1. taglib工作原理

taglib工作原理

在struts2中很重要的功能:数据封装、数据回显。数据封装的实现很好理解,即通过在过滤器预先读取请求参数的值,并利用反射机制封装到一个对象,即Model,所以需要implements接口并实现setModel方法,或者是封装到action的属性中,然后调用action的execute方法。本文的重点是记录我对数据回显的理解。
struts2数据回显实现让我对taglib的原理产生了疑问,于是开始探索……..
jsp文件中允许使用自己定义的标签库,如struts2的标签库

<%@ taglib prefix=”s” uri=”/struts-tags”%>

那么,这些标签是怎么工作的呢?

首先,看这个uri指向什么文件。在eclipse F3转到文件,可以发现是在struts2-core-*.jar中的一个struts-tags.tld文件,tld应该就是指 taglib description。文件中的内容大致如下:

<display-name>"Struts Tags"</display-name>
  <tlib-version>2.2.3</tlib-version>
  <short-name>s</short-name>
  <uri>/struts-tags</uri>
  <tag>
    <description><![CDATA[Execute an action from within a view]]></description>
    <name>action</name>
    <tag-class>org.apache.struts2.views.jsp.ActionTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <description><![CDATA[Whether the result of this action (probably a view) should be executed/rendered]]></description>
      <name>executeResult</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
        ...
    </attribute>
</tag>
<tag>
...
</tag>
...
</taglib>

在每个tag中定义了一个标签,指定了一个处理该标签的java类,有关这些处理类的实现提供了

  • 一个接口——javax.servlet.jsp.tagext.Tag
  • 两个类——自关闭类型标签(TagSupport);成对类型的标签(BodyTagSupport)
    然后,重写方法setPageContext(),doStartTag(),doEndTag(),在这些方法中做一些操作。
    还有一个问题,jsp文件是怎么找到这些tld文件的?
    struts2-core-*.jar文件是放在WEB/lib目录下的,也就是在classpath中,tld文件就是通过搜索classpath目录及其子目录找到的。
文章目录
  1. 1. taglib工作原理