当前位置: 首页 > 图文教程 > 网络编程 > JSP > JSP/Servlet/JSF:自定义标签

JSP
搭建Eclipse+MyEclipse开发环境
卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏!
一个jsp+AJAX评论系统
JSP 多个文件打包下载代码
JSP 动态树的实现
jsp 重复提交问题
J2ME/J2EE实现用户登录交互 实现代码
访问JSP文件或者Servlet文件时提示下载的解决方法
JSP EL表达式详细介绍
JSP 报表打印的一种简单解决方案
jsp 自定义标签实例
AJAX自学练习 无刷新从数据库后台取数据显示
AJAX 自学练习 请求与显示
AJAX 自学练习 无刷新提交并修改数据库数据并显示
jsp 文件上传浏览,支持ie6,ie7,ie8
JSP application(return String)用法详例
jsp form表单方法示例
JSP request(return String)用法详例
JSP forward用法分析实例代码分析
JSP JavaBean的setProperty属性

JSP/Servlet/JSF:自定义标签


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 51 ::
收藏到网摘: n/a

jsp自定义标签的定义步骤:

创建标记处理器
创建TLD文件
编辑web.xml
在JSP页面中使用此标签

在此我们主要讨论和学习的不是如何开发自定义标签,所以具体的开发事例百度或google一下就可以找到,在此不再赘述。

我们用到过自定义标签的人,也许最大的体会是他的复杂性,但是下面这种用法,却让我们对他的认知有所改变(事例介绍采用struts版本)

在一个web应用中,将数据库查询结果集ResultSet rs保存至session或者reueest范围内,再传递给jsp页面来显示。这本身是没问题的,但是当同时查询的用户非常多时,服务器的压力就非常大。如果我们使用自定义标签,将结果集返回到jsp页面,情况就不一样了。具体实现如下:

Datatag .java

以下为引用的内容:
-----------------------------------------------------------------
package getdata;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.sql.*;

public class Datatag extends TagSupport
{

    public int doStartTag()throws JspException
    {

        
        ResultSet rs=(ResultSet)this.pageContext.getSession().getAttribute("resultSet");
           try{
           JspWriter out=pageContext.popBody();
              while(rs.next())
              {
                  out.println("< tr>");
                  out.println("< form>");
                    out.println("< td align='center'> < input type='checkbox' name='checkbox' value='checkbox'> < /td>");
                      out.println("< td>"+ rs.getString("receiver") +"< /td>");
                      out.println("< td>< a href=showdatail.jsp>"+ rs.getString("title") +"< /a>< /td>");
                      out.println("< td>< a href=upload/"+rs.getString("annex")+"> "+ rs.getString("annex") +"< /a>< /td>");
                      out.println("< td>"+ rs.getString("date") +"< /td>");
               out.println("< /form>");
                  out.println("< /tr>");
              }
        }
           catch(Exception ex)
           {
                  ex.printStackTrace();
           }
           return SKIP_BODY;
    }
    public int doEndTag() throws JspException
    {
        return EVAL_PAGE;

    }
}

 data.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>1.1< /jsp-version>

    < tag>
        < name>result< /name>
        < tag-class>getdata.Datatag< /tag-class>
        < body-content>jsp< /body-content>
    < /tag>
< /taglib>

web.xml
---------------------------------------------------------------
添加以下内容:

以下为引用的内容:
  < taglib>
    < taglib-uri>/WEB-INF/data.tld< /taglib-uri>
    < taglib-location>/WEB-INF/data.tld< /taglib-location>
  < /taglib>

displayAction.do

以下为引用的内容:
------------------------------------------------------------------
    String strSql=new String("select * from yonghu");
    HttpSession session=httpServletRequest.getSession();
    session.setAttribute("strSql",strSql) ;
    return actionMapping.findForward("success") ;

如果不是用的struts,可以通过其他方法,实现这步!

display.jsp

以下为引用的内容:
-----------------------------------------------------------------
< %@ page contentType="text/html; charset=GBK" %>
< %@ taglib uri="/WEB-INF/data.tld" prefix="app" %>
< html>
< head>
< title>
display
< /title>
< /head>
< body bgcolor="#ffffff">
< app:result />
< /body>
< /html> 

这样,在你的每一个jsp中,只要想输出查询结果,就只需要调用< app:result/>就可以了!

以上代码不一定完全正确,但其中的思想已经非常清晰了!在大的项目中,这种模式非常被推崇!它体现了java 代码重用的思想,并且也使结果集的相关操作不直接暴露与用户,也实现了安全。