一,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. python学习笔记04-格式化输出

    使用占位符来进行格式化输出 %S %d %f Exit()  程序退出函数

  2. css实现响应式九宫格效果

    1. 首先看下九宫格的效果图: 2. html代码比较简单,如下: <div class="main"> <div class="box1"& ...

  3. C# 中out,ref,params参数的使用

    C#中有三个高级参数,分别是out,ref,params:   1.out参数 方法使用return 只能返回一个值(一个数值或一个指针值),out参数可以帮助我们在一个方法中返回多个值,不限类型. ...

  4. RHCE 学习结构

    本文内容为本站的 blog 链接 第一章   安装初体验 第二章   访问系统 2.1 基于图形化界面访问 2.2 基于文本访问 2.3 用户管理 第三章   文件系统 3.1  Linux 文件系统 ...

  5. MySQl中的\g和\G

    1. \g 在MySQL的sql语句后加上\g,效果等同于加上定界符,一般默认的定界符是分号; 2. \G 在MySQL的sql语句后加上\G,表示将查询结果进行按列打印,可以使每个字段打印到单独的行 ...

  6. Visual Studio 2015中使用gdb远程调试linux程序

    VS的debug功能非常强大,相比而言linux上的图形化调试一直不是很好用. 如果可以使用VS来调试linux程序,应该是一件比较愉快的事情. 这在2015中变得可能,因为从2015开始VS支持An ...

  7. Java虚拟机(三):JVM垃圾回收机制

    概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...

  8. j2ee高级开发技术课程第二周(web请求的整个过程、XML)

    博客非原创,只是收集整理了一下网上的一些文章 一.web请求的整个过程 1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括 ...

  9. MVC中分页的实现

    我在 (www.helpqy.com) 中使用了下面的分页技术. 分页可以采用troygoode提供的开源包,其开源网站主页为:https://github.com/TroyGoode/PagedLi ...

  10. js判断手机是否安装了某一款app,有则打开,没有去下载

    function openApp(){ if(navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) { var loadDateTime = new ...