細(xì)心!用心!耐心!

          吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學(xué)業(yè),五六點(diǎn)粗墨,七八筆買賣,九十道人情。

          BlogJava 聯(lián)系 聚合 管理
            1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks

          JSP自定義標(biāo)簽的另類體驗(yàn)

           

          jsp自定義標(biāo)簽的定義步驟:
          創(chuàng)建標(biāo)記處理器
          創(chuàng)建TLD文件
          編輯web.xml
          在JSP頁面中使用此標(biāo)簽
          在此我們主要討論和學(xué)習(xí)的不是如何開發(fā)自定義標(biāo)簽,所以具體的開發(fā)事例百度或google一下就可以找到,在此不再贅述。
          我們用到過自定義標(biāo)簽的人,也許最大的體會(huì)是他的復(fù)雜性,但是下面這種用法,卻讓我們對(duì)他的認(rèn)知有所改變(事例介紹采用struts版本)
          在一個(gè)web應(yīng)用中,將數(shù)據(jù)庫查詢結(jié)果集ResultSet rs保存至session或者reueest范圍內(nèi),再傳遞給jsp頁面來顯示。這本身是沒問題的,但是當(dāng)同時(shí)查詢的用戶非常多時(shí),服務(wù)器的壓力就非常大。如果我們使用自定義標(biāo)簽,將結(jié)果集返回到j(luò)sp頁面,情況就不一樣了。具體實(shí)現(xiàn)如下:
                                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
          ---------------------------------------------------------------
          添加以下內(nèi)容:
            <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,可以通過其他方法,實(shí)現(xiàn)這步!
                                     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> 
          這樣,在你的每一個(gè)jsp中,只要想輸出查詢結(jié)果,就只需要調(diào)用<app:result/>就可以了!
          以上代碼不一定完全正確,但其中的思想已經(jīng)非常清晰了!在大的項(xiàng)目中,這種模式非常被推崇!它體現(xiàn)了java 代碼重用的思想,并且也使結(jié)果集的相關(guān)操作不直接暴露與用戶,也實(shí)現(xiàn)了安全。

          posted on 2007-05-06 16:35 張金鵬 閱讀(110) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宿迁市| 崇左市| 容城县| 巨鹿县| 姚安县| 芜湖市| 水富县| 芦溪县| 株洲市| 都匀市| 油尖旺区| 麦盖提县| 赞皇县| 灌南县| 莲花县| 广饶县| 长沙县| 临安市| 福州市| 怀宁县| 双鸭山市| 博客| 永善县| 禹城市| 侯马市| 武定县| 响水县| 芮城县| 同仁县| 霍山县| 西乡县| 东辽县| 柘城县| 利津县| 陆川县| 正镶白旗| 当阳市| 筠连县| 盐源县| 浪卡子县| 宜兰县|