Jsp标签

来源:互联网 发布:兄弟连培训php学费多少 编辑:程序博客网 时间:2024/05/18 02:32

前面我们即使用MVC模式开发,jsp页面中还是会有很多scriptlet代码,和html标签混合,显得有些难以维护,如果想要编写具有更高可维护性的代码,那么我们就要用到jsp标签了。

怎样使用Jsp标签呢?

首先编写一个继承自javax.servlet.jsp.tagext.TagSupport类的java类,如果没有标签体,那么只需要重写doStartTag()方法即可:


通过TagSupport里的pageContext取得Jsp页面的输出流,此处返回的TagSupport.SKIP_BODY表示不执行标签体。

然后编译他,如果使用javac进行编译的话会出现找不到类的异常,因为javac使用的是Java SE,而TagSupport是属于Java EE的范畴,所以我们需要把%Tomcat%\lib下的jsp-api.jar在classpath中配置上,或者把这个jar包放在jdk的lib文件夹下。

第二步就是定义标签库描述文件TLD(Tag Library Descriptor):


第三步就是在jsp页面中使用它:


其中的prefix是在此页中可以使用的指向,就像JavaBean的id一样,冒号后面就是具体的tag的名字。

在这里把tld文件放在了WEB-INF下,如果放在WEB-INF/tags下,就会出现ClassNotFound异常或者提示tld文件出错,这是因为tags是自定义的文件夹,和classes不一样,Tomcat不会去寻找。这时我们就要配置web.xml:


这时我们jsp引用的时候就写:



之前我们使用的标签还可以添加属性,那么我们自定义的当然也可以,他的原理还是根据反射去实现的,所以我们只需要在继承自TagSupport的类里添加局部变量和相关的getter、setter方法即可:


然后定义它的tld文件:


注意attribute标签里的required表示必须要设置此属性,rtexprvalue为true表示支持表达式输出,false则表示不支持。

如果设置了为TRUE,那么可写成:


或者


当然还有配置路径:


关于TagSupport类:



Tag接口的执行流程是:


IterationTag接口的执行流程是:


可以看得出,这俩接口的主要区别就是,IterationTag接口多了可以重复执行标签体的一步,doAfterBodyTag方法主要是决定是否再一次执行标签体,什么是标签体:









0 0
原创粉丝点击