编写描述标签的tld文件,把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签
package test.yz; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspContext; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.JspFragment; import javax.servlet.jsp.tagext.JspTag; import javax.servlet.jsp.tagext.SimpleTag; public class Handsome implements SimpleTag { private PageContext pageContext; @Override public void doTag() throws JspException, IOException { HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); JspWriter out = pageContext.getOut(); out.print(" handsome boy"); System.out.println(" handsome boy"); } @Override public JspTag getParent() { return null; } @Override public void setJspBody(JspFragment arg0) { } @Override public void setJspContext(JspContext jspContext) { pageContext = (PageContext)jspContext; } @Override public void setParent(JspTag arg0) { } }
package test.yz; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspContext; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.JspFragment; import javax.servlet.jsp.tagext.JspTag; import javax.servlet.jsp.tagext.SimpleTag; public class SumTag implements SimpleTag { private PageContext pageContext; private int num1; private int num2; public void setNum1(int num1) { this.num1 = num1; } public void setNum2(int num2) { this.num2 = num2; } @Override public void doTag() throws JspException, IOException { // TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); JspWriter out = pageContext.getOut(); out.print(num1+num2); } @Override public JspTag getParent() { // TODO Auto-generated method stub return null; } @Override public void setJspBody(JspFragment arg0) { // TODO Auto-generated method stub } @Override public void setJspContext(JspContext arg0) { pageContext = (PageContext)arg0; } @Override public void setParent(JspTag arg0) { // TODO Auto-generated method stub } }
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!-- --> <description>JSTL 1.0 core library</description> <display-name>JSTL core</display-name> <tlib-version>1.0</tlib-version> <short-name>lf</short-name> <!-- 默认的前缀名 --> <uri>http://java.lf.com/handsome</uri> <!-- 指定访问路径 --> <tag> <name>hs</name> <!-- 标签名 --> <tag-class>test.yz.Handsome</tag-class><!-- 自定义类的全称 --> <body-content>empty</body-content> </tag> <!-- 配置属性标签 --> <tag> <name>sum</name> <tag-class>test.yz.SumTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>num1</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <!-- true的话jsp中该属性只可以为表达式,false只能为静态值 --> <type>java.lang.Integer</type> <!-- 指明参数的类型 --> </attribute> <attribute> <name>num2</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <!-- true的话jsp中该属性只可以为表达式,false只能为静态值 --> <type>java.lang.Integer</type> <!-- 指明参数的类型 --> </attribute> </tag> </taglib>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="lf" uri="http://java.lf.com/handsome" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>
</head>
<body>
<!-- 测试自定义标签 -->
<h1><lf:hs/></h1>
<lf:sum num2="2" num1="3"></lf:sum>
</body>
</html>