自定义标签入门例子流程总结
来源:互联网 发布:底层架空建筑面积算法 编辑:程序博客网 时间:2024/06/04 20:47
一、简单的自定义标签入门例子,定义了两个标签。主要结构是 两个处理类加标签应用的jsp加一个标签描述tld文件。如图一。
图一 图二
1.在写标签的处理类MyTag时,需要继承tagsupport类。至少重写doStartTag()、doEndTag()一个。
问题L:我点击右边的add,输入TagSupport却找不到这个类。(如图二)然后悲剧开始了。。。
我导入jsp-api.jar 和servlet-api.jar,还是没找到这个类。但是运行任何我的包下之前的jsp页面,都会出现下面的错误:如图三
jsp-api.jar等加载失败。一般 jsp-api.jar等 是不需要自己引入到Eclipse或Myeclipse中的,MyEclipse会自动引入该文件(tomcat的lib下都会有这个jar文件),如果再自己引入的话就会产生冲突,出现上面的错误。
Add是为新创建的类添加接口而不是父类,上面“Superclass”后的"Browse"才是用来添加继承的父类名。Add键那个框右边的标题是 Interface!是接口的意思啊。
2.一个标签处理类对应tld文件中的一个tag元素,然后就可以在jsp页面中使用这个标签了。其中有几个配对。(用相同颜色标志了)
tag.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">
<tlib-version>1.1</tlib-version>
<!-- 另一种头文件的描述。
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library
1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version>
-->
<short-name>MyTag</short-name>
<uri>/myTag</uri>
<tag>
<name>firstTag</name>
<tag-class>com.my.tag.MyTag</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<name>secondTag</name>
<tag-class>com.my.tag.MyTag2</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
index.jsp 全部代码:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/myTag"prefix = "pf" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<p><font color = "red"> <pf:firstTag/> </font><br>
<font color = "blue"> <pf:secondTag/></font>
</body>
</html>
至于绿色的对应于我的标签处理类MyTag。
二、使用propertities配置文件的简单的自定义标签入门例子。目录结构如图四。
图四
1.为了在标签处理类MyTag3的doEnd Tag()f方法中能读到properties中设置的键值对,需要添加一个servlet。配置servlet时,不用写servlet-mapping。因为这时servlet只被容器使用,不给用户访问。这时需要配置load-on-startup.具体代码如下:
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>mytag</servlet-name>
<servlet-class>com.my.servlet.MyTagInitServlet</servlet-class>
<load-on-startup>30</load-on-startup>
</servlet>
在servlet的初始化方法中先获取properties对象,然后把tag.properties配置文件作为输入流加载进来。这样properties对象就和配置文件中的键值对关联。其中有几种读取文件输入流方式,具体代码如下:
public class MyTagInitServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
Properties ps = new Properties();
/*//方法一。包外。getResourceAsStream:其本质是,通过类加载器根据一个相对路径返回一个文件输入流。根据类所在的位置,去加载配置文件所在的位置。http://wang-zhi-peng2007.iteye.com/blog/856941
InputStream is1 = this.getClass().getClassLoader().getResourceAsStream("tag.properties");
try {ps.load(is1);
is1.close();
} catch (IOException e) {
e.printStackTrace();
}*/
/*//方法二。包内。这种方式要求properties文件和当前类在同一文件夹下面。显然本例不符合。
InputStream is2 = this.getClass().getResourceAsStream("tag.properties");
try {ps.load(is2);
is2.close();
} catch (IOException e) {
e.printStackTrace();
}*/
/*//方法三。包外。如果在不同的包中,路径指定完全。http://www.52ij.com/jishu/83.html
try {
InputStream is3 = new FileInputStream("D:\\myeclipseworkspace\\test\\WebRoot\\WEB-INF\\tag.properties");
ps.load(is3);
is3.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}*/
//将tag.propetties配置的键值队存入处理类中。http://www.cnblogs.com/FlameRen/archive/2013/03/14/2959586.html
ServletContext context = config.getServletContext();
//方法四。相对路径。最常用。
InputStream is = context.getResourceAsStream("/WEB-INF/tag.properties");
try {
ps.load(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
//将properties对象放置到application范围内供其它组件使用。
context.setAttribute("ps", ps);
}
}
2.在标签处理类MyTag3中,具体代码如下:
public class MyTag3 extends TagSupport {
private String key;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
@Override
public int doStartTag() throws JspException {
try {
this.pageContext.getOut().println(
"The second exmple of tag started:" + "\n");
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_BODY_INCLUDE;
}
@Override
public int doEndTag() throws JspException {
try {
Properties ps = (Properties) this.pageContext.getAttribute("ps",
PageContext.APPLICATION_SCOPE);
String message = ps.getProperty(key);
this.pageContext.getOut().println( message+"\n");
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;
}
}
index.jsp代码如下
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@taglib uri="/MyTag3" prefix ="pf" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<pf:message key="name"/>
<pf:message key="love"/>
<pf:message key="interest"/>
</body>
</html>
当运行index.jsp时,当查找Jsp常用指令的taglib时,会指定页面中使用的标签库以及自定义标签的前缀。与tag.tld 文件对照。一定会处理标签类MyTag3。当在index.jsp body中使用自定义标签时,会在相应的MyTag3种调用doStartTag()、doEndTag()中一个或两个。传入一个属性key,通过tag,tld 中指定attribute元素即可。(如下为tag.tld主要代码)
<tag>
<name>message</name>
<tag-class>com.my.tag.MyTag3</tag-class>
<body-content>empty</body-content>
<attribute>
<name>key</name>
<required>true</required>
</attribute>
</tag>
key值就是从配置文件中传入的,比如love,它会赋值给MyTag3.java,r然后ps.getProperty(key)就得到了。
- 自定义标签入门例子流程总结
- jsp自定义标签入门例子
- JSP自定义标签例子
- 自定义标签例子
- jsp自定义标签例子
- 如何编写自定义标签?具体流程与分析(自定义标签快速入门)
- 自定义标签流程
- 自定义标签流程
- JavaWeb总结二十三、jsp自定义标签开发入门
- javaweb学习总结23:jsp自定义标签开发入门
- 自定义Annotation入门例子
- 自定义标签入门
- 自定义标签开发入门
- 自定义jsp标签入门
- 自定义标签入门
- 自定义标签入门
- JSP自定义标签入门
- 自定义标签入门
- 入门HTML之图片的基本操作
- ACM-2000-ASKII排序
- FFmpeg 入门使用
- erlang进程监控:link和monitor
- Boost tokenizer 一种简单的批分字符串的办法
- 自定义标签入门例子流程总结
- 黑马程序员_java高级篇代理Day14(上)
- C/C++定义全局变量/常量几种方法的区别
- cocos2d-x游戏开发系列教程-坦克大战游戏启动界面的编写
- 网络基础
- linux下系统调用的实现
- Rational Rose 2003 下载、破解及安装方法(图文)
- 入门HTML之图片对齐方式,图像超链接,图像的映射
- ssh中dao、service和action使用心得