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

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

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

    posts - 42,  comments - 84,  trackbacks - 0
      2007年5月14日
    CJDBC官網(wǎng)http://c-jdbc.ow2.org/
    cjdbc與hibernate的整合
    Configuring C-JDBC with Hibernate

    C-JDBC just has to be defined as any JDBC driver in Hibernate, leaving the syntax set to the proper database. Here is a configuration example to use Hibernate with a C-JDBC cluster made of Sybase backends:
    ## C-JDBC
    hibernate.dialect                 net.sf.hibernate.dialect.SybaseDialect
    hibernate.connection.driver_class org.objectweb.cjdbc.driver.Driver
    hibernate.connection.username     user
    hibernate.connection.password     pass
    hibernate.connection.url          jdbc:cjdbc://localhost:25322/test       
          
          轉自:http://lzj0470.javaeye.com/blog/445348
    一、前言
             cjdbc ( http://c-jdbc.objectweb.org/ ) 是一個open source的數(shù)據(jù)庫集群中間件,任何基于jdbc的應用都可以通過它透明地訪問數(shù)據(jù)庫集群,它可以進行各個節(jié)點之間的數(shù)據(jù)復制,并且可以實現(xiàn)各個節(jié)點的查詢負載均衡。通過這樣的軟件,偶們可以方便的實現(xiàn)RAIDb - Redundant Array of Inexpensive Database 廉價數(shù)據(jù)庫冗余陣列。
            大型應用隨著用戶量訪問越來越大,增加數(shù)據(jù)庫存儲和做好數(shù)據(jù)庫冗余可以增加系統(tǒng)的可靠性和性能。

            下面利用cjdbc,把兩臺對等的 Mysql 做 RAIDb,本文假定你已經(jīng)搭建好兩臺對等的 Mysql環(huán)境并建好一個需要做集群冗余的數(shù)據(jù)庫 clusterdb。
    二、配置環(huán)境
    Mysql: 5.0.19, 并使用 InnoDB 作為 Mysql 引擎

    C-jdbc: 2.0.2

    Jdk: 1.5
    三、選擇合適的 C-JDBC RAIDb 機制

    cjdbc有幾種RAIDb的機制可以選擇,如RAIDb-0,RAIDb-1等等,可以根據(jù)不同的情況選擇不同的RAIDb的機制。各種 RAIDb的機制詳情請查看 cjdbc 的文檔和 Demo。

    RAIDb-1有如下功能:
    完全鏡像處理機制,每個節(jié)點上都有完整的數(shù)據(jù)庫結構,這種方式提供了最好的容錯處理,并且通過設置合理的Loading Balance策略,可以帶來查詢性能相當好的提高。但是由于對于任何的寫操作(create/update/delete),需要在各個節(jié)點上進行傳播復制,寫操作就會比原來慢一些了,如下圖:



    這里選擇 RAIDb-1 做為 cjdbc RAIDb 機制。

    四、給兩臺對等的 Mysql 建表,假設兩臺 Mysql 的IP分別是 192.168.0.2和192.168.0.3
    bash> mysql -h192.168.0.2 -uroot
    bash> use clusterdb
    bash> create table user (id int(3) not null auto_increment primary key, name char(50) not null) engine innodb;
    bash> exit;

    bash> mysql -h192.168.0.3 -uroot
    bash> use clusterdb
    bash> create table user (id int(3) not null auto_increment primary key, name char(50) not null) engine innodb;
    bash> exit;
    五、在 Linux 下安裝 C-JDBC Controller
    bash> mkdir -p /usr/local/c-jdbc
    bash> cd /usr/local/c-jdbc
    bash> tar xvfz c-jdbc-2.0.2-bin.tar.gz
    bash> export CJDBC_HOME=/usr/local/c-jdbc
    六、把 Mysql JDBC Driver 放到 C-JDBC Controller 中來

    這里我們使用 mysql-connector-java-3.1.12-bin.jar 驅動程序,把它放到
    /usr/local/c-jdbc/drivers 中

    七、配置 C-JDBC Controller
    1、在 /usr/local/c-jdbc/config/virtualdatabase 目錄中創(chuàng)建 虛擬數(shù)據(jù)庫配置文件,并把它命名為 mysql-raidb1-distribution.xml,內(nèi)容如下:

    <?xml version="1.0" encoding="UTF8"?>
    <!DOCTYPE C-JDBC PUBLIC "-//ObjectWeb//DTD C-JDBC 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-2.0.2.dtd">

    <C-JDBC>

    <VirtualDatabase name="myDB">

    <Distribution>
    </Distribution>

    <AuthenticationManager>
    <Admin>
    <User username="admin" password="c-jdbc"/>
    </Admin>
    <VirtualUsers>
    <VirtualLogin vLogin="boss" vPassword="boss"/>
    </VirtualUsers>
    </AuthenticationManager>

    <DatabaseBackend name="mysqlNode211" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://192.168.0.2/clusterdb" connectionTestStatement="select 1">
    <ConnectionManager vLogin="boss" rLogin="boss_user" rPassword="123456">
    <VariablePoolConnectionManager initPoolSize="10" minPoolSize="10" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
    </ConnectionManager>
    </DatabaseBackend>

    <DatabaseBackend name="mysqlNode213" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://192.168.0.3/clusterdb" connectionTestStatement="select 1">
    <ConnectionManager vLogin="boss" rLogin="boss_user" rPassword="123456">
    <VariablePoolConnectionManager initPoolSize="10" minPoolSize="10" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
    </ConnectionManager>
    </DatabaseBackend>

    <RequestManager>
    <RequestScheduler>
    <RAIDb-1Scheduler level="passThrough"/>
    </RequestScheduler>

    <LoadBalancer>
    <RAIDb-1>
    <WaitForCompletion policy="first"/>
    <RAIDb-1-LeastPendingRequestsFirst/>
    </RAIDb-1>
    </LoadBalancer>
    </RequestManager>

    </VirtualDatabase>

    </C-JDBC>

    2、在 /usr/local/c-jdbc/config/controller 目錄中創(chuàng)建 C-JDBC controller 配置文件,并把它命名為 uud-controller-distributed.xml,內(nèi)容如下:

    <?xml version="1.0" encoding="UTF8" ?>
    <!DOCTYPE C-JDBC-CONTROLLER PUBLIC "-//ObjectWeb//DTD C-JDBC-CONTROLLER 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-controller-2.0.2.dtd">
    <C-JDBC-CONTROLLER>
    <Controller port="25323">
    <JmxSettings>
    <RmiJmxAdaptor port="1091"/>
    </JmxSettings>
    <VirtualDatabase configFile="mysql-raidb1-distribution.xml" virtualDatabaseName="myDB" autoEnableBackends="true"/>
    </Controller>
    </C-JDBC-CONTROLLER>

    3、在 /usr/local/c-jdbc/config/demo 目錄中創(chuàng)建啟動 C-JDBC controller sh,并把它命名為 uud-distributed-raidb1-controller.sh,內(nèi)容如下:

    #!/bin/sh

    export CJDBC_HOME=/usr/local/c-jdbc
    export JAVA_HOME=/opt/jdk1.5

    cd $CJDBC_HOME/bin

    echo "Waiting for mysql servers to finish start up"

    echo "Starting Controller"
    ./controller.sh -f ../config/controller/uud-controller-distributed.xml &

    八、啟動 C-JDBC Controller
    bash> cd /usr/local/c-jdbc/demo
    bash> chmod u+rwx uud-distributed-raidb1-controller.sh
    bash> ./uud-distributed-raidb1-controller.sh &

    如果啟動正常,顯示的信息如下:

    Waiting for mysql servers to finish start up
    Starting Controller
    2006-04-20 10:32:21,126 INFO controller.core.Controller C-JDBC controller (2.0.2)
    2006-04-20 10:32:21,189 INFO controller.core.Controller Loading configuration file: ../config/controller/uud-controller-distributed.xml
    2006-04-20 10:32:21,278 INFO controller.core.Controller JMX is enabled
    2006-04-20 10:32:21,308 INFO controller.core.Controller Starting JMX server on host: 127.0.0.1
    2006-04-20 10:32:21,674 INFO backend.DatabaseBackend.mysqlNode211 Adding connection manager for virtual user "boss"
    2006-04-20 10:32:21,749 INFO backend.DatabaseBackend.mysqlNode213 Adding connection manager for virtual user "boss"
    2006-04-20 10:32:21,809 INFO controller.RequestManager.myDB Request manager will parse requests with the following granularity: NO_PARSING
    2006-04-20 10:32:21,814 INFO controller.virtualdatabase.myDB Configuring jgroups using: file:/usr/local/c-jdbc/config/jgroups.xml

    -------------------------------------------------------
    GMS: address is 127.0.0.1:32773
    -------------------------------------------------------
    2006-04-20 10:32:26,476 INFO controller.virtualdatabase.myDB Group myDB connected to /127.0.0.1:32773[/127.0.0.1:32773]
    2006-04-20 10:32:26,476 INFO controller.virtualdatabase.myDB First controller in group myDB
    2006-04-20 10:32:26,477 WARN controller.virtualdatabase.myDB No recovery log has been configured, enabling backend without checkpoint.

    [1]+ Done ./uud-distributed-raidb1-controller.sh

    八、編寫 C-JDBC 客戶端程序
    1、把 C-JDBC Drivers(/usr/local/c-jdbc/drivers/c-jdbc-driver.jar) 放置到 CLASSPATH 中
    2、編寫插入 10 條數(shù)據(jù)到 Mysql 中,程序如下:

    /**
    * @author 胡榮華
    * @Company 世紀龍 21cn
    */
    package com.cjdbc.test;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.DriverManager;

    /**
    *
    */
    public class GenerateSampleData {

    public void generate() {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
    // 這是 c-jdbc drivers 的 Drivers class,注意不是 mysql 的 Drivers class
    Class.forName("org.objectweb.cjdbc.driver.Driver").newInstance();
    // 192.168.0.1 是 cjdbc controller 所在的 ip
    // myDB 是在 文件 mysql-raidb1-distribution.xml 里定義的 <VirtualDatabase name="myDB">
    // user=boss&password=boss 是在 文件 mysql-raidb1-distribution.xml 里定義的
    // <VirtualUsers>
    // <VirtualLogin vLogin="boss" vPassword="boss"/>
    // </VirtualUsers>

    String url = "jdbc:cjdbc://192.168.0.1:25323/myDB?user=boss&password=boss";

    conn = DriverManager.getConnection(url);

    try{
    conn.setAutoCommit(false);
    pstmt = conn.prepareStatement("insert into user values ('', ?)");

    int numOfTestRecords = 10;
    System.out.println("Update Record Start.");
    for (int i=0;i<numOfTestRecords;i++) {
    String newkey = i + "-" + i;
    pstmt.setString(1, "hua_" + newkey);
    pstmt.executeUpdate();

    }
    conn.commit();
    System.out.println("Update Record Success.");
    }
    catch(Exception ex){
    conn.rollback();
    ex.printStackTrace();
    }
    finally{
    try {
    if( pstmt != null )
    pstmt.close();
    if( conn != null)
    conn.close();
    }
    catch(Exception e) {
    e.printStackTrace();
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    GenerateSampleData g = new GenerateSampleData();
    g.generate();

    }

    }

    3、程序執(zhí)行完畢后,分別到 Mysql Node 192.168.0.2 和 192.168.0.3 查詢,看看是否已同步了數(shù)據(jù),如果兩個 Mysql Node 都有相同的數(shù)據(jù),說明 C-JDBC 環(huán)境搭建成功。

    posted @ 2010-03-25 20:23 Dong 閱讀(402) | 評論 (0)編輯 收藏

    最近做了一個日志管理系統(tǒng)
    個人覺得采用了一套非常非常創(chuàng)新或者變態(tài)的開發(fā)方式,就像題目說的那樣,使用web的方法開發(fā)桌面應用程序,當然所有的技術都是基于java的。
    總結一下在整個項目中使用到的技術

    1、底層服務器的開發(fā)socket通信、http報文解析、反射機制(這些技術其實就是開發(fā)了一款小型的服務器,讓我們的web代碼能夠在本地運行起來,之所以選擇自己開發(fā)服務器的原因是,tomcat對于我們這個小桌面程序來說還是太大了點,如果作為桌面啟動,用戶不可能等待程序啟動這么長的時間,我給這個服務器起了個名字叫做jnet
    2、SWT,包括的瀏覽器控件和窗口等。
    3、使用installanywhere來打包程序,方便發(fā)布
    4、前臺展現(xiàn)數(shù)據(jù)使用了ext2.2
    5、擴展自己開發(fā)的服務器jnet,開發(fā)出自己的“action”,應該來說還是符合MVC的
    數(shù)據(jù)庫使用的是access,采用jdbc的方式訪問,你知道,如果在桌面軟件上使用hibernate...

    好了,不說廢話
    先貼出成品的效果圖

    1、桌面圖標


    2、登錄界面


    3、登錄效果圖


    4、主界面


    是不是覺得還不錯呢?JAVA也可以揚眉吐氣開發(fā)出這樣的桌面系統(tǒng),可惜的是因為使用到了SWT,所以整個項目并不能跨平臺,放到linux系統(tǒng)下去運行。
    好了先理一理,發(fā)一張項目的原理圖


    看圖說話,我們整個項目的構架,就是這個樣子的,采用SWT封裝了IE作為前臺展現(xiàn),后臺使用自己開發(fā)的服務器作為后臺來處理數(shù)據(jù),中間數(shù)據(jù)通信方式當然就只能是http了

    所以中心思想就是,我開發(fā)了個服務器,這個服務器能夠讓用戶擴展自己的類,自己的方法,然后用戶就可以根據(jù)自己的需要來書寫自己的系統(tǒng),最最最重要的就是,讓我們這些寫慣了J2EE的人能夠使用已經(jīng)形成的思維來編寫桌面系統(tǒng),我們可以不需要再去學swing和swt,可以使用html的方式來做前臺的布局,因為老實說我每次寫桌面程序的時候,總會把代碼弄得一團糟,在web系統(tǒng)上容易規(guī)規(guī)矩矩的寫出分層的代碼,桌面系統(tǒng)...布局就讓我頭大(我的意思是當你跑出去接私活干的時候,不用再學一套東西,呵呵)。

    好了,這個帖子只是一個簡單的介紹,整個系統(tǒng)具體的實現(xiàn)方式,會在后續(xù)的帖子中一步步解析,大家有什么意見或者建議可以給我留言,謝謝!
    posted @ 2009-03-19 15:16 Dong 閱讀(4365) | 評論 (23)編輯 收藏

      開發(fā)的時候有時候會碰到這樣的情況,我們在寫程序的時候并不知道需要調(diào)用某個對象的哪個方法,只有程序運行后,我們才能夠知道?;蛟S我們需要根據(jù)客戶端傳過來的某個String參數(shù)的值來判斷我們應該執(zhí)行哪個方法。在這種情況下JAVA的反射執(zhí)行就可以幫上忙了。下面是我做的一個簡單的測試代碼,提供給大家做個參考。

    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;

    /**
     * 
    @author Dong
     * 測試JAVA reflect機制
     
    */

    public class TestRef{
        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args){
                TestBean test 
    = new TestBean();
                Method[] methods 
    = test.getClass().getMethods();
                test.setAbc(
    "---");
                
    for(int i=0;i<methods.length;i++){
                    
    if(methods[i].getName().equalsIgnoreCase("getabc")){
                        
    try {
                            System.out.println(methods[i].invoke(test));
                        }
     catch (IllegalArgumentException e) {
                            e.printStackTrace();
                        }
     catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }
     catch (InvocationTargetException e) {
                            e.printStackTrace();
                        }

                    }

                }

        }

    }

    posted @ 2008-06-05 16:36 Dong 閱讀(10203) | 評論 (7)編輯 收藏
    (String[])ArrayList.toArray(new String[0]);
    posted @ 2008-06-02 11:25 Dong 閱讀(802) | 評論 (0)編輯 收藏
    XML里是無法直接正常輸出&等特殊字符的,可用&amp;轉義表示!
    posted @ 2008-05-21 09:03 Dong 閱讀(484) | 評論 (0)編輯 收藏
    1、數(shù)字格式化
    <fmt:formatNumber value="33.33333" pattern="#.0"></fmt:formatNumber>-->輸出33.3
    pattern中符號的約束規(guī)定
    0                     一個數(shù)位
    #                     一個數(shù)位,前導零和追尾零不顯示
    .                      小數(shù)點分割位置
    ,                     組分隔符的位置
    -                      負數(shù)前綴
    %                    用100乘,并顯示百分號
    其他任何符號    在輸出字符串中包括指定符號
    2、日期格式化
    <fmt:formatDate value="${vo.lateCompleteDate}" type="both" pattern="yy-MM-dd"/>
    posted @ 2008-05-20 09:29 Dong 閱讀(1762) | 評論 (0)編輯 收藏
    HashMap<String,String> testMap = new HashMap<String,String>();
    for (Map.Entry<String, String> entry : testMap .entrySet()) {
    entry.getKey();
    entry.getValue();
    }
    posted @ 2008-05-19 17:09 Dong 閱讀(322) | 評論 (0)編輯 收藏
    ApplicationContext ctx = new ClassPathXmlApplicationContext("application-config.xml");
    Map<String,String> bureauMap = ((DictionaryService)ctx.getBean("dictionaryService")).getBureauMap();
    posted @ 2008-05-19 16:45 Dong 閱讀(268) | 評論 (0)編輯 收藏
    今天在調(diào)試一個Servlet程序的時候,報了以下錯誤!
    java.lang.IllegalStateException: Cannot forward after response has been committed
    根據(jù)字面理解的話,意識是在response已經(jīng)提交后程序不能再一次的跳轉!

    研究代碼以后發(fā)現(xiàn),是因為前面已經(jīng)執(zhí)行過一次request.request.getRequestDispatcher().forward()
    但是后面的request.request.getRequestDispatcher().forward()依然被執(zhí)行到了!

    那么很有理由相信request.request.getRequestDispatcher().forward()跳轉本身是不會返回什么,也不會終止程序體的執(zhí)行!
    程序體后面該執(zhí)行的還是會執(zhí)行!
    posted @ 2008-04-17 10:28 Dong 閱讀(7749) | 評論 (1)編輯 收藏
    <Resource name="jdbc/dong"  auth="Container" type="javax.sql.DataSource"/>
     
     
    <ResourceParams name="jdbc/dong">
      
    <parameter>
       
    <name>factory</name>
       
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      
    </parameter>
      
    <parameter>
       
    <name>maxActive</name>
       
    <value>100</value>
      
    </parameter>
      
    <parameter>
       
    <name>maxIdle</name>
       
    <value>30</value>
      
    </parameter>
      
    <parameter>
       
    <name>maxWait</name>
       
    <value>5000</value>
      
    </parameter>
      
    <parameter>
       
    <name>username</name>
       
    <value>root</value>
      
    </parameter>
      
    <parameter>
       
    <name>password</name>
       
    <value>colorful</value>
      
    </parameter>
      
    <parameter>
       
    <name>driverClassName</name>
       
    <value>org.gjt.mm.mysql.Driver</value>
      
    </parameter>
      
    <parameter>
       
    <name>url</name>
       
    <value>jdbc:mysql://localhost:3306/dong</value>
      
    </parameter>
       
    </ResourceParams>
    使用如上配置的時候一直報這個
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'錯誤

    在網(wǎng)絡上尋覓后發(fā)現(xiàn)是因為Tomcat版本引起的,改成如下問題就消失了

    <Resource
        
    name="jdbc/dong"
        type
    ="javax.sql.DataSource"
        password
    ="colorful"
        driverClassName
    ="org.gjt.mm.mysql.Driver"
        maxIdle
    ="2"
        maxWait
    ="5000"
        username
    ="root"
        url
    ="jdbc:mysql://localhost:3306/dong"
        maxActive
    ="4"/>
    posted @ 2008-02-24 13:47 Dong 閱讀(2691) | 評論 (1)編輯 收藏
     

    1、 解決Action過多問題

    通過DispatchAction的方式

    建立一個繼承自DispatchActionAction

    此類Action允許我們在表單中帶有參數(shù),根據(jù)參數(shù)執(zhí)行Action中的不同方法,以此實現(xiàn)Action的多用

    步驟

         建立一個繼承自DispatchActionAction規(guī)定方法名稱

         在表單頁面中添加一個隱藏域值,假設為codi   value=”insert”

         Struts-config.xml的相應Formaction項目中設置parameter參數(shù)值為codi

    那么當表單提交的時候,Action中的insert()方法就會被執(zhí)行,可以通過改隱藏域中的值的方式來改變Action要執(zhí)行的方法

    2、 解決ActionForm過多的問題

    通過動態(tài)ActionForm的方式,即DynaActionForm

    步驟

         Struts-config.xml

    <form-beans>

     <form-bean name=”abcForm” type=”org.apache.struts.action.DynaActionForm”>

             <form-property name=”userid” type=”java.long.String”></form-property>             

    </form-bean>

    </form-beans>

         Struts-config.xml

    更改相應的action中的attributenameabcForm

    這樣就配置好了一個動態(tài)的ActionForm

    3、 解決動態(tài)ActionForm的驗證問題

    通過動態(tài)驗證ActonForm的方式,即DynaValidatorForm

    步驟

         Struts-config.xml

    2的第一步,但是type需要改成org.apache.struts.action.DynaValidatorForm

         配置一個validation.xml文件

    <form-validation>

        <formset>

            <form name="abcForm">

                <field property="userid" depends="required">

                    <arg key="err.userid" resource="true"/>

                </field>

            </form>

        </formset>

    </form-validation>

        在Struts資源文件中配置err.userid、以及errors.required

        在Struts-config.xml配置相應的action,添加validate=true添加驗證支持

        添加struts Plugin插件

    設置plugin class為org.apache.struts.validator.ValidatorPlugIn

    添加propertys

    Propertyà pathnames

    Valueà /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml

    這樣一個驗證框架就配置好了!

    posted @ 2008-02-12 13:47 Dong 閱讀(3489) | 評論 (6)編輯 收藏

    讀Excel:

    Workbook workbook = null;

      try
      {
          workbook = Workbook.getWorkbook(new File(path));
      }
      catch(Exception e)
      {
       System.out.println(e);
      }


    Sheet sheet = workbook.getSheet(0);
    Cell cell=sheet.getCell(i,j);//讀第i列,第j行表格的值
    System.out.println(cell.getContents());

    對于循環(huán)讀出可以使用
    sheet.getRows();方法得到行數(shù)
    sheet.getColumns();方法得到列數(shù)

    寫Excel:

    Workbook wb = Workbook.getWorkbook(new File(path));

    WritableCellFormat wcf = new WritableCellFormat();

    book = Workbook.createWorkbook(new File(path, wb);
    sheet = book.getSheet(0);

    jxl.write.Label name = new jxl.write.Label(i,j,"abc",wcf);//在第i列,第j行寫入"abc"值,風格為wcf,如果寫入的是數(shù)字則使用jxl.write.Number
    sheet.addCell(name);
    try
       {
        book.write();
        book.close();
       }
       catch(WriteException e){}
       catch(IOException e){}

    單元格風格:

    設置邊框—
    WritableCellFormat wcf = new WritableCellFormat();
    wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
    wcf.setBorder(Border.RIGHT,BorderLineStyle.THIN);
    wcf.setBorder(Border.LEFT,BorderLineStyle.THIN);
    wcf.setBorder(Border.BOTTOM,BorderLineStyle.THIN);

    合并單元格-
    sheet.mergeCells(0,1,0,2)
    合并(0,1)、(0,2)兩個單元格

    設置字體-
    WritableFont wf = new WritableFont(WritableFont.ARIAL,12, WritableFont.BOLD, false);
    WritableCellFormat wcf = new WritableCellFormat(wf);
    以及其它各種單元格樣式,如設置背景顏色
    都可以通過設置WritableCellFormat來設置

    還有一點需要說明一下,JXL組件對于公式的支持似乎比Apache的poi好
    posted @ 2008-02-01 16:16 Dong 閱讀(4978) | 評論 (2)編輯 收藏
    原來弄過QuaQua的東西,但是一直不能把JFrame和JDialog變成Ox mac的樣式
    原因是,如果系統(tǒng)并不是蘋果的系統(tǒng)就需要顯示的加載JFrame和JDialog的樣式



    System.setProperty("Quaqua.tabLayoutPolicy","wrap");
              
            
    if(!System.getProperty("os.name").toLowerCase().startsWith("mac"))
            
    {
                
    try
                
    {
                    Methods.invokeStatic(JFrame.
    class"setDefaultLookAndFeelDecorated", Boolean.TYPE, Boolean.TRUE);
                    Methods.invokeStatic(JDialog.
    class"setDefaultLookAndFeelDecorated", Boolean.TYPE, Boolean.TRUE);
                }

                
    catch(NoSuchMethodException e)
                
    {
                    e.printStackTrace();
                }

            }

            
    try 
            
    {
                UIManager.setLookAndFeel(
    "ch.randelshofer.quaqua.QuaquaLookAndFeel");
            }
     
            
    catch(Exception e){}
    posted @ 2008-01-26 13:01 Dong 閱讀(2960) | 評論 (6)編輯 收藏

    Junit主要是用來對我們的程序代碼進行白盒測試的一個組件。
    首先我們需要得到Junit.jar的包,可以到www.junit.org下載得到。
    下載以后將我們的Junit.jar包添加到工程里面,那么OK,就可以開始對我們的程序進行測試了。
    對一個文件進行測試的時候需要自己制作一個類并繼承TestCase,如:

    package cn.colorful.junit;

    import junit.framework.Assert;
    import junit.framework.TestCase;
    import cn.colorful.sample.*;

    public class TestSample extends TestCase {

     private Sample sam = null;

     protected void setUp() throws Exception {
      sam = new Sample();
     }

     protected void tearDown() throws Exception {
      sam = null;
     }

     public void testSample() {
      Assert.assertNotNull(sam);
      Assert.assertEquals("ab", sam.getName("a", "b"));
      Assert.assertEquals("dong", sam.getName("do", "ng"));
     }}

    其中程序的運行過程是TestCase的構造方法、setUp方法(對程序中使用的一些資源進行分配)、運行測試、tearDown()(去處一些使用到的資源)
    這樣程序會自動判斷Sample類中的getName方法返回的值是不是符合我們的要求,使用Junit測試的運行方式,程序會調(diào)用Assert類中的靜態(tài)方法對測試程序的返回值和期望值等情況進行判斷、還有一些判斷對象是否為空的方法,當出現(xiàn)綠色的時候代表程序是正常運行的
    當書寫了很多測試類后,可以條使用TestSuite類對測試類進行打包測試,如:

    package cn.colorful.junit;

    import junit.framework.Test;
    import junit.framework.TestSuite;

    public class TestPackage{
     public static Test suite()
     {
      TestSuite tes = new TestSuite("Test for cn.colorful.sample");
      tes.addTestSuite(TestSample.class);
      tes.addTestSuite(TestSampleTwo.class);
      
      return tes ;
     }
    }

    程序需要實現(xiàn)suite()方法,并且返回出一個TestSuite對象。

    posted @ 2007-12-25 16:12 Dong 閱讀(1255) | 評論 (2)編輯 收藏

    1、實現(xiàn)自定義Taglib的類需要實現(xiàn)javax.servlet.jsp.tagext.IterationTag或者

    javax.servlet.jsp.tagext.TagSupport、javax.servlet.jsp.tagext.BodyTag接口,目前J2EE提供了兩

    個分別實現(xiàn)了這兩個接口的類,我們只需要直接繼承就可以,它們分別為BodyTagSupport、TagSupport
    繼承兩個類中的一個就可以完成一個屬于自己的Taglib類
    package cn.dong;

    import java.io.IOException;
    import cn.dong.Person ;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.Tag;
    import javax.servlet.jsp.tagext.TagSupport;

    public class TagServer extends TagSupport {
     
     String name ;

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

     public int doStartTag() throws JspException {
      Person per = new Person() ;
      try {
       pageContext.getOut().println("Userid:"+name) ;
      } catch (IOException e) {
       e.printStackTrace();
      }
      return SKIP_BODY ;
     }


    }

    2、寫tld文件
    tld文件本身是xml標準文檔的一種,可以通過tld文件配置出Taglib的各種標記所對應的類實現(xiàn)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

    "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    <taglib>
     <tlibversion>1.0</tlibversion>//標簽描述
     <jspversion>1.1</jspversion>
     <shortname>mytag</shortname>
     <uri></uri>
     <tag>
      <name>hello</name>//標簽方法名
      <tagclass>cn.dong.TagServer</tagclass>//指向的類
      <bodycontent>empty</bodycontent>
      <info>Tag with Parameter</info>
      <attribute>//定義傳遞的屬性值
       <name>name</name>//屬性名
       <required>true</required>//屬性值是否必須傳輸
       <rtexprvalue>false</rtexprvalue>
      </attribute>
     </tag>
    </taglib>
    這樣一個自定義標記就寫好了,但是要使用它我們還需要在項目中配置
    3、項目部署文件web.xml
    <taglib>
     <taglib-uri>hello</taglib-uri>
     <taglib-location>/WEB-INF/Web.tld</taglib-location>
    </taglib>
    4、在JSP頁面中調(diào)用Taglib
    <%@ taglib uri="hello" prefix="show" %>
    這樣我們就完成了所有配置
    在頁面中使用類似<show:hello name="dong"/>就可以看到我們配置的Taglib起的作用了

    posted @ 2007-12-19 11:07 Dong 閱讀(1081) | 評論 (3)編輯 收藏

    我對DAO的理解就是對數(shù)據(jù)庫的訪問封裝在一個接口里,當用戶需要訪問數(shù)據(jù)庫的時候只需要簡單的對調(diào)用接口,而不需要和數(shù)據(jù)庫有直接的接觸。
    下面介紹一個簡單的DAO對數(shù)據(jù)庫訪問的建立:

    首先我們需要建立
    1、一個DAO接口:UserDAO.java在里面定義數(shù)據(jù)庫操作的所有方法
    2、一個實現(xiàn)了DAO接口的類、UserDAOImpl.java,完成了對DAO的實現(xiàn)并且將取得的數(shù)據(jù)存放到VO類中。
    3、一個數(shù)據(jù)庫訪問的基礎類、DataBaseConnection.java里面封裝了對數(shù)據(jù)庫的連接Connection,外部訪問這個類的方法可以返回一個Connection接口的實現(xiàn)
    4、一個VO類,UserVO.java,里面包含了所有需要返回的出來的數(shù)據(jù)、利用set方法和get方法對類對象進行基本的設置
    5、一個Factory類,封裝了具體實現(xiàn)了UserDAO接口的UserDAOImpl類對象,調(diào)用Factory類的時候直接返回一個UserDAO的對象

    這樣的話一個DAO設計就完成了
    這個時候當我們需要對數(shù)據(jù)庫進行訪問的時候只需要聲明一個UserDAO接口然后實例化一個工廠類實現(xiàn)UserDAO接口,這樣我們就可以遍歷VO類得到我們要的數(shù)據(jù)。

    posted @ 2007-12-16 16:30 Dong 閱讀(1139) | 評論 (1)編輯 收藏

    Filter Servlet中傳遞的request和response對象分別是ServletRequest和ServletResponse接口的對象,而不是一般Servlet中的HttpServletRequest和HttpServletResponse接口的對象,ServletRequest是HttpServletRequest的父接口,很多方法是沒有的,比如說request.getSession() ;所以如果想在Filter中讀取session對象必須對request做一定的向下轉型。

    而實現(xiàn)HttpSessionListener 的Listener Servlet中的傳遞的對象是HttpSessionEvent的對象,想在其中實現(xiàn)對Application對象的訪問的話:arg0.getSession().getServletContext().setAttribute();

    另:今天把MySQL裝到電腦上,利用Servlet連接了一下,老是報ClassNotFound的錯誤,原因是MySQL的JDBC驅動只有一個mysql-connector-java-5.0.8-bin.jar,另外一個不能夠拷到lib目錄下。

    posted @ 2007-12-13 01:02 Dong 閱讀(575) | 評論 (0)編輯 收藏
    Struts 使用 Model 2 架構。Struts 的ActionServlet 控制導航流。其他Struts 類,比如
    Action, 用來訪問業(yè)務邏輯類。當 ActionServlet 從容器接收到一個請求,它使用URI (或者
    路徑“path”) 來決定那個Action 將用來處理請求。一個 Action可以校驗輸入,并且訪問業(yè)務
    層以從數(shù)據(jù)庫或其他數(shù)據(jù)服務中檢索信息。
    為校驗輸入或者使用輸入來更新數(shù)據(jù)庫, Action 需要知道什么指被提交上來。并不是
    強制每個Action 從請求中抓取這些值,而是由 ActionServlet 將輸入綁定到JavaBean中。
    輸入 bean是Struts ActionForm c類的子類。ActionServlet 通過查找請求的路徑可以決定使用
    哪個ActionForm,Action 也是通過同樣的方法選取的。ActionForm 擴展
    org.apache.struts.action.ActionForm類。每個都必須以HTTP 響應進行應答。 通
    常, Struts
    Action 并不自行加工響應信息,而是將請求轉發(fā)到其他資源,比如JSP 頁面。Struts 提
    供一個ActionForward 類,用來將一個頁面的路徑存儲為邏輯名稱。當完成業(yè)務邏輯后,
    Action 選擇并向Servlet返回一個ActionForward。Servlet 然后使用存儲在ActionForward 對
    象中的路徑來調(diào)用頁面完成響應。
    Struts 將這些細節(jié)都綁定在一個ActionMapping 對象中。每個ActionMapping 相對于一
    個特定的路徑。當某個路徑被請求時,Servlet 就查詢ActionMapping 對象。ActionMapping
    對象告訴servlet,哪個Actions, ActionForms, 和 ActionForwards 將被使用。
    所有這些細節(jié),關于Action, ActionForm, ActionForward, ActionMapping,以及其
    他一些東西,都在struts-config.xml 文件中定義。 ActionServlet 在啟動時讀取這個配置文件,
    并創(chuàng)建一個配置對象數(shù)據(jù)庫。在運行時,Struts 應用根據(jù)文件創(chuàng)建的配置對象,而不是文件
    本身
    posted @ 2007-12-08 10:52 Dong 閱讀(253) | 評論 (0)編輯 收藏
    <head>
    <title>無標題文檔</title>
    <style type="text/css">
    <!--

    .hidecontent 
    {display:none;}
    -->
    </style>
    <script language="javascript">
    function switchTag(content)
    {
    // alert(tag);
    //
     alert(content);
    for(i=1; i <6; i++)
    {

    if ("content"+i==content)
    {
    document.getElementById(content).className
    ="";
    }
    else{
    document.getElementById(
    "content"+i).className="hidecontent";
    }

    document.getElementById(
    "content").className=content;
    }

    }

    </script>
    </head>

    <body>
    <div id="container">
    <ul>
    <li><a href="#" onmouseover="switchTag('content1');this.blur();"><span>標題一</span></a></li>
    <li><a href="#" onmouseover="switchTag('content2');this.blur();"><span>標題二</span></a></li>
    <li><a href="#" onmouseover="switchTag('content3');this.blur();"><span>標題三</span></a></li>
    <li><a href="#" onmouseover="switchTag('content4');this.blur();"><span>標題四</span></a></li>
    <li><a href="#" onmouseover="switchTag('content5');this.blur();"><span>標題五</span></a></li>
    </ul>
    </div>
    <div id="content" class="content1">

    <div id="content1" >標題一中的東西</div>
    <div id="content2" class="hidecontent">標題二中的東西</div>
    <div id="content3" class="hidecontent">標題三中的東西</div>
    <div id="content4" class="hidecontent">標題四中的東西</div>
    <div id="content5" class="hidecontent">標題五中的東西</div>

    </div>
    </body>
    </html>
    只是一個簡單的實現(xiàn)方法,具體的樣式美觀方面的東西可以自己修改。
    posted @ 2007-11-11 11:39 Dong 閱讀(1517) | 評論 (4)編輯 收藏

            最近開發(fā)個后臺系統(tǒng),使用到了eWebEditor,原先并沒有使用過相關方面的在線編輯器。所以一用起來問題一大堆!都不知道用什么編輯器好,研究了FCKEditor等一些國外的編輯器后還是覺得應該支持國貨!
             選頂了編輯器后之后還算順利,但是沒過多久就出現(xiàn)了另外一個問題,使用eWebEditor編輯后并保存到數(shù)據(jù)庫中的字符串是以HTML源碼的形式!這樣上傳和前臺顯示是都沒有問題的。但是后臺中有個修改新聞的功能,當我將HTML形式的代碼傳遞給eWebEditor的時候,驚喜就出現(xiàn)了?。【庉嬈黠@然不買我的帳~~~沒反應???
            下面的就是調(diào)用編輯器的JS代碼,其中value中的content值代表Html源碼?。∪缓骵WebEditor就不能顯示出來,也不報錯,就是在頁面中空了一塊,哪位仁兄知道解決辦法,麻煩告訴一下,Thanks!!!!!!

    <script language=javascript>

    document.write (
    "<INPUT type='hidden' name='content1' value='<%=content%>'>");
    document.write (
    "<IFRAME ID='eWebEditor1' src='ewebeditor.htm?id=content1&style=" + URLParams["style"+ "' frameborder='0' scrolling='no' width='580' height='300'></IFRAME>");

    setTimeout(
    "setValue();",1000);

    </script>
        經(jīng)過一夜奮戰(zhàn),以及對于問題的研究。終于找到解決方法了,步驟如下:
        1、講content的內(nèi)容進行Html編譯,Server.HTMLEncode(content)
        2、第二個問題將隱藏的文本框改成文本域,就可以了
    posted @ 2007-11-08 23:59 Dong 閱讀(951) | 評論 (2)編輯 收藏
    硬盤中出現(xiàn)了兩個病毒程序SVOHOST.EXE 和AUTORUN.INF文件。
    1)打開任務管理器將SVOHOST.EXE結束任務
    2)運行 cmd
    進入出現(xiàn)問題的盤符,如e:
    輸入:dir/a
    看看有沒有SVOHOST.EXE 和AUTORUN.INF
    如果有
    則輸入:attrib -a -s -h -r sxs.exe
            attrib -a -s -h -r autorun.inf
    分別執(zhí)行(目的是取消這兩個文件的隱藏屬性)
    3)然后 del sxs.exe
     del autorun.inf
    (目的是刪除文件)
    4)運行 regedit
    搜索 sxs.exe
    在注冊表中找到后直接刪除所有的sxs.exe文件
    5)最后運行msconfig 在啟動項中把SVOHOST.EXE去掉
    posted @ 2007-08-25 12:58 Dong 閱讀(1805) | 評論 (3)編輯 收藏

    FusionCharts是一個能幫你創(chuàng)建其引人注目的動態(tài)圖像效果的Macromedia Flash控件。充分利用Macromedia Flash所具有的流暢功能來創(chuàng)建簡潔的、交互式的和引人注目的動態(tài)圖像。

    技術細節(jié)

    設想所有的圖形組成不需要任何的安裝,你可以在你的能想到的語言環(huán)境中進行工作,并能在多數(shù)的瀏覽器中運行,建立漂亮的、栩栩如生的效果。假設你的數(shù)據(jù)在有限的時間、空間、WEB內(nèi)不停的發(fā)生改變。FusionCharts剛好幫助你實現(xiàn)所有想像出來的事物。

    現(xiàn)在Flash的應用確實越來越廣泛,無論動畫、導航以及一些復雜的組件,都可以使用Flash技術很好的解決。Flash的前景我是非常看好的。FusionCharts就是其中一個非常好的代表?。搧碚f應用起來也是非常方便的。而且功能強大、生成的圖表動態(tài)、而且美觀。

    這個就是FusionCharts免費版本生成的一張圖表




    http://www.fusioncharts.com/LiveDemos.asp

    http://www.sstc.org.cn/Components/DetailView.aspx?id=d0e65bb6-4192-4c17-a940-200640703d5b&typename=basic
    posted @ 2007-08-23 16:04 Dong 閱讀(1175) | 評論 (1)編輯 收藏
    server.xml中的<host></host>中寫入
    <Context   path=""   docBase="E:\myweb"   debug="0"   reloadable="true"   crossContext="true"   />
    //科學計數(shù)法的轉換//
    DecimalFormat df = newDecimalFormat("####.000");
    df.format(要格式的值); 
    /***************// 
    DecimalFormat format = (DecimalFormat) NumberFormat.getPercentInstance();
    format.applyPattern("#####0");
    String temp = format.format(Double.MAX_VALUE);
    System.out.println(temp);
    posted @ 2007-07-31 12:26 Dong 閱讀(219) | 評論 (0)編輯 收藏

    MapXtreme Java,是目前用于Internet或企業(yè)Intranet唯一的100%純Java地圖服務器。MapInfo MapXtreme Java與J2EE兼容,為開發(fā)人員開發(fā)應用提供了無與倫比的靈活性。MapXtreme Java向應用開發(fā)商提供了一個高度可視化的、直觀的組件,方便他們將地圖功能集成到任何Web應用中。MapXtreme Java幫助用戶在企業(yè)內(nèi)部輕松實現(xiàn)信息共享,更好地向顧客提供服務,做出商業(yè)決策,更有效地管理資產(chǎn)和運營。

    可擴展性
    MapXtreme Java使用智能Java線程,可同時為多個客戶端服務,這樣降低了每個客戶端的內(nèi)存消耗,并當增加CPU(或者集群)后保證性能成比例提高。它可以適于處理高強度的使用需求。

    多平臺
    MapXtreme Java 可以在異構硬件環(huán)境下運行(Linux,UNIX,NT等)。 Map Xtreme Java 向所有PC或UNIX工作站的web瀏覽器發(fā)送地圖,而無需專用插件。

    編寫一次,隨處運行
    無論未來選擇何種硬件和軟件平臺,Map Xtreme Java 應用(代碼)都可以方便地被移植和重用,節(jié)約了開發(fā)時間和成本。

    快速應用開發(fā)與部署
    Map Xtreme Java版附帶有Java Beans,可加快應用開發(fā)。因為它可以用于可視化的Internet開發(fā)環(huán)境 (IDEs),例如Borland JBuilder、Oracle Jdeveloper或Sun ONE Studio,開發(fā)商可以采用標準的拖放、設置屬性機制,將對象添加到應用中。

    靈活性
    MapXtreme Java支持大量的網(wǎng)絡開發(fā),包括瘦、中和胖的web瀏覽器客戶端。

    測試環(huán)境
    操作系統(tǒng)
    Solaris 8&9 HP UX11 
    Red Hat Linux Advanced Server 2.1
    Windows 2000 Server Edition 
    Windows Server 2003 Enterprise Edition 

    應用服務器
    Tomcat 4.1.18  
    Weblogic7 
    WebSphere 5.X (需提供J2SE 1.4)
    Sun ONE 7 
    Oracle IAS

    數(shù)據(jù)庫Oracle 8i Spatial (8.1.7) \ Oracle 9i2 Spatial  \Oracle 9i2 Locato \SQL Server 2000 w/SpatialWare 4.6  \Informix 9.3w/SpatialWare 4.5

    系統(tǒng)要求
    MapXtreme Java版的目的是允許在任何支持Java虛擬機的平臺上開發(fā)地圖應用。下面是實施地圖應用的必要條件:
    支持Sun servlet 2.3的servlet容器
    與1.4.1 02或更高版本的虛擬機相兼容的Java 2 平臺
    安裝在服務器上的視頻卡。對Sun Solaris來說,可以是視頻卡,也可以是虛擬框架緩沖(如Java 2D增強圖形功能所需)
    9MB(針對服務器文件)-760MB(全部安裝)的硬驅空間(安裝需要40MB)
    地圖數(shù)據(jù)需要的135MB的硬盤空間
    256MB內(nèi)存

    地址:http://www.mapinfo.com.cn

    posted @ 2007-07-30 12:11 Dong 閱讀(409) | 評論 (0)編輯 收藏
          java2word 是一個在java程序中調(diào)用 MS Office Word 文檔的組件(類庫)。該組件提供了一組簡單的接口,以便java程序調(diào)用他的服務操作Word 文檔。

    這些服務包括:

    打開文檔、新建文檔、
    查找文字、替換文字,
    插入文字、插入圖片、插入表格,
    在書簽處插入文字、插入圖片、插入表格等。
    填充數(shù)據(jù)到表格中
    讀取表格數(shù)據(jù)
    在線文檔:http://www.heavenlake.com/java2word/doc
    下載地址:http://dev.heavenlake.com:81/developer/listthreads?forum=8
    posted @ 2007-07-26 15:35 Dong 閱讀(7089) | 評論 (3)編輯 收藏

    {InstallAnywhere 6 Enterprise}\resource\installer_vms下放著可用的vm,任意選擇一個,把其文件后綴改為zip文件解壓,可得到兩個文件:vm.properties和vm.zip,解壓vm.zip可以得到vm文件夾,其下就是java的jre中的所有內(nèi)容,如果你的JRE是缺省安裝的話可以到C:\Program Files\Java\j2re1.4.2下對照,一目了然,一模一樣,只是在壓縮了C:\Program Files\Java\j2re1.4.2這個文件下的所有內(nèi)容后得到vm.zip,添加一個vm.properties,其內(nèi)容為:

    vm.platform=windows
    vm.platform.flavor=win32
    vm.name=Sun JRE 1.4.2_06 I18N Win32
    vm.exe.path=bin\\java.exe

    然后再次壓縮vm.zip和vm.properties得到了InstallAnywhere所需要的vm包.

    posted @ 2007-07-19 13:49 Dong 閱讀(327) | 評論 (0)編輯 收藏

      
    usertable表是用戶信息表,其中userid為用戶賬號,每個賬號都有所屬于的城市.
    logintable是用戶操作的一張表,兩張表通過userid相連,也就是說logintable中的每條數(shù)據(jù)通過userid標識出來
    現(xiàn)在想統(tǒng)計出各個城市的紀錄條數(shù),還有合格次數(shù)
    比如杭州擁有dong和jack兩個賬號,dong和jack在logintable有兩個紀錄,所以得到2,合格一次.
    現(xiàn)在是想通過一個最簡單的方法,輸出每個城市的情況,如下
    杭州      2      1
    上海      2      1

    posted @ 2007-07-18 13:34 Dong 閱讀(268) | 評論 (1)編輯 收藏
         摘要: 原來在某個網(wǎng)站發(fā)現(xiàn)過一個很好用的可編輯下拉,這兩天因為需要使用再次的去找那個.卻怎么也找不到了,在一番baidu,google終于還是沒有找到.但是無心插柳,發(fā)現(xiàn)了一個更加不錯的,所以貼出來.同時為了保持下拉不被影響,可以將原來的輸入提示下拉去掉,代碼為autocomplete="off"  <!DOCTYPE HTML PUBLIC "-//W3C...  閱讀全文
    posted @ 2007-07-16 10:09 Dong 閱讀(404) | 評論 (0)編輯 收藏

    這幾天真的是徹底成了一個美工了

    posted @ 2007-07-09 17:12 Dong 閱讀(149) | 評論 (0)編輯 收藏
    經(jīng)過幾天的努力,新版本的網(wǎng)站樣式終于搞定了,可能有點不完全。但是個人感覺還是不錯的。
     
    posted @ 2007-06-28 13:54 Dong 閱讀(175) | 評論 (0)編輯 收藏
          解決方法:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt,將“UncheckedValue”的值改為0,即顯示文件擴展名,改為1則是不顯示。
    posted @ 2007-06-26 10:59 Dong 閱讀(1734) | 評論 (0)編輯 收藏
          閑來無事,決定實現(xiàn)我前段時間的一個想法。寫一個五子棋程序,這樣的一個程序,本身來說是沒什么什么難度的。但是在寫的過程中卻真的是遇到了不少的麻煩~!
         /* 到目前最新發(fā)現(xiàn)的問題是UDP嚴重的丟包現(xiàn)象,本程序是基于一個UDP網(wǎng)絡傳輸?shù)?。在寫的時候顯然沒有考慮到UDP的保障機制,原因是我一直覺得UDP應該不會有問題,或者說我覺得簡直會流暢的跟TCP一樣。事實證明我錯了,把五子棋的客戶端放到同學的電腦上后,通信真的是相當?shù)睦щy~邀請進入游戲都沒有成功過。*/
          發(fā)現(xiàn)原來程序不能成功運行的原因是因為自己在寫的時候出了一些錯誤,才會導致雙方不能成功的游戲以及通信!~還在這里責怪UDP機制,呵呵,特地將上方文字“注釋”掉。警戒一下,不過程序終于是跑起來了??磥硪院髮懗绦虺鲥e后應該先找程序本身有沒有問題了,不過第一個游戲終于走上了歷史舞臺。值得慶祝??!
          看來要寫好一個好程序真的有很多東西要照顧到,比如過如果退出游戲沒有System.exit的話,系統(tǒng)會繼續(xù)為程序保留資源,也就是說原先使用的端口也就不會釋放開,下面的通信也會造成不便。漫漫長路啊~~

    界面是模仿QQ游戲中的五子棋
     
    Download the game (使用于公網(wǎng))

    posted @ 2007-06-08 13:16 Dong 閱讀(353) | 評論 (0)編輯 收藏

          今天剛結束看完了這本在一個星期前買的僅僅有180多頁的書,只是買了第一冊。
          坦白說我也沒有任何的文筆可言,原本也沒有想過也寫個關于本書的讀后感,但是總覺得不應該忘記了,雁過留聲,起碼不可以忘記書中說的那些最重要的思想,不然看了也沒有什么效果。所以就有了這篇文章。
          買這本書的原因主要是無意中看到了作者的一個演講,感覺還不錯。作者擁有兩個父親,一個窮爸爸、一個富爸爸,窮爸爸為親生父親,代表了我們這個時代最普通的族群,努力工作努力提高工資。不去或者說很少投資,財務狀況基本上是長期處于負債的。而富爸爸則是一位對財富很有看法的人,擁有著很高的財商,當然最后也成為了夏威儀最有錢的幾個人之一。本書最主要的思想之一是教導人們?nèi)ベ徺I資產(chǎn)而不是負債。所謂的資產(chǎn)就是能夠為我們帶來收益的東西,比如說股票、基金、以及各種投資。而傳統(tǒng)意義上的汽車、房子都不算資產(chǎn)而是負債,因為如果你購買了汽車或者房子,本身會增加你的支出。傳統(tǒng)的理財是減少開銷,而書中所說的理財是讓我們怎么去獲得收益。
          其實本書只能說是對于理財以及財商的一個啟蒙教育,只是將你推到了理財?shù)拈T前。以后需要有很多的品質(zhì)以及能力去建立,還有許多努力要做,但是重點是去嘗試,而不是害怕失敗。就像書中說的一樣:勝利是不害怕失敗。

    posted @ 2007-06-04 23:20 Dong 閱讀(220) | 評論 (0)編輯 收藏
          剛從上海回來,以前用ASP實現(xiàn)的網(wǎng)站被要求改版以及把界面美化一下.突然變成了一美工.
          明顯我的美工功底是不行的!~做這份差讓我有些頭疼,坐到電腦前一個早上才有了一點點成果
     
    管理界面
     

    登陸界面

          還有一大堆工作要做,當然也還有一堆  BUG要修復,看來要好好花點精力上去了.不可以馬虎了事!!
    posted @ 2007-05-29 16:30 Dong 閱讀(146) | 評論 (0)編輯 收藏
          今天剛開始在弄一個JAVA圖表組件,原來剛接觸JAVA的時候記的在書上看到過一句話:開發(fā)有價值的JAVA組件是一件讓人相當興奮的事情。當然我做這個東西顯然沒有讓人興奮的感覺,實在是技術粗糙??偟膩碚f只是對自己的一種鍛煉了。
          說說做的這個組件主要想實現(xiàn)的功能,客戶端用戶可以通過輸入創(chuàng)建Rect對象并調(diào)用對象的getRect()方法生成柱裝圖片,因為目前還沒有做別的形狀的圖形。并且需要輸入?yún)?shù)包括圖象的長和寬,以及表的各項的名稱及數(shù)值。等以后做好了發(fā)代碼上來。下面是生成圖片的雛形。

    posted @ 2007-05-24 13:08 Dong 閱讀(550) | 評論 (0)編輯 收藏
          今天看書的時候看到JSP的內(nèi)置對象pageContext的時候,有兩個疑問,希望大家?guī)兔纯础?br>      ①、ServletRequest   req = new pageContext.getRequest( ) ;
                   String name = req.getParameter("name") ;         // pageContext的這個調(diào)用request的方法和直接使用內(nèi)置對象request有區(qū)別嗎?
     
                   如:String name = request.getParameter("name") ;

          ②、pageContext中有個方法 getServletContext( ) ,使用該方法創(chuàng)建的對象可以在各個頁面被訪問到,那么它的這個方法設置的對象與直接使用application內(nèi)置對象創(chuàng)建的對象有什么區(qū)別嗎?
    posted @ 2007-05-17 22:05 Dong 閱讀(881) | 評論 (2)編輯 收藏
          
     

          我終于覺得自己不是主動做事的那一類人了,前段時間在Teacher的催促下參加了這個比賽。比賽的形式什么的都沒有去了解過,直接就做了一個swing的系統(tǒng),感覺還是挺漂亮的。不過沒什么內(nèi)涵,哈哈。

    登陸界面截圖:

     
                            
     實現(xiàn)的一個地圖功能,鼠標放上到數(shù)字上會顯示一些場館信息什么的:
     
     


    圖型統(tǒng)計功能:

     



    東西比較粗糙,呵呵。目前這個東西還在參加網(wǎng)絡投票,有興趣的朋友可以幫忙投一個。
     地址:http://www.jxecstac.com/workShow.asp?Id=712
    posted @ 2007-05-16 23:19 Dong 閱讀(4885) | 評論 (11)編輯 收藏

         以前剛接觸JAVA不久的時候,突然對串口通信很感興趣,所以參考了comm.jar的例程,做了一個swing背景的小串口通信程序,使用comm.jar,當是為了一個屬性文件的設置搞的焦頭爛額,后來發(fā)現(xiàn)win32com.dll可以直接通過Class.forName方法加載進來。從而達到串口通信的目的。
          現(xiàn)在把以前的代碼貼出來,代碼寫的很爛,但是希望能夠幫到一些朋友。(本程序需要將win32com.dll和程序放到同一包下)。程中沒有書寫注釋,(以前覺得沒有必要) --  代碼下載

    posted @ 2007-05-15 16:21 Dong 閱讀(3555) | 評論 (1)編輯 收藏
          昨天再次被要求打電話給Teacher(有點想不通為什么老師都不會記一下我的號碼),到了晚上才想起這件事。電話一接通,馬上要求我去見他一趟,有些不情愿,但還是去了。到了辦公室原來是一件好事(相對我來說吧),說是一個J2EE的項目,事實上我并沒有做過J2EE的項目,了解一些JAVA語法、概念加上JSP的知道一點點。我相信如果可以真正的接觸一個項目,應該對我來說是一個很大的提高,Teacher說讓我先準備一下相關方面的知道。比如Oracle什么的。
          事實上我有些缺少熱情,因為這個項目并沒有談下來。也就是說還不一定誰接手,我只是站在后方等待的人。,可是DZK曾經(jīng)說過,一個人為了看的見的目標執(zhí)酌三年并不是執(zhí)酌,而是為了一個看不到的目標堅持三年。雖然我似乎沒有那樣的高度。還好的精神還是需要學習的。所以需要平衡一下學習時間了,分一部分出來在J2EE上了。本來想先看完  Thinking in java 先的,原則上來說基礎是最重要的。歡迎高手指點....呵呵。
    posted @ 2007-05-14 21:53 Dong 閱讀(201) | 評論 (0)編輯 收藏
          QUAQUA是一款開源的提供給Swing和Applet使用的JAVA皮膚,前段時間接觸了一下。覺得還是挺漂亮的,下載地址:http://www.randelshofer.ch/quaqua/download.html 
         在界面的構造類的main方法中加入:
     public static void main(String args[])
     {
         System.setProperty( "Quaqua.tabLayoutPolicy","wrap");
      try
      {
          UIManager.setLookAndFeel("ch.randelshofer.quaqua.QuaquaLookAndFeel");    
      }
      catch(Exception e)
      {
                 
      }
     }
    就可以讓你的組件變成MAC風格了
    posted @ 2007-05-14 21:52 Dong 閱讀(4149) | 評論 (4)編輯 收藏
          記得以前看到過一篇文章,說的是JAVA垃圾回收機制。當時討論的是JSP+JAVABEAN的模式能不能夠承擔100人的同時訪問問題,當時看到的一個觀點就是:JAVA垃圾回收機制只會到系統(tǒng)內(nèi)存真的不夠的時候才會啟動去回收產(chǎn)生的垃圾,而那個時候可能會導致網(wǎng)站癱瘓。當時那個帖子的中心思想就是這個。
          昨天在看<Thinking in java>的時候這個問題背證明了一部分,垃圾回收機制是只會到系統(tǒng)內(nèi)存不夠的時候才會啟動去回收我們不需要的內(nèi)存,因為垃圾回收機制本身也是耗費內(nèi)存的東西。當系統(tǒng)能夠很順利的運做的時候也確實沒有必要啟動去占用資源。但是我依然不能相信JAVA+JAVABEAN模式會如此的脆弱。朋友說要相信SUN公司的東西,如果JAVA存在如此明顯的問題,也不可能發(fā)展到現(xiàn)在,我比較贊成這個觀點...雖然不知道正確與否。
    posted @ 2007-05-14 21:51 Dong 閱讀(262) | 評論 (0)編輯 收藏
         前些天做了個小東西,本機上裝的是JDK 6,拿到別人機器上老是報錯,JAR包不能夠正常的打開,說是程序的主類找不到,,當是真的是有點滴汗,明明在自己電腦上是可以的。所以自己坐到電腦前找原因,后來發(fā)現(xiàn)直接運行主類也是不可以的,說的是類版本不對。根據(jù)我敏銳的直覺,我覺得應該是JDK的版本不符合。
          后來終于解決了,我發(fā)現(xiàn)JDK編譯的東西可以向下兼容,不可以向上兼容。也就是說JDK 6上編譯的東西不能在JDK 6以下運行。
    這個結論只是自己電腦上得出的(可能有錯誤)。希望能給得到同樣錯誤的朋友一些幫助。
    posted @ 2007-05-14 21:51 Dong 閱讀(242) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲AV无码国产精品色| 久久精品国产亚洲AV无码偷窥| 亚洲中文久久精品无码| 好看的亚洲黄色经典| 精品亚洲成a人片在线观看| 亚洲fuli在线观看| 处破女第一次亚洲18分钟| 无码AV动漫精品一区二区免费| a毛片在线还看免费网站| 99视频在线看观免费| 女人18毛片a级毛片免费视频| 免费日韩在线视频| 亚洲永久精品ww47| 亚洲国产综合在线| 色欲aⅴ亚洲情无码AV| 久久免费香蕉视频| 国产免费一区二区三区| 又黄又爽的视频免费看| 亚洲国产成人片在线观看无码| 亚洲色欲www综合网| 欧洲亚洲国产精华液| 久章草在线精品视频免费观看| www.黄色免费网站| 免费中文字幕在线观看| 亚洲AV无码AV男人的天堂| 亚洲色大情网站www| gogo免费在线观看| 亚洲免费福利在线视频| heyzo亚洲精品日韩| 亚洲午夜久久影院| 美女视频黄频a免费观看| 国产在线精品免费aaa片| 成人免费视频软件网站| 亚洲熟妇无码另类久久久| 色婷五月综激情亚洲综合| 乱爱性全过程免费视频| 国产在线jyzzjyzz免费麻豆 | 中文字幕手机在线免费看电影 | 啦啦啦中文在线观看电视剧免费版 | 精品国产免费一区二区三区香蕉| 成人毛片免费观看视频大全|