一,tag类

1.1 TagMy标签类,格式化当前日期并输出  
package com.dkt.tag;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport; /*
* doStartTag() SKIP_BODY执行doEndTag()跳过标签体
* EVAL_BODY_INCLUDE 执行标签体
* doAfterBody() EVAL_BODY_AGAIN 循环执行标签体
* SKIP_BODY 不执行标签体,执行doEndTag()
* doEndTag() SKIP_PAGE 不执行jsp剩余的页面
* EVAL_PAGE 执行剩余的页面
*
*/
public class TagMy extends TagSupport{
private String format;
public int doStartTag() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
String nowdate = simpleDateFormat.format(new Date());
JspWriter out = pageContext.getOut();
try {
out.print("Hello 世界!!");
out.print(nowdate);
} catch (IOException e) {
e.printStackTrace();
}
return super.SKIP_BODY;
}
public int doAfterBody() throws JspException {
return super.doAfterBody();
}
public int doEndTag() throws JspException {
return super.doEndTag();
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
} } 
1.2 ForTag 标签类,自定义<c:foreach>标签,循环输出 
package com.dkt.tag;

import javax.servlet.jsp.tagext.TagSupport;

public class FroTag  extends TagSupport{
private int start;
private int end;
private String var; public int doStartTag(){
System.out.println("doStartTag()"+start);
if(start<=end){
pageContext.setAttribute(var, start);
start++;
return super.EVAL_BODY_INCLUDE;
}else {
return super.SKIP_BODY;
}
//执行doAfterBody()
}
public int doAfterBody() {
if(start<=end){
pageContext.setAttribute(var, start);
start++;
System.out.println("doAfterBody()"+start);
return super.EVAL_BODY_AGAIN;
}else {
return super.SKIP_BODY;
}
}
public int doEndTag(){
System.out.println("doEndTag()"+start);
return super.EVAL_PAGE;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
}
1.3 IteratorTag标签类,迭代集合,全部循环输出显示在页面  
package com.dkt.tag;

import java.util.ArrayList;
import java.util.Iterator; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport; public class IteratorTag extends TagSupport{
private String scope;
private String var;
private ArrayList list = null; Iterator it = null;
public int doStartTag() {
/*if (("page").equals(scope)) {
list = (ArrayList)pageContext.getAttribute(list,pageContext.PAGE_SCOPE);
}else if(("request").equals(scope)){
list = (ArrayList)pageContext.getAttribute(list,pageContext.REQUEST_SCOPE);
}else if(("session").equals(scope)){
list = (ArrayList)pageContext.getAttribute(list,pageContext.SESSION_SCOPE);
}else if(("application").equals(scope)){
list = (ArrayList)pageContext.getAttribute(list,pageContext.APPLICATION_SCOPE);
}*/
it = list.iterator();
return super.EVAL_BODY_INCLUDE;
} public int doAfterBody() {
if (it.hasNext()) {
Object next = it.next();
pageContext.setAttribute(var, next);
return super.EVAL_BODY_AGAIN;
}else {
return super.SKIP_BODY;
}
}
public int doEndTag() throws JspException {
return super.doEndTag();
} public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
public ArrayList getList() {
return list;
}
public void setList(ArrayList list) {
this.list = list;
}
}
1.4 QueryTag 标签类,根据表名,查询数据库,并由表格输出到页面  
package com.dkt.tag;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport; import com.dkt.util.DButil; public class QueryTag extends TagSupport{ private String tableName;
public int doStartTag() {
DButil dButil = new DButil();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
conn = dButil.createConn();
String sql = "select * from "+tableName;
try {
ps = conn.prepareStatement(sql);
ResultSetMetaData rsmd = ps.getMetaData();//得到表结构
rs = ps.executeQuery();
JspWriter out = pageContext.getOut();
out.print("<table border='1px' width='60%' align='center'><tr>");
for (int i = 0; i < rsmd.getColumnCount(); i++) {//字段数量
out.print("<th>"+rsmd.getColumnName(i+1)+"</th>");//字段名字
}
out.print("</tr>");
while(rs.next()){
out.print("<tr>");
for (int i = 0; i < rsmd.getColumnCount(); i++) {
out.print("<td>"+rs.getObject(i+1)+"</td>");
}
out.print("</tr>");
} out.print("</table>");
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return super.SKIP_BODY;
}
public int doAfterBody() throws JspException {
return super.doAfterBody();
}
public int doEndTag() throws JspException {
return super.doEndTag();
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
} }

二,hellotag.tld

文件 hellotag.tld 放在WEB-INF目录下,与web.xml同级

<?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>1.2</jsp-version>
<short-name>hello</short-name>
<uri>hello</uri>
<!-- TagMy自定义标签类 -->
<tag>
<name>hello</name> <!-- 标签名 -->
<tag-class>com.dkt.tag.TagMy</tag-class>
<body-content>empty</body-content> <!-- 是否有标签体 jsp/empty -->
<!-- 有属性的标签定义 -->
<attribute>
<name>format</name>
<required>true</required><!-- 表示标签是否必须 -->
<rtexprvalue>true</rtexprvalue><!-- 表示是否可以使用表达式 el/jsp -->
</attribute>
</tag>
<!-- FroTag -->
<tag>
<name>formy</name>
<tag-class>com.dkt.tag.FroTag</tag-class>
<body-content>jsp</body-content>
<attribute>
<name>start</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>end</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<!-- IteraterTag -->
<tag>
<name>iteratormy</name>
<tag-class>com.dkt.tag.IteratorTag</tag-class>
<body-content>jsp</body-content>
<attribute>
<name>list</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<!-- 查询数据库的表并输出 -->
<tag>
<name>query</name>
<tag-class>com.dkt.tag.QueryTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>tableName</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

 三,jsp 

index.jsp  开启服务器,直接访问项目下的index.jsp页面即可显示自定义标签

在jsp页面导入自定义标签

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.dkt.entity.UserInfo"%>
<%@ taglib uri="hello" prefix="hello" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body> <hello:hello format="yyyy-MM-dd HH:mm:ss a"/><br/>
<hr/>
formy:<hello:formy end="10" var="item1" start="1">
${item1 }----
</hello:formy>
<hr/>
iterator:<%
ArrayList list = new ArrayList();
list.add(new UserInfo(0,"小白","123456","",""));
list.add(new UserInfo(1,"小白111","353456","",""));
list.add(new UserInfo(2,"小白222","532456","",""));
list.add(new UserInfo(3,"小白333","532356","",""));
list.add(new UserInfo(4,"小白444","123536","","")); request.setAttribute("list",list);
%>
<hello:iteratormy var="item2" scope="request" list="${list}">
${item2.name}+++${item2.password }<br/>
</hello:iteratormy>
<hr/> <hello:query tableName="goods_table2"/>
<hr> </body>
</html>

四,web.xml

<?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"> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

java:tag 自定义标签应用的更多相关文章

  1. 杂项-Java:自定义标签

    ylbtech-杂项-Java:自定义标签 1.返回顶部 1. 一般我们说自定义标签是指JSP自定义标签.自定义标签在功能上逻辑上与javaBean 类似,都封装Java 代码.自定义标签是可重用的组 ...

  2. java JSP自定义标签

    来至: http://blog.csdn.net/jiangwei0910410003/article/details/23915373 http://blog.csdn.net/jiangwei09 ...

  3. Java Web 自定义标签

    1.   自定义标签 由于在JSP页面中直接嵌入Java代码会导致页面开起来非常混乱,不方便和美工等配合工作,为此,JSP提供了自定义标签技术,可以代替直接嵌入Java代码的方式提供动态逻辑,但自定义 ...

  4. Java jsp 自定义标签

    1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫 ...

  5. 权限管理(java+struts2(自定义标签)实现)--------->全代码演示

    地址:http://blog.chinaunix.net/uid-24343152-id-3673026.html 最近由于项目不是很紧所以总结了之前做了n遍的权限管理功能.以便之后系统copy之用. ...

  6. jsp tld 的tag 自定义标签扩展

    引入方式 <%@ taglib prefix="bgt" uri="/WEB-INF/tlds/bgt.tld" %> 写法示例如下: <?x ...

  7. Java Spring Boot VS .NetCore (十一)自定义标签 Java Tag Freemarker VS .NetCore Tag TagHelper

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  8. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

  9. jsp如何自定义tag的标签库?

    虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的 ...

随机推荐

  1. ng的点滴记录

    1,directive http://damoqiongqiu.iteye.com/blog/1917971/ 2,constructor  https://segmentfault.com/q/10 ...

  2. mysql enterprise backup入门使用

    **************************************************************--1.全备******************************** ...

  3. absolute

    在需要用到小图标时,可以使用position:absolute,它具有消除float和位置不变特性.使用absolute可以浮现在同级元素的上方.用margin进行精确定位即可,也不必使用top,le ...

  4. CentOS7搭建FastDFS V5.11分布式文件系统-第三篇

    1.测试 前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解.FastDFS的基础模块都搭好了,现在开始测试下载. 1.1 配置客户端 同样的,需要修改客户端的配置文件: /etc/fdf ...

  5. python3 内置函数详解

    内置函数详解 abs(x) 返回数字的绝对值,参数可以是整数或浮点数,如果参数是复数,则返回其大小. # 如果参数是复数,则返回其大小. >>> abs(-25) 25 >&g ...

  6. 在操作Centos系统时经常出现You have new mail in /var/spool/mail/root提示怎么回事?

    例如,在命令窗口中输入date查看时间,下面会出现一行提示 实际上,该功能为Linux操作系统核对系统资源状态并汇总,默认发送到root用户的/var/spool/mail/root目录,并在标准输出 ...

  7. [WiX]Component Rules 101

    原文:http://robmensching.com/blog/posts/2003/10/18/component-rules-101 I've been debating with myself ...

  8. jboss8+EJB3+MDB Queue

    1)在使用jboss8即WildFly进行MDB的试验时首先要在jboss8中配置jms 队列. 我使用的是修改配置文件的方式配置Jms Queue队列. 进入jboss8 安装目录的standalo ...

  9. CSS_Spirte实现原理 分类: HTML+CSS 2015-04-28 22:58 531人阅读 评论(0) 收藏

    CSS Spirte就是所谓的把很多的小图标合并成一张大的图片,然后使用CSS的background-position属性,来动态的定位自己需要图标的位置.这样做的目的主要是减少HTTP请求,加快网页 ...

  10. Android_Universal-Image-Load使用

    一,快速使用(确保ImageLoader只初始化一次,这样图片缓存会更加优秀.) 场景:为ImageView设置一张指定Uri的图片. 1,导包,配置联网,读写SD卡权限. 2,初始化: ImageL ...