jsp自定义标签
JSP自定义标签(JSP Custom Tag)是JSP技术中一个重要的扩展。它可以将一些常见的HTML或Java代码重复使用封装成标签,这样可以简化JSP页面的编写,提高代码的复用性和可维护性。
JSP自定义标签可分为两类:
标签处理程序(Tag Handler)类标签,开发者编写Java类实现,可以使用Java代码处理标签体内容及标签属性。
标记文件(Taglib)标签,需要在标签库(Tag库)中定义标签信息,标签体内容可以使用EL表达式等JSP技术实现。
使用JSP自定义标签可以降低页面跨度和提高可读性,使得JSP页面开发更加简洁、灵活。同时,JSP自定义标签也可以增强JSP的功能,实现一些复杂的逻辑处理、数据查询等功能,提高开发效率。
二、自定义标签的特点
1.通过调用页面实现传递定制.
2.访问所有对JSP页面可能的对象.
3.修改调用页面生成的响应.
4.自定义标签之间可以互相通信.
5.在同一个JSP页面中对标签嵌套可以实现复杂交互.
out,if,foreach标签
<?xml version="1.0" encoding="UTF-8" ?> <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"> <description>JSTL 1.1 core library</description> <display-name>JSTL core</display-name> <tlib-version>1.1</tlib-version> <short-name>k</short-name> <uri>/Java2EE_jsp/WebContent/WEB-INF/kun.tld</uri> <validator> <description> Provides core validation features for JSTL tags. </description> <validator-class> org.apache.taglibs.standard.tlv.JstlCoreTLV </validator-class> </validator> <tag> <!-- 标签库的名字 --> <name>demo1</name> <!-- 该标签对应的助手类 --> <tag-class>com.xuayhui.tag.DemoTag</tag-class> <!-- 代表是一个JSP标签 --> <body-content>JSP</body-content> <attribute> <!-- 该自定义JSP标签的属性名称 --> <name>var</name> <!-- 该属性是否必填 --> <required>false</required> <!-- 该属性值是否支持表达式 --> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>if</name> <tag-class>com.xuayhui.tag.Iftag</tag-class> <body-content>JSP</body-content> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>set</name> <tag-class>com.xuayhui.tag.SetTag</tag-class> <body-content>JSP</body-content> <attribute> <name>var</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>out</name> <tag-class>com.xuayhui.tag.OutTag</tag-class> <body-content>JSP</body-content> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
out助手类
package wenhao; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; /** * servlet中后台代码前台输出内容: out.print * 将数据输出到前台,首先拿到输出流 * * */ public class OutTag extends BodyTagSupport{ private Object value; public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } @Override public int doStartTag() throws JspException { JspWriter out = pageContext.getOut(); try { out.print(value); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return super.doStartTag(); } }
if助手类
package wenhao; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; /** * if标签: * 如果满足条件,就打印标签体,dostarttag的返回值eval_body_include * * 如果不满足条件,就不输出标签体,dostarttag的返回值skip_body * * 需要获取到是否满足条件的结果值,那么标签就有一个属性,属性值是boolean * * */ public class Iftag extends BodyTagSupport{ private boolean test; public boolean isTest() { return test; } public void setTest(boolean test) { this.test = test; } @Override public int doStartTag() throws JspException { // 如果满足条件,就打印标签体,dostarttag的返回值eval_body_include // 如果不满足条件,就不输出标签体,dostarttag的返回值skip_body return test ? EVAL_BODY_INCLUDE : SKIP_BODY; } }
jsp界面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- 了解标签结构 <c:if test="true"> 开始标签 true 标签体 </c:if> 结束标签 标签分类:控制标签、数据标签、UI标签 没有标签体也能在网页中输出类容的标签,称为UI标签 通过点击c:if标签,可以链接跳到c.tld文件中,而.tld文件就是C标签库的定义配置文件 --> <c:if test="true">true</c:if> <c:if test="false">false</c:if> <c:set var="name" value="kunkun"></c:set> <c:out value="${name }"></c:out> </body> </html>