?
因为在Struts2中使用到了很多该框架的自定义标签的使用,所以在此特别梳理了一下有关的知识体系
标签(动作)的一般语法为:<prefix:标签名 属性表列>,如<jsp:include page="copyright.jsp" />,该标签的作用是把copyright.jsp页面的输出包含到当前页面的输出中
我们先来看一下常用的标准JSP动作动作指令,又可以叫做标签指令:
以上的这些标准标签是JSP中内置的,所以不需要特别的生命便可使用。当然我们也可以根据需要定义自定义标签以实现特定的效果,下面我将系统的介绍自定义标签的创建和使用流程:
所谓自定义标签就是用Java语言开发的程序的,以特定的格式在JSP页面中使用的标签,自定义标签又被叫做自定义动作(Custom Action)。
我们这里主要介绍如何利用JSP2.0中的扩展标签API进行开发,而不再介绍传统JSP1.x中标签的开发,JSP2.0中简单的自定义标签开发更加简洁和使用。
?
?
下面我们将创建使用一个实现将标签体打印五次的自定义标签,并在之后说明其相关原理。
标签处理类
?
public class HelloTag implements SimpleTag { JspContext context = null; JspTag parent = null; JspFragment jspBody = null; @Override public void doTag() throws JspException, IOException { StringWriter sw = new StringWriter(); jspBody.invoke(sw); String bodyContent = sw.toString(); JspWriter out = context.getOut(); for(int i=0;i<5;i++){ out.println(bodyContent); } } @Override public JspTag getParent() { return parent; } @Override public void setJspBody(JspFragment jspBody) { } @Override public void setJspContext(JspContext jspContext) { context = jspContext; } @Override public void setParent(JspTag parent) { this.parent = parent; } }
?标签库描述文件 sampleLib.tld,放在WEB-INF或者其子文件夹中
?
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.2</tlib-version> <uri>/testPath</uri> <tag> <name>hello</name> <tag-class>com.mytream.HelloTag</tag-class> </tag> </taglib>
?在hello.jsp页面中使用该标签
?
<%@ page contentType="text/html" %> <%@ taglib prefix="test" uri="/testPath" %> <html> <head> <title>Test Custom Tag</title> </head> <body> <test:hello>good</test:hello> </body> </html>
?访问hello.jsp页面,我们将会看到good被连续打印了5遍,这是我们在doTag()方法中所做的操作,当然该标签的解析过程要比这复杂的多,下面我讲一一介绍。
?
?
上图不一定符合UML规范,仅仅是为了帮助理解。从上图我们可以看到tomcat容器在对JSP页面进行转换的过程中,一旦遇到用户自定义的标签便要通过如上三步进行解析并执行该标签所代表的动作。
?
?
?
至于如何使用JSTL标签库,有太多的参考资料了,暂时不再列叙