<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里馬

    天馬行空

    jsp+javaBean

    1,什么是可重用組件:是指能夠完成某種特定的功能,并提供了一個或多個訪問接口的聚合模塊程序,可重復(fù)使用是它最大的特點。
      在java企業(yè)級開發(fā)中,最重要的兩類組件是javabean和EJB。
    javabean本質(zhì)就是一個java類,但是這個java類的組成必須符合一定的規(guī)則,這個規(guī)則也就是javabean規(guī)范,其中包括缺省的構(gòu)造方法,setXXX和getXXXde風(fēng)格來構(gòu)造屬性等。他可以很容易的被組合到程序中去,一般包括業(yè)務(wù)邏輯代碼和數(shù)據(jù)訪問代碼等。jsp在使用他的時候可以用普通的java腳本實例化這個類,像其他java對象一樣使用,也可以使用jsp提供的動態(tài)標(biāo)簽來訪問。
    EJB 相對于javabean來說是一個大得多的組件,他必須生存在符合javaee規(guī)范的應(yīng)用服務(wù)器中,它的定義和調(diào)用都要復(fù)雜的多,在實際的java開發(fā)中很小使用EJB組件。
    2,javabean規(guī)范:
    (1),它是一個公開類(public class);
    (2),他有一個公開的無參數(shù) 的構(gòu)造方法。
    (3),提供了公開的setXXX和getXXX方法來決定javabean的屬性,
    3,用jsp完成一種特定的功能時,有三種實現(xiàn)方式:
    (1),在html代碼中間夾雜java語言寫成的jsp腳本,功能邏輯就在java語言中完成。缺點是:代碼可讀性差,很難維護(hù)。
    (2),把功能邏輯包裝在一個javabean內(nèi),然后在jsp腳本中,用new關(guān)鍵字實例化這個javabean,在調(diào)用set和get方法來完成特定的功能,這種方式雖然維護(hù)比第一種好一些,但是可讀性仍然不好。
    (3),同樣先把功能邏輯包裝在一個javabean鐘,再利用jsp提供的動作標(biāo)簽來訪問javabean的屬性,這種方式比第二種耦合度進(jìn)一步降低了,是一種值得推薦的方式。
    4,jsp使用javabean的標(biāo)簽詳解:
      (1),定義javabean的動作標(biāo)簽<jsp:useBean>
            <jsp:useBean>標(biāo)簽用于在特定的范圍內(nèi)實例化或查找一個javabean,基本語法如下:
             <jsp:useBean id="唯一標(biāo)示名字"
                           scope="page|request|session|application";
                           type="父類型"
                            class="實現(xiàn)類">
          id:表示在特定范圍內(nèi)的唯一標(biāo)示的名字;
          scope:指定bean的存活范圍,有4種:page:默認(rèn)是page,標(biāo)示jsp的頁面范圍,如果是同一個請求的另外一個jsp也頁面就不見了。request:當(dāng)前這一次的請求范圍,包含多個jsp頁面;session:標(biāo)示會話范圍;application:標(biāo)示整個web應(yīng)用,與servlet上下文同義。
         class:javabean的實例類名,必須是完整類名。
         type:javabean的父類或者一實現(xiàn)接口。
     <jsp:useBean>動作標(biāo)簽的基本工作機制如下:
                (1),在指定范圍內(nèi)尋找是否已有名字為id屬性指定的對象。
                 (2),如果存在,且指定了type屬性,則用該type做一次強制類型轉(zhuǎn)換后再返回該對象的引用,如果沒用指定                     ,則直接返回該對象的引用。
                (3),如果不存在,則用class屬性指定的類實例化一個新的對象并返回,并將該對象保存到scope內(nèi)。
    (2),設(shè)置javabean屬性動作標(biāo)簽<jsp:setProperty>
            <jsp:setProperty>:是為javabean的可寫屬性賦值,它既可以放在<jsp:useBean>中間,也可以單獨使用,基本語法如下:
             <jsp:setProperty
                   id="與javabean的屬性同名"
                   property="可寫屬性名"
                    value="字面值"
                      params="請求參數(shù)的名字"/>
           name:bean的id
           property:可寫屬性名,如setAge(),屬性名為age,如果是*,則表示將所有的屬性一一與請求參數(shù)按名匹配賦值。
           value:為屬性復(fù)字面值,
            params:http請求的參數(shù)名。
    3,獲取javabean屬性動作標(biāo)簽<jsp:getProperty>
                  <jsp:getProperty>是獲取javabean的可讀屬性,它既可以放在<jsp:useBean>中間,也可以單獨使用,基本語法如下:           <jsp:getProperty
                           name="與javabean的id屬性值相同"
                           property="可讀屬性名">
    4,javaBean封裝數(shù)據(jù)庫操作的代碼如下:
        private static final String url="jdbc:mysql://localhost:3306/test";
         private static final String username="root";
          private static final String  password="123";
           private String table;
           private Object[] params;
           public Connection getCon(){
            Connection conn=null;
            try {
       Class.forName("com.mysql.jdbc.Driver");
       conn=DriverManager.getConnection(url, username, password);
      } catch (Exception e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      return conn;
           }
           public void close(Connection conn,Statement st,ResultSet rs){
            if(rs!=null){
             try {
        rs.close();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
            }
            if(st!=null){
             try {
        st.close();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
            }
            if(conn!=null){
             try {
        conn.close();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
            }
           }
     public String getTable() {
      return table;
     }
     public void setTable(String table) {
      this.table = table;
     }
     public Object[] getParams() {
      return params;
     }
     public void setParams(Object[] params) {
      this.params = params;
     }
    5,javaBean封裝添加數(shù)據(jù)操作:
         public boolean getInsertData(){
      //Æ´½ÓsqlÓï¾ä
      String sql="insert into "+table+" values(";
      for (int i = 0; i <params.length; i++) {
       sql+="?";
       if(i!=params.length-1){
        sql+=",";
       }
      }
      sql+=")";
      boolean rst=false;//¶¨Òå²Ù×÷½á¹û
      Connection conn=null;//¶¨ÒåÁ¬½Ó¶ÔÏó
      PreparedStatement pst=null;//¶¨Òå»á»°¶ÔÏó
      
      try {
       conn=this.getCon();//»ñÈ¡Êý¾Ý¿âÁ¬½Ó
       conn.setAutoCommit(false);//¹Ø±Õ×Ô¶¯Ìá½»
       pst=conn.prepareStatement(sql);//´´½¨»á»°
       //Ñ­»·ÉèÖòÎÊý
       for (int i = 0; i < params.length; i++) {
        pst.setObject(i+1,params[i]);
       }
       int num=pst.executeUpdate();//Ö´ÐÐsqlÓï¾ä
       conn.commit();//Ìá½»ÊÂÎñ
       //Èç¹ûÖ´Ðнá¹û´óÓÚ0 £¬´ú±íÖ´Ðгɹ¦
       if(num>0){
        rst=true;
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       if(conn!=null){
        try {
         conn.rollback();//»Ø¹öÊÂÎñ
        } catch (SQLException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
        }
       }
       e.printStackTrace();
      }finally{
       close(conn,pst,null);//¹Ø±ÕÁ¬½Ó
      }
      return rst;
     }
    6,javabean封裝刪除數(shù)據(jù)操作:
    public boolean getDeleteData(){
      String sql="delete from "+table+" where "+params[0]+" =?";
      boolean rst=false;
      Connection conn=null;
      PreparedStatement ps=null;
     
      try {
       conn=this.getCon();
       conn.setAutoCommit(false);
       ps=conn.prepareStatement(sql);
       ps.setObject(1,params[1]);
       int num=ps.executeUpdate();
       conn.commit();
       if(num>0){
        rst=true;
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }finally{
       close(conn,ps,null);
      }
      return true;
     }   
    7,javabean封裝修改數(shù)據(jù)操作:
    public boolean getModifyData(){
      String sql="update "+table+" set "+params[0]+" =? where "+params[2]+"=?";
      boolean rst=false;
      Connection conn=null;
      PreparedStatement ps=null;
      
      try {
       conn=this.getCon();
       conn.setAutoCommit(false);
       ps=conn.prepareStatement(sql);
       ps.setObject(1,params[1]);
       ps.setObject(2,params[3]);
       int num=ps.executeUpdate();
       conn.commit();
       if(num>0){
        rst=true;
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }finally{
       close(conn,ps,null);
      }
      return rst;
     }
    8,javabean封裝查詢數(shù)據(jù)操作:
    private Connection conn=null;
     private PreparedStatement ps=null;
     private ResultSet rs=null;
     public void setQuery(String sql){
      
      try {
       conn=this.getCon();
       ps=conn.prepareStatement(sql);
       rs=ps.executeQuery();
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
     public List getList(){
      List list=new ArrayList();
      try {
       while(rs.next()){
        String str="";
        for (int i = 0; i <params.length; i++) {
         str +=rs.getObject(params[i].toString());
         if(i!=params.length){
          str +=",";
         }
         list.add(str);
        }
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } finally{
       this.close(conn,ps, rs);
      }
      return list;
     }
    9,分頁技術(shù):邏輯分頁和物理分頁
          邏輯分頁:查詢sql語句不變,只不過通過java代碼從邏輯上控制結(jié)果集光標(biāo)的位置,從而實現(xiàn)分頁;
         物理分頁:改變sql語句,在數(shù)據(jù)庫查詢的時候只需取出需要的結(jié)果集,但是各個數(shù)據(jù)庫控制結(jié)果集的sql語句不一樣,;mysql:limit,orcale:rownum
       兩種分頁技術(shù)各有優(yōu)缺點:邏輯分頁效果低,但是程序容易控制,但不能跨數(shù)據(jù)庫。
    10,邏輯分頁:邏輯分頁的關(guān)鍵點在于根據(jù)當(dāng)前的節(jié)點去定位結(jié)果集的下標(biāo)位置,把下標(biāo)定位好以后,就知道它是否有下一頁和上一頁信息等。
    實現(xiàn)邏輯分頁的步驟:(1),確定每頁的最大記錄數(shù)。(2),查詢總共記錄數(shù)。(3),根據(jù)總記錄數(shù)和每頁最大記錄數(shù)確定最大頁碼。(4)查詢結(jié)果集。(5),根據(jù)每頁最大記錄數(shù)和當(dāng)前頁碼對結(jié)果集的下表進(jìn)行定位。(6),不超過最大記錄數(shù)的循環(huán)打印結(jié)果集。
    11,物理分頁的實現(xiàn)思想還是需要確定每頁的最大記錄數(shù)、當(dāng)前頁碼、最大頁碼、總記錄數(shù)的信息,但是它把結(jié)果集下標(biāo)定位交個數(shù)據(jù)庫來完成了,開發(fā)者需要做的就是把sql寫好。
       對于mysql數(shù)據(jù)庫,需要開發(fā)者熟悉他的limit語句,limit語句需要追加到查詢語句的后面,告訴sql只返回規(guī)定行數(shù)的記錄,基本語法如下:
           limit n #返回前 n行數(shù)據(jù)
          limit n,m #返回從n+1行開始,最多m行的數(shù)據(jù)。

    posted on 2012-05-22 12:13 Mr Lee 閱讀(888) 評論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章檔案

    (hibernate)http://www.tkk7.com/dyllove98/archive/2012/05/12/377959.html

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲Aⅴ无码专区在线观看q| 亚洲精品天堂成人片?V在线播放| 亚洲熟妇少妇任你躁在线观看| 久99久精品免费视频热77| 亚洲乱码一区二区三区在线观看| 中文字幕版免费电影网站| 自拍偷自拍亚洲精品情侣| 国产一级一毛免费黄片| 国产亚洲福利精品一区| 99re在线视频免费观看| 亚洲一区免费在线观看| 在线免费一区二区| 十八禁的黄污污免费网站| 免费观看无遮挡www的小视频| 亚洲视频国产精品| 拍拍拍又黄又爽无挡视频免费| 久久久久久亚洲av无码蜜芽| 无码专区一va亚洲v专区在线| 一道本在线免费视频| 久久久久久亚洲av成人无码国产| 99久在线国内在线播放免费观看| 精品日韩99亚洲的在线发布| 国产成人免费片在线观看| 男女一边桶一边摸一边脱视频免费 | 亚洲国产一区二区视频网站| 精品一区二区三区免费观看| 久久精品亚洲一区二区| 在线观看免费人成视频色| 午夜亚洲国产精品福利| 亚洲VA成无码人在线观看天堂| 精品国产免费人成电影在线观看| 亚洲熟妇丰满xxxxx| 国产日韩亚洲大尺度高清| 久久午夜免费视频| 国产高潮久久免费观看| 亚洲视频中文字幕在线| 亚洲Av无码国产情品久久| 鲁大师在线影院免费观看| 真正全免费视频a毛片| 久久亚洲中文字幕精品有坂深雪| 国产午夜免费福利红片|