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

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

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

    posts - 14,  comments - 8,  trackbacks - 0
      2008年4月21日
     

    1、test.html  測試頁
     <html>
     <head>
       <title>測試頁面</title>
       <style>
         .list {
           border-top:1 solid #8A2BE2;
           border-left:1 solid #8A2BE2;
           border-right:1 solid #8A2BE2;
         }
         .list td {
           border-bottom: 1 solid #8A2BE2;
         }
       </style>
       <script>
          function $(el) {
            return document.getElementById(el);
          }
          function showWin(param) {
            window.showModalDialog("dailog.htm", param, "dialogWidth:" +param.width +"px;dialogHeight:"+param.height+"px;center:yes;help:no;scroll:no;status:no;resizable:no");
          }
         
          function TB(tbid) {
            this.tb = typeof(tbid) == "string"? $(tbid): tbid;
            this.getValue = function(rowIndex, cellIndex){
              var trs = this.tb.rows[rowIndex];
              var _td = trs.cells[cellIndex];
              return _td.innerText;
            }
            this.setValue = function(rowIndex, cellIndex, value) {
              var _tr = this.tb.rows[rowIndex];
              var _td = _tr.cells[cellIndex];
              _td.innerText = value;
            }
           
            /********獲取行索引********/
            this.findRowIndex = function(eventSrc) {
              var _tr = eventSrc; //eventSrc事件源,必須在TD里獲事件源是TD或TR本身
              while(_tr.tagName != "TR") {
                _tr =  _tr.parentNode;
              }
              var trs = this.tb.rows;
              for(var i = 0; i < trs.length; i++){
                if(_tr == trs[i]) return i;
              }
            }
          }
              
          function edit() {
            var tb = new TB("data");
            rIndex = tb.findRowIndex(event.srcElement);
            $("updateRowIndex").value = rIndex;
            $("userName").value = tb.getValue(rIndex, 1); //獲得姓名
            $("sex").value = tb.getValue(rIndex, 2); //獲得性別
            $("age").value = tb.getValue(rIndex, 3); //獲得年齡
             showWin({title:"修改用戶信息", width:390, height:230, _div:"openWin",parent:window});
          }
         
          function saveAndUpdateView(){
            var updateRowIndex = $("updateRowIndex").value;
            var tb = new TB($f("data")); //$f()在dailog.html定義,獲到的table是父窗口中的table
            tb.setValue(updateRowIndex, 1, $("userName").value);
            tb.setValue(updateRowIndex, 2, $("sex").value);
            tb.setValue(updateRowIndex, 3, $("age").value);
            close();
          }
       </script>
      
     </head>
     <body>
      <p style="margin-top:60px">
       <center>
         <table id="data" class="list" width="460px">
           <tr>
             <td>編號</td>
             <td>用戶名</td>
             <td>性別</td>
             <td>年齡</td>
             <td>操作</td>
           </tr>
           <tr>
             <td>1</td>
             <td>李永勝</td>
             <td>男</td>
             <td>27</td>
             <td><span style="background:#FAEBD7;cursor:hand" onclick="edit();">&nbsp;修改&nbsp;</span></td>
           </tr>
            <tr>
             <td>2</td>
             <td>林兄</td>
             <td>男</td>
             <td>27</td>
             <td><span style="background:#FAEBD7;cursor:hand" onclick="edit();">&nbsp;修改&nbsp;</span></td>
           </tr>
            <tr>
             <td>3</td>
             <td>葉兄</td>
             <td>男</td>
             <td>23</td>
             <td><span style="background:#FAEBD7;cursor:hand" onclick="edit();">&nbsp;修改&nbsp;</span></td>
           </tr>
         </table>
       </center>
      </p>
     
      <!---彈出窗口顯示的內容---->
      <div id="openWin" style="display:none;">
        <form>
          <fieldSet>
            <legend>修改用戶</legend>
            <table>
              <tr>
                <td>用戶名</td><td><input type="text" id="userName"/></td>
              </tr>
              <tr>
                <td>性別</td><td><input type="text" id="sex"/></td>
              </tr>
              <tr>
                <td>年齡</td><td><input type="text" id="age"/></td>
              </tr>
            </table>
          </fieldSet>
          <input type="hidden" id="updateRowIndex"/>
        </form>
        <span style="background:#FAEBD7;cursor:hand" onclick="saveAndUpdateView();">&nbsp;修改&nbsp;</span>
      </div>
     </body>
    </html>

    2、dailog.html 窗口原型

    <html>
     <head>
       <script>
         var param = window.dialogArguments; //傳過來的模式對話框窗口參數
         document.title = param.title; //窗口標題,必須在窗口創建前實現s
        
       /********將父窗口的js加載進來********/
         var scripts = param.parent.document.scripts;
         var _head = document.getElementsByTagName("head")[0];
         for(var n = 0; n < scripts.length; n++) {
           if(scripts[n].src) {
             var _script = newEl("script");
             _script.src = scripts[n].src;
             bind(_head, _script);
           }else{//加載直接在html文檔中寫的script
             var _script = newEl("script");
             _script.text = scripts[n].text;
              bind(_head, _script);
           }
         }
        
         /*******根據ID獲得父窗口的元素*********/
         function $f(el) {
           return param.parent.document.getElementById(el);
         }
       
        /***********創建一個HTML元素*******/
         function newEl(tagName) {
           return document.createElement(tagName);
         }
         /***********追加元素***************/
         function bind(ower, child) {
           ower.appendChild(child);
         }
         /*******在瀏覽器完成對象的裝載后立即觸發*********/
         window.onload = function() {
           var winDiv;
           if(typeof(param._div) == "string") {
             winDiv = param.parent.document.getElementById(param._div); //父窗口window對象,因為param._div對象在父窗口
           }else{//直接傳對象過來
             winDiv = param._div;
           }
           $("mainDiv").innerHTML = winDiv.innerHTML; //將DIV內容在彈出窗口中渲染
        }
       </script>
     </head>
     <body>
     <center>
      <div id="mainDiv" style="margin-top:20px;width:90%"></div>
     </center>
     </body>
    </html>
    posted @ 2008-05-05 10:43 虎嘯龍吟 閱讀(1911) | 評論 (0)編輯 收藏
    轉自http://www.tkk7.com/flyffa/archive/2006/12/14/87722.html

    基本方法:

    基本的方法,網上到處都是,在 java 中就是在 web.xml 注冊一個 Listener ,如下:

    <listener>

        <listener-class>xp.web.SessionCounter</listener-class>

    </listener>

    SessionCounter.java 實現 javax.servlet.http.HttpSessionListener 接口,分別在 sessionCreated 方法和 sessionDestroyed 方法中處理 session 數目。

     

    這樣的方法有一定的問題:

    1 、對于真正從網頁訪問的和搜索引擎的 spider 無法區分。

    2 、當 Tomcat 重啟時,加載了上次持久化的 session 時,無法準確計算在線數。

     

    第二個問題我們可以不予考慮,這是 tomcat 容器實現不標準的問題,我們要解決的是的第一個問題,如何知道你的訪問的是真實的。

     

    js 繞過搜索引擎

    做過 pv 統計的都知道,可以用 script 的方式得到你真實的 pageView 數目,我們現在要做的就是這樣的一件事情,我們在所有的頁面都加入一段話:

    <script type="text/javascript">

    document.write ("<iframe src='/sessionCountServlet' width=0 height=0 frameborder=no border=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=no></iframe>");

    </script>

    然后我們寫上一個 servlet 來記錄這些真正的訪問者。

    import java.io.*;

     

    import javax.servlet.*;

    import javax.servlet.http.*;

    public class SessionCounterServlet extends HttpServlet {

        public SessionCounterServlet() {

            super();

        }

     

        public void doGet(HttpServletRequest request,

                          HttpServletResponse response) throws IOException,

                ServletException {

     

            process(request, response);

     

        }

     

        public void doPost(HttpServletRequest request,

                           HttpServletResponse response) throws IOException,

                ServletException {

     

            process(request, response);

     

        }

     

        public void process(HttpServletRequest request,

                            HttpServletResponse response) throws IOException,

                ServletException {

            SessionCounter.put(request.getSession().getId());

    }

    }

     

    我們可以看到這個 servlet 只是做了一件事情,在 process 里面做了 SessionCounter.put(request.getSession().getId()); 這個動作。

    我們來看看我們的 SessionCounter 做了些什么:

    import javax.servlet.http.*;

    import java.util.Hashtable;

     

    public class SessionCounter implements HttpSessionListener {

        public SessionCounter() {

        }

     

        public static Hashtable m_real = new Hashtable();

     

        private static long count = 0;

     

        public void sessionCreated(HttpSessionEvent e) {

            count++;

        }

     

        public void sessionDestroyed(HttpSessionEvent e) {

            if (count > 0) {

                count--;

            }

            m_real.remove(e.getSession().getId());

        }

     

        public static long getSessionCount() {

            return count;

        }

     

        public static void put(String sessionId){

            m_real.put(sessionId,"1");

        }

     

        public static int getRealCount(){

            return m_real.size();

        }

    }

    我們記錄了一個靜態的 hash 表來記錄激活狀態的 sessionid ,并在 session 銷毀的時候將這個 sessionid 置為空。

    怎么把 servlet 配置到 web 應用中我就不羅唆了。

    posted @ 2008-04-21 11:37 虎嘯龍吟 閱讀(303) | 評論 (0)編輯 收藏

    這部分的內容基本與Hibernate一致.JPA同樣支持3種類型的繼承形式:

    1.Single Table Strategy ,單表策略,一張表包含基類與子類的所有數據,很多情況下都是采用這樣的冗余設計,通過一個discriminator來區分

    2.Table Per Class Strategy ,每個子類對應一張表,每張表都擁有基類的屬性

    3.Join Strategy ,仍然是每個子類對應一張表,但此表中不包含基類的屬性,僅僅是此子類的擴展屬性,共享基類的屬性

    以一個例子來說明3種情況:

    一.單表策略

    比如Pet作為基類,Cat和Dog繼承此類并擁有自己的擴展屬性,如:

    package com.denny_blue.ejb3.inheritance;

    import java.io.Serializable;

    import javax.persistence.DiscriminatorColumn;
    import javax.persistence.DiscriminatorType;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Inheritance;
    import javax.persistence.InheritanceType;

    @Entity
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name = "animal_type", discriminatorType = DiscriminatorType.STRING)
    public class Pet implements Serializable {
     private int id;

     private String name;

     private double weight;

     public Pet() {
     }

     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     public int getId() {
      return id;
     }

     public void setId(int id) {
      this.id = id;
     }

     public String getName() {
      return name;
     }

     public void setName(String name) {
      this.name = name;
     }

     public double getWeight() {
      return weight;
     }

     public void setWeight(double weight) {
      this.weight = weight;
     }

    }

    Pet類值的注意的就是通過@Inheritance(strategy = InheritanceType.SINGLE_TABLE)確定采用單表策略,通過@DiscriminatorColumn確定了標志值的字段和類型,我想熟悉hibernate的朋友對這些都應該很熟悉.然后是兩個子類:

    //Cat.java

    package com.denny_blue.ejb3.inheritance;

    import javax.persistence.DiscriminatorColumn;
    import javax.persistence.DiscriminatorType;
    import javax.persistence.DiscriminatorValue;
    import javax.persistence.Entity;
    import javax.persistence.Inheritance;
    import javax.persistence.InheritanceType;

    @Entity
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING)
    @DiscriminatorValue("cat")
    public class Cat extends Pet {
     private String HairBall;

     public String getHairBall() {
      return HairBall;
     }

     public void setHairBall(String hairBall) {
      HairBall = hairBall;
     }

    }

    //Dog.java

    package com.denny_blue.ejb3.inheritance;

    import javax.persistence.DiscriminatorColumn;
    import javax.persistence.DiscriminatorType;
    import javax.persistence.DiscriminatorValue;
    import javax.persistence.Entity;
    import javax.persistence.Inheritance;
    import javax.persistence.InheritanceType;

    @Entity
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(discriminatorType=DiscriminatorType.STRING)
    @DiscriminatorValue("dog")
    public class Dog extends Pet {
     private String trick;

     public String getTrick() {
      return trick;
     }

     public void setTrick(String trick) {
      this.trick = trick;
     }

    }

    兩個子類最值的關注的就是@DiscriminatorValue注釋,比如Cat的此值為cat,意味著當Cat類型的Entity存入數據庫時,JPA將自動把cat的值賦給animal_type字段,Dog的值則為dog,由此就可以在同一張表中區分開兩個不同的子類.

    二.Table per Class

    采用Table Per Class策略的話,每個子類都將單獨建表,并且都獨立擁有基類中的所有屬性,互相之間不共享,在我們的例子中所要進行的修改很小,像這樣:

    //基類

    @Entity
    @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
    public class Pet implements Serializable {
     private int id;

     private String name;

     private double weight;

    ........

    //子類:不需要任何設置

    @Entity
    public class Dog extends Pet {
     private String trick;

      .......

      .......

    三.Join策略

    每個子類同樣獨立建表,基類也獨立建表,只不過所有的子類的表中只有擴展屬性,他們共享基類的表,在我們的例子中修改下即可:

    //基類

    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    public class Pet implements Serializable {
     private int id;

     private String name;

     private double weight;

      ........

    //子類

    @Entity

    @Inheritance(strategy = InheritanceType.JOINED)
    public class Dog extends Pet {
     private String trick;

      .......

      .......

    這部分的內容實在沒什么新意,與hibernate完全一致.JAVA EE5向spring和hibernate借鑒了太多東西.
    {}

    posted @ 2008-04-21 11:20 虎嘯龍吟 閱讀(317) | 評論 (0)編輯 收藏
    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章檔案

    相冊

    友情鏈接

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99视频免费观看| 久久综合九色综合97免费下载| 2019中文字幕在线电影免费| 久久精品国产亚洲av麻| 精品熟女少妇aⅴ免费久久| 精品国产日韩亚洲一区| 国产精品视频全国免费观看| 亚洲精品成人片在线播放| 两个人看的www免费视频| 亚洲精品国产字幕久久不卡| 午夜网站在线观看免费完整高清观看| 亚洲国产成人一区二区精品区| 最近免费中文字幕MV在线视频3| 国产亚洲av片在线观看16女人| 免费国产99久久久香蕉| 亚洲黄色在线电影| 欧美最猛性xxxxx免费| 亚洲国产成人手机在线观看| 亚洲?v无码国产在丝袜线观看| 一级成人a免费视频| 亚洲国产精品无码成人片久久 | 精品亚洲国产成AV人片传媒| 30岁的女人韩剧免费观看| 久久精品国产亚洲AV忘忧草18| 日韩免费高清视频| 亚洲精品黄色视频在线观看免费资源 | 亚洲AV永久无码精品一福利| 亚洲精品成人片在线观看| 野花香在线视频免费观看大全 | 亚洲精品国产日韩无码AV永久免费网| 亚洲国产成人久久综合碰碰动漫3d| 皇色在线视频免费网站| 国产午夜亚洲精品不卡免下载| 久久精品国产亚洲沈樵| 成年人免费网站在线观看| 国产精品免费久久久久影院| 91亚洲精品自在在线观看| www亚洲精品少妇裸乳一区二区| 久久精品视频免费播放| 亚洲AV无码一区二区三区久久精品| 亚洲欧洲日产国码无码久久99|