`

jsp 自定义标签

 
阅读更多
有时候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: 
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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics