JavaWeb_简单标签的HelloWorld
简单标签的HelloWorld
- 1.为什么使用自定义标签
1)自定义标签可以降低 JSP 开发的复杂度和维护量,从 html 角度来说,可以使 html 不用去过多的关注那些比较复杂的商业逻辑(业务逻辑)。
2)利用自定义标签,可以软件开发人员和页面设计人员合理分工:页面设计人员可以把精力集中在使用标签(HTML,XML或者JSP)创建网站上,而软件开发人员则可以将精力集中在实现底层功能上面,如国际化等,从而提高了工程生产力。
3)将具有共用特性的tag库应用于不同的项目中,体现了软件复用的思想。 - 2.什么是自定义标签
1)用户定义的一种自定义的 JSP 标记 。当一个含有自定义标签的 JSP 页面被 JSP 引擎编译成 Servlet 时,tag 标签被转化成了对一个称为标签处理类的对象的操作。于是,当 JSP 页面被 JSP 引擎转化为 Servlet 后,实际上 tag 标签被转化为了对 tag 处理类的操作。 - 3.自定义标签
1)HelloWorld
①创建一个标签处理器类:实现 SimpleTag 接口。
②在 WEB-INF 文件夹下新建一个 .tld(标签库描述文件) 为扩展名的 xml 文件。并拷入固定的部分:并对 description,display-name,tlib-version,short-name,uri 做出修改。
mytag.tld
<?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>c</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>
</taglib>
.
③在 tld 文件中描述自定义的标签:
<!-- 描述自定义的HelloSimpleTag标签 -->
<tag>
<!-- 标签的名字:在JSP页面上使用标签时的名字 -->
<name>hello</name>
<!-- 标签所在的全类名 -->
<tag-class>com.xs.javaweb.tag.HelloSimpleTag</tag-class>
<!-- 标签体的类型 -->
<body-content>empty</body-content>
</tag>
.
④在 JSP 页面上使用自定义标签:
> 使用 taglib 指令导入标签库描述文件:<%@taglib prefix=“xs” uri=“http://www.xs.com/mytag/core” %>
> 使用自定义的标签:< xs:hello/>
2)HelloWorld
- 4.标签库API
- 5.使用自定义标签代码:
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 导入标签库(描述文件) -->
<%@taglib prefix="xs" uri="http://www.xs.com/mytag/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<xs:hello/>
</body>
</html>
HelloSimpleTag.java
/**
* All rights Reserved,Designed By XS
* @Title: HelloSimpleTag.java
* @Package com.xs.javaweb.tag
* @Description: TODO
* @author: XS
* @date: 2019年3月13日 下午8:15:12
* @version V1.0
*/
package com.xs.javaweb.tag;
import java.io.IOException;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;
/**
* @ClassName: HelloSimpleTag
* @Description: TODO
* @author: XS
* @date: 2019年3月13日 下午8:15:12
* @version V1.0
*/
public class HelloSimpleTag implements SimpleTag {
/**
* <p>Title: doTag</p>
* <p>Description: </p>
* @see javax.servlet.jsp.tagext.SimpleTag#doTag()
* @throws JspException
* @throws IOException
*/
@Override
public void doTag() throws JspException, IOException {
System.out.println("goTag");
}
/**
* <p>Title: getParent</p>
* <p>Description: </p>
* @see javax.servlet.jsp.tagext.SimpleTag#getParent()
* @return
*/
@Override
public JspTag getParent() {
System.out.println("getParent");
return null;
}
/**
* <p>Title: setJspBody</p>
* <p>Description: </p>
* @see javax.servlet.jsp.tagext.SimpleTag#setJspBody(javax.servlet.jsp.tagext.JspFragment)
* @param arg0
*/
@Override
public void setJspBody(JspFragment arg0) {
System.out.println("setJspBody");
}
/**
* <p>Title: setJspContext</p>
* <p>Description: </p>
* @see javax.servlet.jsp.tagext.SimpleTag#setJspContext(javax.servlet.jsp.JspContext)
* @param arg0
*/
@Override
public void setJspContext(JspContext arg0) {
System.out.println("setJspContext");
}
/**
* <p>Title: setParent</p>
* <p>Description: </p>
* @see javax.servlet.jsp.tagext.SimpleTag#setParent(javax.servlet.jsp.tagext.JspTag)
* @param arg0
*/
@Override
public void setParent(JspTag arg0) {
System.out.println("setJspContext");
}
}