應(yīng)用,一定要應(yīng)用

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

          2006年10月12日 #

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

          1.1. 繼承

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

          查了一些帖子,自己又寫了幾個(gè)例子測(cè)試了一下,總結(jié)如下:

          1.1.1. ??? 三種方法

          js 中實(shí)現(xiàn)繼承有三種方法:

          假設(shè)父類為 Parent, 子類為 Child,

          ?

          第一種,子類強(qiáng)制調(diào)用父類構(gòu)造

          function Child(){

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

          }

          ?

          第二種,子類間接調(diào)用父類構(gòu)造

          function Child(){

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

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

          }

          ?

          第三種:設(shè)置原型

          function Child(){}

          Child.prototype = new Parent();

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

          ?

          1.1.2. ??? 總結(jié):

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

          ?

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

          ?

          一個(gè) function 對(duì)象和根據(jù) function 構(gòu)造出來的對(duì)象是不同的。

          ?

          一個(gè) function 對(duì)象的原型其實(shí)就是一個(gè)根據(jù) function 對(duì)象構(gòu)建出來的對(duì)象。

          記住:這個(gè)對(duì)象可與 new 出來的對(duì)象不一樣。在 function 內(nèi)部的代碼并不會(huì)被執(zhí)行,如:

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

          ?

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

          ?

          1.1.3. ??? 猜測(cè)和假想

          (這是我推斷的,沒有任何的根據(jù),當(dāng)然也是可以測(cè)試的):

          當(dāng)一個(gè) Child new 時(shí),第一二種方法中, js 執(zhí)行器

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

          2 、拷貝原型:

          3 、執(zhí)行構(gòu)造:也就是 Child.call(this) (相當(dāng)于 child(), 此時(shí) this 對(duì)象有值)( msdn 中有描述)

          然后執(zhí)行 Parent(); 這個(gè)時(shí)候 parent 的構(gòu)造函數(shù)執(zhí)行以下幾步:

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

          2 、對(duì)這個(gè)區(qū)域執(zhí)行初始化,也就是正常的 function 調(diào)用的過程。(相當(dāng)于 Parent(),this 變量有值)

          ?

          而普通的 function 調(diào)用應(yīng)該是這個(gè)樣子:由于沒有 new 操作符,所以沒有為其分配當(dāng)前的 this( 也沒有空間 ),

          this 被放到了 window 對(duì)象上。但是 new 的時(shí)候顯然不是這樣。

          ?

          obj.func() 的調(diào)用和 func() 調(diào)用是完全不一樣的, obj.func this 對(duì)象是 obj 對(duì)象,而 func() 調(diào)用 this 對(duì)象是 window 對(duì)象,這個(gè)應(yīng)該和 jvm 中靜態(tài)方法和類實(shí)例方法調(diào)用的區(qū)別的原理一樣。

          ?

          1.2. 方法重載

          在實(shí)現(xiàn)了對(duì)象繼承之后,我開始面臨到第二個(gè)問題,重載。

          1.1.4. ??? 兩種方法

          js 怎樣實(shí)現(xiàn)重載。

          1 、簡(jiǎn)單的重載:

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

          ?

          2 、調(diào)用父類方法的重載:

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

          ?

          this.super_toString = this.toString();

          this.toString=function(){

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

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

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

          }

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

          基本方法:

          基本的方法,網(wǎng)上到處都是,在 java 中就是在 web.xml 注冊(cè)一個(gè) Listener ,如下:

          <listener>

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

          </listener>

          SessionCounter.java 實(shí)現(xiàn) javax.servlet.http.HttpSessionListener 接口,分別在 sessionCreated 方法和 sessionDestroyed 方法中處理 session 數(shù)目。

          ?

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

          1 、對(duì)于真正從網(wǎng)頁訪問的和搜索引擎的 spider 無法區(qū)分。

          2 、當(dāng) Tomcat 重啟時(shí),加載了上次持久化的 session 時(shí),無法準(zhǔn)確計(jì)算在線數(shù)。

          ?

          第二個(gè)問題我們可以不予考慮,這是 tomcat 容器實(shí)現(xiàn)不標(biāo)準(zhǔn)的問題,我們要解決的是的第一個(gè)問題,如何知道你的訪問的是真實(shí)的。

          ?

          js 繞過搜索引擎

          做過 pv 統(tǒng)計(jì)的都知道,可以用 script 的方式得到你真實(shí)的 pageView 數(shù)目,我們現(xiàn)在要做的就是這樣的一件事情,我們?cè)谒械捻撁娑技尤胍欢卧挘?/span>

          <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>

          然后我們寫上一個(gè) 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());

          }

          }

          ?

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

          我們來看看我們的 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();

          ??? }

          }

          我們記錄了一個(gè)靜態(tài)的 hash 表來記錄激活狀態(tài)的 sessionid ,并在 session 銷毀的時(shí)候?qū)⑦@個(gè) sessionid 置為空。

          怎么把 servlet 配置到 web 應(yīng)用中我就不羅唆了。

          posted @ 2006-12-14 15:10 flyffa 閱讀(2405) | 評(píng)論 (1)編輯 收藏

               摘要: 在網(wǎng)上找了一些文檔,還是覺得不是很清楚,自己走了些彎路,才把這個(gè)配置好,還是寫下來吧,以備后查。 1.?? 目標(biāo) 使用 apache 和 tomcat 配置一個(gè)可以應(yīng)用的 web 網(wǎng)站,要達(dá)到以下要求: ...  閱讀全文
          posted @ 2006-11-06 11:49 flyffa 閱讀(3246) | 評(píng)論 (9)編輯 收藏

          ???最近做網(wǎng)頁的時(shí)候無意中發(fā)現(xiàn)一個(gè)有意思的問題,只在Ie中測(cè)試過,不知道在firefox中有什么現(xiàn)象。
          先定義樣式表:
          <STYLE>
          DIV .head1
          {
          ?background-color: yellow;
          }

          DIV.head2
          {
          ?background-color: red;
          }

          </STYLE>


          展現(xiàn)樣式:

          <div class="head1">div1</div>
          <span class="head1">span1</span>
          <div class="head2">div1</div>
          <span class="head2">span1</span>

          div1
          span1
          div1
          span1

          測(cè)試head1 與head2的區(qū)別

          <div>
          <div class="head1">div2</div>
          <span class="head1">span2</span>
          </div>

          div2
          span2

          <p>
          <div class="head1">div2</div>
          <span class="head1">span2</span>
          </p>

          div2
          span2




          總結(jié):
          ?head1樣式和head2樣式的主要區(qū)別就是中間多了一個(gè)空格。?感覺像是head1樣式是指在div內(nèi)部適用的樣式;?head2樣式是應(yīng)用于div元素上的樣式;

          另:由于博客上的編輯器自動(dòng)在style之間增加了cdata角標(biāo),導(dǎo)致我的效果無法顯示,head1的效果我是通過設(shè)置背景色完成的,有興趣的朋友可以把那幾段代碼拷出來存成一個(gè)文件,就可以看到效果。

          請(qǐng)高手指教。

          posted @ 2006-11-02 13:14 flyffa 閱讀(3056) | 評(píng)論 (7)編輯 收藏

          ??????自己以前做程序都是自己寫連接池,那個(gè)時(shí)候項(xiàng)目大,環(huán)境各異,為了便于實(shí)施,總是由自己進(jìn)行連接池的管理,等到自己想做一些小東西的時(shí)候,才發(fā)現(xiàn)這個(gè)連接池成了一個(gè)專用的東西,和系統(tǒng)做了太多的綁定,只能找連接池用,用過resin自帶的連接池,再用tomcat連接池的時(shí)候就很不爽,沒有監(jiān)控的功能,在網(wǎng)上選來選去,最后選擇了Proxool。

          ??????Proxool連接池是sourceforge下的一個(gè)開源項(xiàng)目,這個(gè)項(xiàng)目提供一個(gè)健壯、易用的連接池,最為關(guān)鍵的是這個(gè)連接池提供監(jiān)控的功能,方便易用,便于發(fā)現(xiàn)連接泄漏的情況。開源項(xiàng)目地址是:
          http://proxool.sourceforge.net/


          配置連接池比較的簡(jiǎn)單:
          1、將下載的包解開,從包中的lib目錄下將proxool-xxx.jar(xxx隨著不同的版本號(hào)變化)加入你的工程中。
          2、配置數(shù)據(jù)源:
          ??????在web-info下建立文件:proxool.xml,文件內(nèi)容如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <something-else-entirely>
          ? <proxool>
          ??? <alias>Develop</alias>
          ??? <driver-url>jdbc:mysql://localhost/kuanxue</driver-url>
          ??? <driver-class>com.mysql.jdbc.Driver</driver-class>
          ??? <driver-properties>
          ????? <property name="user" value="root"/>
          ????? <property name="password" value=""/>
          ????? <property name="useUnicode" value="true"/>
          ????? <property name="characterEncoding" value="GBK"/>
          ??? </driver-properties>
          ??? <maximum-connection-count>500</maximum-connection-count>
          ??? <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
          ? </proxool>
          ?</something-else-entirely>

          3、配置web.xml
          在web.xml中增加:
          <!--?配置初始化servlet,在web容器加載的時(shí)候自動(dòng)加載配置文件,如果不是web程序,這個(gè)部分就需要通過開發(fā)接口來初始化了 -->
          <servlet>
          ???? <servlet-name>proxoolInitialServlet</servlet-name>
          ?<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
          ???? <init-param>
          ?????? <param-name>xmlFile</param-name>
          ?????? <param-value>WEB-INF/proxool.xml</param-value>
          ???? </init-param>
          ???? <load-on-startup>1</load-on-startup>
          ?? </servlet>
          <!--配置監(jiān)控servlet,其實(shí)如果不想監(jiān)控的話,可以不配-->
          ?? <servlet>
          ??? <servlet-name>dbpoolAdmin</servlet-name>
          ??? <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
          ? </servlet>
          ?? <servlet-mapping>
          ??? <servlet-name>dbpoolAdmin</servlet-name>
          ??? <url-pattern>/dbpool</url-pattern>
          ? </servlet-mapping>

          4、在程序中調(diào)用
          一般我將獲取connection的行為封裝為一個(gè)工廠模式,便于多種情況的切換,以下是其中proxool數(shù)據(jù)源的getConnection方法的實(shí)現(xiàn):

          public Connection getConnection() {
          ??????? try{
          ??????????? Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
          ??????????? return DriverManager.getConnection("proxool.Develop");
          ??????? }catch(Exception ex){
          ??????????? ex.printStackTrace();
          ??????? }
          ??????? return null;
          ??? }

          5、應(yīng)用開發(fā):
          ??????在實(shí)際的應(yīng)用中,我們可能需要更多的功能,比如監(jiān)控功能不夠強(qiáng)大,權(quán)限不好控制,我們希望能夠編寫出更強(qiáng)大的功能,比如殺死一些大的查詢語句等,記錄各種查詢語句占用的時(shí)間,這就需要對(duì)開發(fā)接口進(jìn)行進(jìn)一步的研究了。
          posted @ 2006-11-02 12:00 flyffa 閱讀(5881) | 評(píng)論 (7)編輯 收藏

          最近寫網(wǎng)頁,用DIV加CSS實(shí)現(xiàn),發(fā)現(xiàn)DIV嵌套時(shí),當(dāng)內(nèi)嵌浮動(dòng)div的時(shí)候不能正常擴(kuò)展

          <div style="border-style:solid">
          ?? <div style = "float:right;border-style:solid">dsfsdfsd<div>
          </div>

          發(fā)現(xiàn)內(nèi)層div會(huì)越界,在網(wǎng)上找了一下:
          <div style="border-style:solid">
          ?? <div style = "float:right;border-style:solid">dsfsdfsd<div>
          ?? <div style="font: 0px/0px sans-serif;clear: both;display: block">
          </div>
          加這么一句就好了,順便查到了一個(gè)在firefox中解決的方法:
          <div style="border-style:solid">
          ?? <div style = "float:right;border-style:solid">dsfsdfsd<div>
          ?? <br clear="alll">
          </div>
          posted @ 2006-11-01 12:43 flyffa 閱讀(2392) | 評(píng)論 (2)編輯 收藏

          最近由于項(xiàng)目需要,開始對(duì)全文檢索做些了解,剛剛開始,由于項(xiàng)目人力的嚴(yán)重不足,我沒有太多的時(shí)間進(jìn)行細(xì)致的研究,不知道能走到如何的一個(gè)深度,走一步,看一步吧。

          我用java做的開發(fā),由于數(shù)據(jù)庫表并不多,我沒有采用hibernate或者其他的持久層,而是直接使用了jdbc進(jìn)行數(shù)據(jù)庫操作。數(shù)據(jù)庫使用的是Mysql。

          做搜索,第一想到的就是like了,后來發(fā)現(xiàn)條件可能比較復(fù)雜,效率可能低下,于是準(zhǔn)備添加全文檢索的搜索模式。

          第一類:數(shù)據(jù)庫內(nèi)嵌全文檢索

          第一種方案:毫無疑問,最為省事的還是數(shù)據(jù)庫直接幫我搞定,我無須安裝新的東西,也不用花太多的時(shí)間做新的研究。
          ??????我用的是Mysql5.1。查官方文檔,使用全文檢索技術(shù)很簡(jiǎn)單:
          ??????把表建成MyIsam的,
          ??????然后導(dǎo)入數(shù)據(jù),
          ??????然后建立fulltext索引,
          ??????然后,調(diào)整什么最小詞長(這個(gè)部分我還沒做就發(fā)現(xiàn)問題了,節(jié)約了一部分工作量),
          ??????然后寫一個(gè)select * from tbl where match (col1,col2) against ("關(guān)鍵字1","關(guān)鍵字2")的sql,
          ??????于是發(fā)現(xiàn)沒有任何的返回記錄。上網(wǎng)google了一下,才知道m(xù)ysql不支持中文的全文,在Mysql5.1參考手冊(cè)12.7.4中有這么一段話:
          ????? 諸如漢語和日語這樣的表意語言沒有自定界符。因此 FULLTEXT分析程序不能確定在這些或其它的這類語言中詞的起始和結(jié)束的位置。其隱含操作及該問題的一些工作區(qū)在12.7節(jié),“全文搜索功能”有詳細(xì)論述。
          ??????但我沒有找到任何關(guān)于這個(gè)部分的描述,所以我暫時(shí)認(rèn)為Mysql直到現(xiàn)在對(duì)中文的全文檢索依然沒有支持。

          第二種方案:修改版的mysql,因?yàn)閙ysql是開源的軟件,那么mysql本身不支持,有沒有中文版的能支持呢,在google中順手搜到了一個(gè),海量公司研發(fā)了一個(gè),網(wǎng)址:http://www.hylanda.com/,由于不是開源的,公司是商業(yè)化運(yùn)作,加上網(wǎng)上應(yīng)用的人好像也不多,故而這個(gè)方案也被擱置了。

          第三種方案:插件,網(wǎng)上能夠google到的就是這樣一個(gè):http://myft.twomice.net/,目前好像是開源運(yùn)作,我還沒有嘗試,粗略看了一下,怎么還要自己編譯mysql,好像和插件的概念有些出入,不過總的來說,這個(gè)方式還是值得嘗試的。

          第四種方案:更換數(shù)據(jù)庫,目前還有oracle,ms-sql可以選擇,這兩個(gè)的中文搜索不知道做的如何,如果不錯(cuò)的,而mysql又不能解決的話,就換數(shù)據(jù)庫吧,我想用oracle應(yīng)該好一些。

          第二類:開源全文檢索引擎
          目前最火的就是lucene吧,可以研究研究。

          在搜索中發(fā)現(xiàn)了這樣一篇博客文章,加上,以備查。
          http://blog.csdn.net/jeafyezheng/archive/2006/09/29/1306463.aspx
          posted @ 2006-10-12 13:28 flyffa 閱讀(503) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 六安市| 获嘉县| 塔城市| 霞浦县| 康定县| 鄱阳县| 娱乐| 宜宾县| 阜南县| 南阳市| 广南县| 神农架林区| 仙桃市| 合山市| 安多县| 郧西县| 凤台县| 太保市| 镇平县| 浮山县| 新疆| 自贡市| 建昌县| 弥勒县| 鄂尔多斯市| 尉氏县| 中西区| 龙陵县| 怀仁县| 阜宁县| 鱼台县| 威宁| 临沂市| 桂平市| 崇左市| 百色市| 平原县| 固原市| 刚察县| 井研县| 临沭县|