有时候web.xml中无法配置<taglib>,原因在于:
servlet 2.3的配置不需要<jsp-config>标签的,
servlet 2.4容器中<taglib>需要在<jsp-config>中。
(实际上,区分就在web.xml一开时的<web-app version="2.5"...web-app_2_5.xsd里,这里的2.5就代表2.5的版本)
完整的例子是孙卫琴的《Tomcat与Java Web开发技术详解》中的第二章:创建和发布web应用中,2.2.7 部署JSP Tag Library。
在web应用中可以加入Tag Library(标签库)。Tag Library向用户提供了自定义JSP标签的功能。以下一个例子就是自定义了一个标签库mytaglib。将<mm:hello/>解析为"hello"。
(1)编写处理hello标签的类ShowHello.java:
servlet 2.3的配置不需要<jsp-config>标签的,
servlet 2.4容器中<taglib>需要在<jsp-config>中。
(实际上,区分就在web.xml一开时的<web-app version="2.5"...web-app_2_5.xsd里,这里的2.5就代表2.5的版本)
完整的例子是孙卫琴的《Tomcat与Java Web开发技术详解》中的第二章:创建和发布web应用中,2.2.7 部署JSP Tag Library。
在web应用中可以加入Tag Library(标签库)。Tag Library向用户提供了自定义JSP标签的功能。以下一个例子就是自定义了一个标签库mytaglib。将<mm:hello/>解析为"hello"。
(1)编写处理hello标签的类ShowHello.java:
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class ShowHello extends TagSupport {
public int doEndTag() throws JspException {
System.out.println("---------------begin");
try {
pageContext.getOut().write("<h1>hello word!</h1>");
} catch (IOException e) {
e.printStackTrace();
}
return this.EVAL_PAGE;
}
}
(2) 创建Tag Libraray的描述文件mytaglib.tld文件,在这个文件中定义mytaglib标签库和hello标签。这个文件存放的位置为: /WEB-INF/taglib/mytags.tld。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>my</short-name> <uri>/my-tags</uri> <tag> <name>hello</name> <tag-class>com.wang.tags.ShowHello</tag-class> <body-content>empty</body-content> </tag> </taglib>
(3)在web.xml文件中加入<taglib>元素:这里会出错,说不能识别<taglib>原因一开始已经讲了。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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-app_2_5.xsd"> <jsp-config>-------------------如果是servlet 2.4,这个标签要加,否则不加也对 <taglib> <taglib-uri>/my-tags</taglib-uri> <taglib-location>/WEB-INF/taglib/mytags.tld</taglib-location> </taglib> </jsp-config> </web-app>
<taglib>中包含两个属性<taglib-uri>和<taglib-location>。<taglib-uri>指定Tag Library标示符;<taglib-location>指定Tag Library的描述文件tld的位置。
(4)在web应用中加入hello标签(hello.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="my" uri="/my-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<my:hello/>
<hr>
</body>
</html>
网页结果为: hello world