posts - 42,  comments - 84,  trackbacks - 0
            2007年5月29日
          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       
                
                轉(zhuǎn)自:http://lzj0470.javaeye.com/blog/445348
          一、前言
                   cjdbc ( http://c-jdbc.objectweb.org/ ) 是一個(gè)open source的數(shù)據(jù)庫(kù)集群中間件,任何基于jdbc的應(yīng)用都可以通過(guò)它透明地訪問(wèn)數(shù)據(jù)庫(kù)集群,它可以進(jìn)行各個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)復(fù)制,并且可以實(shí)現(xiàn)各個(gè)節(jié)點(diǎn)的查詢負(fù)載均衡。通過(guò)這樣的軟件,偶們可以方便的實(shí)現(xiàn)RAIDb - Redundant Array of Inexpensive Database 廉價(jià)數(shù)據(jù)庫(kù)冗余陣列。
                  大型應(yīng)用隨著用戶量訪問(wèn)越來(lái)越大,增加數(shù)據(jù)庫(kù)存儲(chǔ)和做好數(shù)據(jù)庫(kù)冗余可以增加系統(tǒng)的可靠性和性能。

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

          C-jdbc: 2.0.2

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

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

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



          這里選擇 RAIDb-1 做為 cjdbc RAIDb 機(jī)制。

          四、給兩臺(tái)對(duì)等的 Mysql 建表,假設(shè)兩臺(tái) 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 中來(lái)

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

          七、配置 C-JDBC Controller
          1、在 /usr/local/c-jdbc/config/virtualdatabase 目錄中創(chuàng)建 虛擬數(shù)據(jù)庫(kù)配置文件,并把它命名為 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)建啟動(dò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 &

          八、啟動(dòng) 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 &

          如果啟動(dòng)正常,顯示的信息如下:

          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 世紀(jì)龍 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ù),如果兩個(gè) Mysql Node 都有相同的數(shù)據(jù),說(shuō)明 C-JDBC 環(huán)境搭建成功。

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

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

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

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

          1、桌面圖標(biāo)


          2、登錄界面


          3、登錄效果圖


          4、主界面


          是不是覺(jué)得還不錯(cuò)呢?JAVA也可以揚(yáng)眉吐氣開發(fā)出這樣的桌面系統(tǒng),可惜的是因?yàn)槭褂玫搅薙WT,所以整個(gè)項(xiàng)目并不能跨平臺(tái),放到linux系統(tǒng)下去運(yùn)行。
          好了先理一理,發(fā)一張項(xiàng)目的原理圖


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

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

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

            開發(fā)的時(shí)候有時(shí)候會(huì)碰到這樣的情況,我們?cè)趯懗绦虻臅r(shí)候并不知道需要調(diào)用某個(gè)對(duì)象的哪個(gè)方法,只有程序運(yùn)行后,我們才能夠知道。或許我們需要根據(jù)客戶端傳過(guò)來(lái)的某個(gè)String參數(shù)的值來(lái)判斷我們應(yīng)該執(zhí)行哪個(gè)方法。在這種情況下JAVA的反射執(zhí)行就可以幫上忙了。下面是我做的一個(gè)簡(jiǎn)單的測(cè)試代碼,提供給大家做個(gè)參考。

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

          /**
           * 
          @author Dong
           * 測(cè)試JAVA reflect機(jī)制
           
          */

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

          研究代碼以后發(fā)現(xiàn),是因?yàn)榍懊嬉呀?jīng)執(zhí)行過(guò)一次request.request.getRequestDispatcher().forward()
          但是后面的request.request.getRequestDispatcher().forward()依然被執(zhí)行到了!

          那么很有理由相信request.request.getRequestDispatcher().forward()跳轉(zhuǎn)本身是不會(huì)返回什么,也不會(huì)終止程序體的執(zhí)行!
          程序體后面該執(zhí)行的還是會(huì)執(zhí)行!
          posted @ 2008-04-17 10:28 Dong 閱讀(7752) | 評(píng)論 (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>
          使用如上配置的時(shí)候一直報(bào)這個(gè)
          org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'錯(cuò)誤

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

          <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 閱讀(2696) | 評(píng)論 (1)編輯 收藏
           

          1、 解決Action過(guò)多問(wèn)題

          通過(guò)DispatchAction的方式

          建立一個(gè)繼承自DispatchActionAction

          此類Action允許我們?cè)诒韱沃袔в袇?shù),根據(jù)參數(shù)執(zhí)行Action中的不同方法,以此實(shí)現(xiàn)Action的多用

          步驟

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

               在表單頁(yè)面中添加一個(gè)隱藏域值,假設(shè)為codi   value=”insert”

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

          那么當(dāng)表單提交的時(shí)候,Action中的insert()方法就會(huì)被執(zhí)行,可以通過(guò)改隱藏域中的值的方式來(lái)改變Action要執(zhí)行的方法

          2、 解決ActionForm過(guò)多的問(wèn)題

          通過(guò)動(dòng)態(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

          更改相應(yīng)的action中的attributenameabcForm

          這樣就配置好了一個(gè)動(dòng)態(tài)的ActionForm

          3、 解決動(dòng)態(tài)ActionForm的驗(yàn)證問(wèn)題

          通過(guò)動(dòng)態(tài)驗(yàn)證ActonForm的方式,即DynaValidatorForm

          步驟

               Struts-config.xml

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

               配置一個(gè)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配置相應(yīng)的action,添加validate=true添加驗(yàn)證支持

              添加struts Plugin插件

          設(shè)置plugin class為org.apache.struts.validator.ValidatorPlugIn

          添加propertys

          Propertyà pathnames

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

          這樣一個(gè)驗(yàn)證框架就配置好了!

          posted @ 2008-02-12 13:47 Dong 閱讀(3492) | 評(píng)論 (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());

          對(duì)于循環(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"值,風(fēng)格為wcf,如果寫入的是數(shù)字則使用jxl.write.Number
          sheet.addCell(name);
          try
             {
              book.write();
              book.close();
             }
             catch(WriteException e){}
             catch(IOException e){}

          單元格風(fēng)格:

          設(shè)置邊框—
          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)兩個(gè)單元格

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

          還有一點(diǎn)需要說(shuō)明一下,JXL組件對(duì)于公式的支持似乎比Apache的poi好
          posted @ 2008-02-01 16:16 Dong 閱讀(4981) | 評(píng)論 (2)編輯 收藏
          原來(lái)弄過(guò)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 閱讀(2962) | 評(píng)論 (6)編輯 收藏

          Junit主要是用來(lái)對(duì)我們的程序代碼進(jìn)行白盒測(cè)試的一個(gè)組件。
          首先我們需要得到Junit.jar的包,可以到www.junit.org下載得到。
          下載以后將我們的Junit.jar包添加到工程里面,那么OK,就可以開始對(duì)我們的程序進(jìn)行測(cè)試了。
          對(duì)一個(gè)文件進(jìn)行測(cè)試的時(shí)候需要自己制作一個(gè)類并繼承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"));
           }}

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

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

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

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

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

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

          個(gè)分別實(shí)現(xiàn)了這兩個(gè)接口的類,我們只需要直接繼承就可以,它們分別為BodyTagSupport、TagSupport
          繼承兩個(gè)類中的一個(gè)就可以完成一個(gè)屬于自己的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標(biāo)準(zhǔn)文檔的一種,可以通過(guò)tld文件配置出Taglib的各種標(biāo)記所對(duì)應(yīng)的類實(shí)現(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>//標(biāo)簽描述
           <jspversion>1.1</jspversion>
           <shortname>mytag</shortname>
           <uri></uri>
           <tag>
            <name>hello</name>//標(biāo)簽方法名
            <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>
          這樣一個(gè)自定義標(biāo)記就寫好了,但是要使用它我們還需要在項(xiàng)目中配置
          3、項(xiàng)目部署文件web.xml
          <taglib>
           <taglib-uri>hello</taglib-uri>
           <taglib-location>/WEB-INF/Web.tld</taglib-location>
          </taglib>
          4、在JSP頁(yè)面中調(diào)用Taglib
          <%@ taglib uri="hello" prefix="show" %>
          這樣我們就完成了所有配置
          在頁(yè)面中使用類似<show:hello name="dong"/>就可以看到我們配置的Taglib起的作用了

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

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

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

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

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

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

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

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

          posted @ 2007-12-13 01:02 Dong 閱讀(577) | 評(píng)論 (0)編輯 收藏
          Struts 使用 Model 2 架構(gòu)。Struts 的ActionServlet 控制導(dǎo)航流。其他Struts 類,比如
          Action, 用來(lái)訪問(wèn)業(yè)務(wù)邏輯類。當(dāng) ActionServlet 從容器接收到一個(gè)請(qǐng)求,它使用URI (或者
          路徑“path”) 來(lái)決定那個(gè)Action 將用來(lái)處理請(qǐng)求。一個(gè) Action可以校驗(yàn)輸入,并且訪問(wèn)業(yè)務(wù)
          層以從數(shù)據(jù)庫(kù)或其他數(shù)據(jù)服務(wù)中檢索信息。
          為校驗(yàn)輸入或者使用輸入來(lái)更新數(shù)據(jù)庫(kù), Action 需要知道什么指被提交上來(lái)。并不是
          強(qiáng)制每個(gè)Action 從請(qǐng)求中抓取這些值,而是由 ActionServlet 將輸入綁定到JavaBean中。
          輸入 bean是Struts ActionForm c類的子類。ActionServlet 通過(guò)查找請(qǐng)求的路徑可以決定使用
          哪個(gè)ActionForm,Action 也是通過(guò)同樣的方法選取的。ActionForm 擴(kuò)展
          org.apache.struts.action.ActionForm類。每個(gè)都必須以HTTP 響應(yīng)進(jìn)行應(yīng)答。 通
          常, Struts
          Action 并不自行加工響應(yīng)信息,而是將請(qǐng)求轉(zhuǎn)發(fā)到其他資源,比如JSP 頁(yè)面。Struts 提
          供一個(gè)ActionForward 類,用來(lái)將一個(gè)頁(yè)面的路徑存儲(chǔ)為邏輯名稱。當(dāng)完成業(yè)務(wù)邏輯后,
          Action 選擇并向Servlet返回一個(gè)ActionForward。Servlet 然后使用存儲(chǔ)在ActionForward 對(duì)
          象中的路徑來(lái)調(diào)用頁(yè)面完成響應(yīng)。
          Struts 將這些細(xì)節(jié)都綁定在一個(gè)ActionMapping 對(duì)象中。每個(gè)ActionMapping 相對(duì)于一
          個(gè)特定的路徑。當(dāng)某個(gè)路徑被請(qǐng)求時(shí),Servlet 就查詢ActionMapping 對(duì)象。ActionMapping
          對(duì)象告訴servlet,哪個(gè)Actions, ActionForms, 和 ActionForwards 將被使用。
          所有這些細(xì)節(jié),關(guān)于Action, ActionForm, ActionForward, ActionMapping,以及其
          他一些東西,都在struts-config.xml 文件中定義。 ActionServlet 在啟動(dòng)時(shí)讀取這個(gè)配置文件,
          并創(chuàng)建一個(gè)配置對(duì)象數(shù)據(jù)庫(kù)。在運(yùn)行時(shí),Struts 應(yīng)用根據(jù)文件創(chuàng)建的配置對(duì)象,而不是文件
          本身
          posted @ 2007-12-08 10:52 Dong 閱讀(256) | 評(píng)論 (0)編輯 收藏
          <head>
          <title>無(wú)標(biāo)題文檔</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>標(biāo)題一</span></a></li>
          <li><a href="#" onmouseover="switchTag('content2');this.blur();"><span>標(biāo)題二</span></a></li>
          <li><a href="#" onmouseover="switchTag('content3');this.blur();"><span>標(biāo)題三</span></a></li>
          <li><a href="#" onmouseover="switchTag('content4');this.blur();"><span>標(biāo)題四</span></a></li>
          <li><a href="#" onmouseover="switchTag('content5');this.blur();"><span>標(biāo)題五</span></a></li>
          </ul>
          </div>
          <div id="content" class="content1">

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

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

                  最近開發(fā)個(gè)后臺(tái)系統(tǒng),使用到了eWebEditor,原先并沒(méi)有使用過(guò)相關(guān)方面的在線編輯器。所以一用起來(lái)問(wèn)題一大堆!都不知道用什么編輯器好,研究了FCKEditor等一些國(guó)外的編輯器后還是覺(jué)得應(yīng)該支持國(guó)貨!
                   選頂了編輯器后之后還算順利,但是沒(méi)過(guò)多久就出現(xiàn)了另外一個(gè)問(wèn)題,使用eWebEditor編輯后并保存到數(shù)據(jù)庫(kù)中的字符串是以HTML源碼的形式!這樣上傳和前臺(tái)顯示是都沒(méi)有問(wèn)題的。但是后臺(tái)中有個(gè)修改新聞的功能,當(dāng)我將HTML形式的代碼傳遞給eWebEditor的時(shí)候,驚喜就出現(xiàn)了!!編輯器顯然不買我的帳~~~沒(méi)反應(yīng)???
                  下面的就是調(diào)用編輯器的JS代碼,其中value中的content值代表Html源碼!!然后eWebEditor就不能顯示出來(lái),也不報(bào)錯(cuò),就是在頁(yè)面中空了一塊,哪位仁兄知道解決辦法,麻煩告訴一下,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)過(guò)一夜奮戰(zhàn),以及對(duì)于問(wèn)題的研究。終于找到解決方法了,步驟如下:
              1、講content的內(nèi)容進(jìn)行Html編譯,Server.HTMLEncode(content)
              2、第二個(gè)問(wèn)題將隱藏的文本框改成文本域,就可以了
          posted @ 2007-11-08 23:59 Dong 閱讀(954) | 評(píng)論 (2)編輯 收藏
          硬盤中出現(xiàn)了兩個(gè)病毒程序SVOHOST.EXE 和AUTORUN.INF文件。
          1)打開任務(wù)管理器將SVOHOST.EXE結(jié)束任務(wù)
          2)運(yùn)行 cmd
          進(jìn)入出現(xiàn)問(wèn)題的盤符,如e:
          輸入:dir/a
          看看有沒(méi)有SVOHOST.EXE 和AUTORUN.INF
          如果有
          則輸入:attrib -a -s -h -r sxs.exe
                  attrib -a -s -h -r autorun.inf
          分別執(zhí)行(目的是取消這兩個(gè)文件的隱藏屬性)
          3)然后 del sxs.exe
           del autorun.inf
          (目的是刪除文件)
          4)運(yùn)行 regedit
          搜索 sxs.exe
          在注冊(cè)表中找到后直接刪除所有的sxs.exe文件
          5)最后運(yùn)行msconfig 在啟動(dòng)項(xiàng)中把SVOHOST.EXE去掉
          posted @ 2007-08-25 12:58 Dong 閱讀(1808) | 評(píng)論 (3)編輯 收藏

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

          技術(shù)細(xì)節(jié)

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

          現(xiàn)在Flash的應(yīng)用確實(shí)越來(lái)越廣泛,無(wú)論動(dòng)畫、導(dǎo)航以及一些復(fù)雜的組件,都可以使用Flash技術(shù)很好的解決。Flash的前景我是非常看好的。FusionCharts就是其中一個(gè)非常好的代表!!應(yīng)該來(lái)說(shuō)應(yīng)用起來(lái)也是非常方便的。而且功能強(qiáng)大、生成的圖表動(dòng)態(tài)、而且美觀。

          這個(gè)就是FusionCharts免費(fèi)版本生成的一張圖表




          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 閱讀(1177) | 評(píng)論 (1)編輯 收藏
          server.xml中的<host></host>中寫入
          <Context   path=""   docBase="E:\myweb"   debug="0"   reloadable="true"   crossContext="true"   />
          //科學(xué)計(jì)數(shù)法的轉(zhuǎn)換//
          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 閱讀(221) | 評(píng)論 (0)編輯 收藏

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

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

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

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

          快速應(yīng)用開發(fā)與部署
          Map Xtreme Java版附帶有Java Beans,可加快應(yīng)用開發(fā)。因?yàn)樗梢杂糜诳梢暬腎nternet開發(fā)環(huán)境 (IDEs),例如Borland JBuilder、Oracle Jdeveloper或Sun ONE Studio,開發(fā)商可以采用標(biāo)準(zhǔn)的拖放、設(shè)置屬性機(jī)制,將對(duì)象添加到應(yīng)用中。

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

          測(cè)試環(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 

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

          數(shù)據(jù)庫(kù)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虛擬機(jī)的平臺(tái)上開發(fā)地圖應(yīng)用。下面是實(shí)施地圖應(yīng)用的必要條件:
          支持Sun servlet 2.3的servlet容器
          與1.4.1 02或更高版本的虛擬機(jī)相兼容的Java 2 平臺(tái)
          安裝在服務(wù)器上的視頻卡。對(duì)Sun Solaris來(lái)說(shuō),可以是視頻卡,也可以是虛擬框架緩沖(如Java 2D增強(qiáng)圖形功能所需)
          9MB(針對(duì)服務(wù)器文件)-760MB(全部安裝)的硬驅(qū)空間(安裝需要40MB)
          地圖數(shù)據(jù)需要的135MB的硬盤空間
          256MB內(nèi)存

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

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

          這些服務(wù)包括:

          打開文檔、新建文檔、
          查找文字、替換文字,
          插入文字、插入圖片、插入表格,
          在書簽處插入文字、插入圖片、插入表格等。
          填充數(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 閱讀(7091) | 評(píng)論 (3)編輯 收藏

          {InstallAnywhere 6 Enterprise}\resource\installer_vms下放著可用的vm,任意選擇一個(gè),把其文件后綴改為zip文件解壓,可得到兩個(gè)文件:vm.properties和vm.zip,解壓vm.zip可以得到vm文件夾,其下就是java的jre中的所有內(nèi)容,如果你的JRE是缺省安裝的話可以到C:\Program Files\Java\j2re1.4.2下對(duì)照,一目了然,一模一樣,只是在壓縮了C:\Program Files\Java\j2re1.4.2這個(gè)文件下的所有內(nèi)容后得到vm.zip,添加一個(gè)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 閱讀(329) | 評(píng)論 (0)編輯 收藏

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

          posted @ 2007-07-18 13:34 Dong 閱讀(270) | 評(píng)論 (1)編輯 收藏
               摘要: 原來(lái)在某個(gè)網(wǎng)站發(fā)現(xiàn)過(guò)一個(gè)很好用的可編輯下拉,這兩天因?yàn)樾枰褂迷俅蔚娜フ夷莻€(gè).卻怎么也找不到了,在一番baidu,google終于還是沒(méi)有找到.但是無(wú)心插柳,發(fā)現(xiàn)了一個(gè)更加不錯(cuò)的,所以貼出來(lái).同時(shí)為了保持下拉不被影響,可以將原來(lái)的輸入提示下拉去掉,代碼為autocomplete="off"  <!DOCTYPE HTML PUBLIC "-//W3C...  閱讀全文
          posted @ 2007-07-16 10:09 Dong 閱讀(406) | 評(píng)論 (0)編輯 收藏

          這幾天真的是徹底成了一個(gè)美工了

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

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

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

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

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

          登陸界面

                還有一大堆工作要做,當(dāng)然也還有一堆  BUG要修復(fù),看來(lái)要好好花點(diǎn)精力上去了.不可以馬虎了事!!
          posted @ 2007-05-29 16:30 Dong 閱讀(148) | 評(píng)論 (0)編輯 收藏
          主站蜘蛛池模板: 沙田区| 和平区| 进贤县| 湘潭市| 灌南县| 深州市| 泗洪县| 赣州市| 新干县| 三河市| 彝良县| 金山区| 罗城| 玉林市| 固安县| 鹿邑县| 重庆市| 平邑县| 疏附县| 政和县| 东方市| 米脂县| 榆社县| 浦江县| 常德市| 航空| 乐清市| 定南县| 莱阳市| 库尔勒市| 方城县| 平远县| 靖江市| 瓮安县| 额济纳旗| 镇康县| 河东区| 高雄县| 三原县| 青河县| 五峰|