标签
概述:
动作标签的作用是用来简化Java脚本,让jsp页面尽量不出现Java代码。也称为jsp动作元素。
JavaWeb一共提供了20个JSP动作标签,但有很多基本没有用,这里只介绍一些有作用的动作标签。如果不够用还可以自定义标签。
格式
JSP动作标签的格式:<jsp:标签名 …>
常用内置标签
<jsp:include>
<jsp:include>标签的作用是用来包含其它JSP页面的!
包含标签和包含指令的区别:
include指令是在编译级别完成的包含,即把当前JSP和被包含的JSP合并成一个JSP,然后再编译成一个Servlet。
include动作标签是在运行级别完成的包含,即当前JSP和被包含的JSP都会各自生成Servlet,然后在执行当前JSP的Servlet时完成包含另一个JSP的Servlet。它与RequestDispatcher的include()方法是相同的!
其实<jsp:include>在“真身”中不过是一句方法调用,即调用另一个Servlet的_jspService()而已。
<jsp:forward>
forward标签的作用是请求转发!forward标签的作用与RequestDispatcher#forward()方法相同。
<jsp:param>
还可以在<jsp:include>和<jsp:forward>标签中使用<jsp:param>子标签,它是用来传递参数的。
自定义标签
JspTag是所有标签类的父接口,没有任何属性和方法,只是jsp2.0引入的一个标记接口。
其中,一般称Tag接口是传统标签,Simp了Tag是简单标签。
实际开发中编写一个类,继承SimpleTagSupport类,重写其中的doTag()方法。
具体步骤:
1、编写一个类继承SimpleTagSupport类,然后根据业务需要重写SimpleTagSupport类中已经实现了的方法,一般情况下只需要重写doTag()方法即可。
2、在WEB-INF目录下创建一个tld文件,在tld文件中添加对该标签的描述。tld文件不一定放在WEB-INF目录下,也可以放在别的目录,习惯是放在WEB-INF目录下。
标签库描述文件tld:
<tag>
<!-- 标签名 -->
<name>demo2</name>
<!-- 标签处理器类-->
<tag-class>me.gacl.web.simpletag.SimpleTagDemo2</tag-class>
<!-- 标签体允许的内容 ,scriptless表示标签体的内容不允许是java脚本代码-->
<body-content>scriptless</body-content>
</tag>
<body-content>元素的可选值有:
- empty:无标签体。
- JSP:传统标签支持它,SimpleTag已经不再支持使用<body-content>JSP</body-content>。标签体内容可以是任何东西:EL、JSTL、<%=%>、<%%>,以及html;
- scriptless:标签体内容不能是Java脚本,但可以是EL、JSTL等。在SimpleTag中,如果需要有标签体,那么就使用该选项;
- tagdependent:标签体内容不做运算,由标签处理类自行处理,无论标签体内容是EL、JSP、JSTL,都不会做运算。这个选项几乎没有人会使用!
自定义有标签体的标签需要:
- 获取标签体对象:JspFragment jspBody = getJspBody();;
- 把标签体内容输出到页面:jspBody.invoke(null);
- tld中指定标签内容类型:scriptless。
EL表达式
参考文章
简单标签开发(一)