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目录及其子目录找到的。