應用,一定要應用

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

          2006年12月14日 #

          Sybase Powerdesigner具有強大的模板和腳本功能,可以自定義和擴展生成數據庫時的DDL。
          在主界面菜單中選擇Tools-->Resources-->DBMS.
          再彈出的菜單中選擇需要擴展的數據庫類型。
          點擊左上角Property圖標,彈出模板設置窗口。
          在窗口中設置相應的Sql生成模板。
          posted @ 2008-06-21 11:22 flyffa 閱讀(931) | 評論 (0)編輯 收藏

          1.1. 繼承

          今天遇到了需要在 javascript 中繼承的問題:

          查了一些帖子,自己又寫了幾個例子測試了一下,總結如下:

          1.1.1. ??? 三種方法

          js 中實現繼承有三種方法:

          假設父類為 Parent, 子類為 Child,

          ?

          第一種,子類強制調用父類構造

          function Child(){

          ?????? Parent.call(this);

          }

          ?

          第二種,子類間接調用父類構造

          function Child(){

          ?????? this.base = Parent;

          ?????? this.base();

          }

          ?

          第三種:設置原型

          function Child(){}

          Child.prototype = new Parent();

          這種方式雖然不夠直觀,卻應該是最有效率的方式。

          ?

          1.1.2. ??? 總結:

          其實 js 本身是沒有什么繼承之類的概念的,只是為了使用利用 js 的一些特性而加的。

          ?

          js 的原型方式 prototype, 使得許多的工作變得容易。

          ?

          一個 function 對象和根據 function 構造出來的對象是不同的。

          ?

          一個 function 對象的原型其實就是一個根據 function 對象構建出來的對象。

          記住:這個對象可與 new 出來的對象不一樣。在 function 內部的代碼并不會被執行,如:

          this.funcName = function() 這樣的代碼。而 new 出來的對象則不然,他具有執行后的對象特性。

          ?

          function 的局部變量相當于 class 里的私有變量,無法在子類中獲取和操作。但 this. 的部分是可以的。

          ?

          1.1.3. ??? 猜測和假想

          (這是我推斷的,沒有任何的根據,當然也是可以測試的):

          當一個 Child new 時,第一二種方法中, js 執行器

          1 、先分配一個空間,(相當于 this = new Object() (msdn 中有具體的描述 )

          2 、拷貝原型:

          3 、執行構造:也就是 Child.call(this) (相當于 child(), 此時 this 對象有值)( msdn 中有描述)

          然后執行 Parent(); 這個時候 parent 的構造函數執行以下幾步:

          1 、將 parent prototype 拷貝到 object 區域,這時覆蓋了前面的區域 ( 好像測試證明 parent 的原型并不會被拷貝,此步不會被執行 )

          2 、對這個區域執行初始化,也就是正常的 function 調用的過程。(相當于 Parent(),this 變量有值)

          ?

          而普通的 function 調用應該是這個樣子:由于沒有 new 操作符,所以沒有為其分配當前的 this( 也沒有空間 ),

          this 被放到了 window 對象上。但是 new 的時候顯然不是這樣。

          ?

          obj.func() 的調用和 func() 調用是完全不一樣的, obj.func this 對象是 obj 對象,而 func() 調用 this 對象是 window 對象,這個應該和 jvm 中靜態方法和類實例方法調用的區別的原理一樣。

          ?

          1.2. 方法重載

          在實現了對象繼承之后,我開始面臨到第二個問題,重載。

          1.1.4. ??? 兩種方法

          js 怎樣實現重載。

          1 、簡單的重載:

          在這種重載中,子類的方法無需調用父類的方法,直接在執行父類構造之后,再執行子類的重載方法,如 Parent toString() 方法,這時只需執行 this.toString = function(){....} 就可以了。

          ?

          2 、調用父類方法的重載:

          由于 js 實際運行時并沒有父類、子類兩個實例空間,所以 super.toString() 肯定是不行的,而在子類的 toString 方法中進行 this.toString() 調用只能引起內存溢出,其實這種也可以想辦法做到。

          ?

          this.super_toString = this.toString();

          this.toString=function(){

          ?????? ..............

          ?????? this.super_toString();

          ?????? ..............

          }

          posted @ 2006-12-28 14:39 flyffa 閱讀(1238) | 評論 (1)編輯 收藏

          基本方法:

          基本的方法,網上到處都是,在 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 @ 2006-12-14 15:10 flyffa 閱讀(2405) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 遵化市| 酉阳| 儋州市| 宝丰县| 崇仁县| 郸城县| 巫山县| 章丘市| 阜宁县| 锡林郭勒盟| 东港市| 仁布县| 顺昌县| 城步| 革吉县| 隆化县| 惠州市| 黄龙县| 浦东新区| 河池市| 漾濞| 灵丘县| 滁州市| 惠安县| 苍溪县| 河池市| 巧家县| 东兴市| 梁河县| 江北区| 阳谷县| 大悟县| 娄底市| 衡阳县| 孙吴县| 蛟河市| 马关县| 东丰县| 昭觉县| 庆元县| 麻江县|