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

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

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

    banxitan

    統(tǒng)計

    留言簿(2)

    閱讀排行榜

    評論排行榜

    2009年4月21日 #

    Android Activity MainThread 中不能執(zhí)行http通信解決辦法

    今天在做離線文件傳輸時。用HTTP上傳文件。程序一運行 報如下的錯誤
    android.os.NetworkOnMainThreadException

    原因是Google從3開始,強(qiáng)制默認(rèn)禁止UI主線程發(fā)起通信請求 

    解決辦法: 

    把通信的代碼轉(zhuǎn)移到子線程里去做, 比較靠譜的是new一個AyncTask,在里面做通信

                              有幾個細(xì)節(jié)性的問題是,

                                    第一, 一般原有通信的代碼都是共通的API, 被許多個Activity調(diào)用, 一個良好的修改方法是在共通API里面new AyncTask

                                   第二, 通信的API一般來說都是同步的, 你通信,然后畫面主線程需要堵塞住,等待API的通信結(jié)果,再決定下面的業(yè)務(wù)邏輯的走向。

    所以,這塊可以采取 AyncTask.get(), 讓主線程堵塞,直到通信結(jié)束。 當(dāng)然,如果你需要將通信異步的話, 可以用Handler機(jī)制來解決


    具體調(diào)用代碼如下:HTTP異

    步請求

    package com.qqtech.ucstar.utils;

    import java.io.File;
    import java.io.IOException;
    import java.nio.charset.Charset;

    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.mime.HttpMultipartMode;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.impl.client.DefaultHttpClient;

    import android.os.AsyncTask;

    public class HttpReqTask extends AsyncTask<Object, Object, HttpResponse> {

    @Override
    protected HttpResponse doInBackground(Object arg0) {
    String fileUploadUrl
    = (String) arg0[0];
    String streamid
    = (String) arg0[1];
    File file
    = (File) arg0[2];
    //boolean paramBoolean = Boolean.parseBoolean((String) arg0[3]);
    //String paramString3 = (String) arg0[4];
    HttpClient localHttpClient = new DefaultHttpClient();
    //String str1 = "fileName";
    File localFile = file;
    try {
    if ((localFile == null) || (!localFile.exists()))
    throw new IOException("文件不存在:" + localFile);
    }
    catch (IOException e1) {
    e1.printStackTrace();
    }

    HttpPost localPostMethod
    = new HttpPost(fileUploadUrl+"?streamid="+streamid+"&fileencode=UTF-8");
    //MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null, Charset.forName("UTF-8"));
    try {
    FileBody bin
    = new FileBody(file);
    reqEntity.addPart(
    "file", bin);
    localPostMethod.setEntity(reqEntity);
    HttpResponse response
    = localHttpClient.execute(localPostMethod);
    return response;
    }
    catch (Exception e) {
    e.printStackTrace();
    }

    return null;
    }


    }



    調(diào)用代碼如下:


    Object[] param = new Object[5];
         param[0] = answer.getUploadURL();
         param[1] = answer.getStreamid();
         param[2] = new File(answer.getFileURL());
         param[3] = "false";
         param[4] = "";
         AsyncTask res = new HttpReqTask().execute(param);
         HttpResponse rep = null;
         rep = (HttpResponse) res.get();
         if (rep.getStatusLine().getStatusCode() == 200) {
          System.out.println("文件上傳成功");
         }else{
          System.out.println("文件上傳失敗");
         }
        }



    posted @ 2013-07-11 10:51 MikyTan 閱讀(1086) | 評論 (0)編輯 收藏

    修改模擬器DNS方法

    今天在做手機(jī)終端開發(fā)時,發(fā)現(xiàn)連上域名服務(wù)器老是連不上,而直接用IP連接是OK的,初步懷凝是DNS問題引起來,經(jīng)查相關(guān)的資料,現(xiàn)記錄如下:

    Android模擬器默認(rèn)的地址是10.0.2.3,默認(rèn)的DNS也是10.0.2.3,而一般電腦的IP都是192.168.1.100之類的,不在同一個網(wǎng)段。所以就會出現(xiàn)電腦可以上網(wǎng)但是模擬器不能上網(wǎng)的情況。其實設(shè)置方法很簡單,只要把模擬器的默認(rèn)DNS設(shè)置成電腦的DNS地址即可。
    第一步:用系統(tǒng)的命令進(jìn)入Android開發(fā)包的tools目錄
     cd X:\...\android-sdk-windows\tool
    第二布:使用adb的shell,確認(rèn)系統(tǒng)的各項屬性
    adb shell
    getprop 
    getprop會列出系統(tǒng)當(dāng)前的各項屬性
    第三步:得到模擬器的DNS地址
    在結(jié)果里可以看到:
    [net.dns1]: [10.0.2.3]
    [net.dns2]: [10.0.2.4]
    [net.dns3]: [10.0.2.5]
    [net.dns4]: [10.0.2.6]
    第四步:把dns改成我們自己的DNS
    setprop net.dns1 192.168.1.1

    posted @ 2013-06-04 20:24 MikyTan 閱讀(1273) | 評論 (0)編輯 收藏

    JAVA 連接 ORCLE RAC連接URL串

    連接的URL串

    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT

    =1521))(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=

    on))(CONNECT_DATA=(SERVICE_NAME=gs)))


    posted @ 2013-05-21 16:48 MikyTan 閱讀(256) | 評論 (0)編輯 收藏

    Oralce 監(jiān)聽器啟動


    啟動      lsnrctl start
    狀態(tài)      lsnrctl status
    關(guān)閉      lsnrctl  stop

    posted @ 2013-05-11 14:47 MikyTan 閱讀(181) | 評論 (0)編輯 收藏

    Oracle 導(dǎo)出、導(dǎo)入某用戶所有數(shù)據(jù)(包括表、視圖、存儲過程...)


    導(dǎo)出命令:exp 用戶名/密碼@數(shù)據(jù)庫 owner=用戶名 file=文件存儲路徑(如:F:\abcd.dmp)

    測試截圖:exp ZM/sql123@ORCL owner=ZM file=F\abcd.dmp



    導(dǎo)入命令:imp 用戶名/密碼@數(shù)據(jù)庫 fromuser=用戶名 touser=用戶名 file=d:\cu.dmp ignore=y

     imp:命令類型  

    cu/mycu@db:導(dǎo)入的數(shù)據(jù)庫登陸(用戶名/密碼@數(shù)據(jù)庫)  

    fromuser:文件的指定用戶

     touser:指定導(dǎo)入到當(dāng)前登錄的數(shù)據(jù)庫某個用戶  

    file:需要導(dǎo)入的數(shù)據(jù)文件  

    ignore:是否忽略創(chuàng)建錯誤

     

    測試截圖:

    imp ZM/sql123@ORCL fromuser=ZM touser=SZZM file=F:\test.dmp ignore=y





    posted @ 2013-05-11 09:59 MikyTan 閱讀(392) | 評論 (0)編輯 收藏

    linux環(huán)境下的rmi常見問題

    linux環(huán)境下的rmi常見問題

    問題一:RMI服務(wù)提供程序運行在Windows操作系統(tǒng)下,RMI服務(wù)可以正常訪問,但將RMI服務(wù)提供程序部署到Linux操作系統(tǒng)下后,RMI服務(wù)無法訪問,提示

    org.springframework.remoting.RemoteConnectFailureException:

    Cannot connect to remote service [rmi://192.168.0.106:1199/ItemRetag]; nested exception is java.rmi.ConnectException: Connection refused to host: 127.0.0.1; ……   
     解決辦法:在加載RMI服務(wù)之前將當(dāng)前服務(wù)器的IP指定給hostName,如 System.setProperty("java.rmi.server.hostname", "192.168.100.7");或者修改/etc/hosts文件,在這個文件中加 192.168.100.54  testlinux1 localhost.localdomain localhost 就行,或者將/etc/hosts文件中默認(rèn)的127.0.0.1改成當(dāng)前機(jī)器的IP即可!

    問題二:java.rmi.server.ExportException: internal error: ObjID already in use Caused by: java.rmi.server.ExportException: internal error: ObjID already in use……

    出現(xiàn)這種問題及有可能是/etc/hosts文件中指定的IP并不是當(dāng)前服務(wù)器的真實IP,RMI在初始化時注冊服務(wù)失敗。

    通過System.out.println(InetAddress.getLocalHost().toString());查看當(dāng)前主機(jī)的IP是否為真實IP,如顯示為SIMBANK/220.250.64.24,而真實IP為192.168.1.2         

    解決辦法:修改/etc/hosts文件中錯誤的IP即可,將:

    220.250.64.24          SIMBANK
    修改為

    192.168.1.2          SIMBANK

    posted @ 2013-05-08 20:26 MikyTan 閱讀(3783) | 評論 (0)編輯 收藏

    IBM JDK 、SUN JDK、HP JDK如何產(chǎn)生Heapdump文件

    JAVA中,通過分析Heapdump文件可以檢查程序是否存在內(nèi)存泄露,但是這個文件一般是在程序遇到致命問題時才會產(chǎn)生,而如何事前生成這個文件,從而在程序尚末崩潰前找出問題的所在。

    以下記述了各個版本的JDK產(chǎn)生DUMP文件的方法:

    UN JDK生成Heapdump文件只需要在tomcat啟動腳本中增加 HeapDumpOnOutOfMemoryError 參數(shù)
    此參數(shù)需要Java SE release 5.0 update 14 或以上支持

    設(shè)置示例:
    set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx800m -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpOnCtrlBreak

    IBM JDK生成Heapdump文件的開關(guān):
    — export IBM_HEAPDUMP=true
    — export IBM_HEAP_DUMP=true
    — export IBM_HEAPDUMP_OUTOFMEMORY=true
    — export IBM_JAVADUMP_OUTOFMEMORY=true
    — export IBM_JAVACORE_OUTOFMEMORY=true
    — export IBM_HEAPDUMPDIR=<directory_path>

    HP JDK生成Heapdump文件需要在在環(huán)境變量上,加上export _JAVA_HEAPDUMP=1

    posted @ 2013-03-26 16:03 MikyTan 閱讀(1102) | 評論 (0)編輯 收藏

    MySql 的批量操作,要加rewriteBatchedStatements參數(shù)

    今天在做某項目的POC測試,甲方提供了一個三十萬記錄的TXT數(shù)據(jù)文件,需要把該文件的記錄插入到數(shù)據(jù)庫中,由于項目部的同事在搭建測試環(huán)境中用的是Mysql數(shù)據(jù)庫,在把數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中用的是JDBC的批處理。代碼如下
    private void batchParseGroup(){
            Connection con
    = null;
            PreparedStatement ps 
    =null;
            
    try {
                con
    = DbConnectionManager.getConnection();
                con.setAutoCommit(
    false);
                String sql 
    = " insert into jivegroup(uri,groupname,pgroupid,description,creationdate,modificationdate,priority,selfpriority) values(?,?,?,?,?,?,?,?)";
                ps
    = con.prepareStatement(sql);
                
    for(int i=0;i<groupList.size();i++){
                    Group group 
    = groupList.get(i);
                    ps.setString(
    1, group.getUri());
                    ps.setString(
    2, group.getName());
                    ps.setString(
    3, group.getPgroupId());
                    ps.setString(
    4, group.getName());
                    ps.setString(
    5""+System.currentTimeMillis());
                    ps.setString(
    6""+System.currentTimeMillis());
                    ps.setInt(
    7, group.getPriority());
                    ps.setInt(
    8, group.getPriority());
                    ps.addBatch();
                    
    if(i%100==0){
                        ps.executeBatch();
                    }

                }

                con.commit();
                ps.executeBatch();
            }
     catch (SQLException e) {
                e.printStackTrace();
            }
    finally{
                DbConnectionManager.closeConnection(ps, con);
            }

        }

    在測試時,發(fā)現(xiàn)三十萬的數(shù)據(jù)居然需要十分鐘左右的時間。首先想到的就是Mysql的相關(guān)配置是不是有問題,反復(fù)修改了Mysql的相應(yīng)配置參數(shù),收效甚微。

    在Mysql的官網(wǎng)上查到如下:
     http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-configuration-properties.html

    關(guān)于rewriteBatchedStatements參數(shù),Mysql官方的說明:

    Should the driver use multiqueries (irregardless of the setting of "allowMultiQueries") as well as rewriting of prepared statements for INSERT into multi-value inserts when executeBatch() is called? Notice that this has the potential for SQL injection if using plain java.sql.Statements and your code doesn't sanitize input correctly. Notice that for prepared statements, server-side prepared statements can not currently take advantage of this rewrite option, and that if you don't specify stream lengths when using PreparedStatement.set*Stream(), the driver won't be able to determine the optimum number of parameters per batch and you might receive an error from the driver that the resultant packet is too large. Statement.getGeneratedKeys() for these rewritten statements only works when the entire batch includes INSERT statements.



    解決辦法:
          下載最新的JDBC的驅(qū)動程序。
          MYSQL URL的配置參數(shù)如下:
          jdbc:mysql://54.200.190.80:3306/ccb_ucstar?rewriteBatchedStatements=true

    經(jīng)過測試。三十多萬的數(shù)據(jù)。70秒內(nèi)搞定!

    posted @ 2013-03-13 20:38 MikyTan 閱讀(2796) | 評論 (0)編輯 收藏

    Linux 使用 enca 工具進(jìn)行文件批量格式轉(zhuǎn)換

    今天在做項目中,供應(yīng)源提供了一小段的源代碼,但文件編碼格式是GBK的,而我公司建工程時統(tǒng)一用的UTF-8編碼,導(dǎo)進(jìn)來后出現(xiàn)亂碼。為了解決這一問題,在網(wǎng)上查找了相關(guān)的資料,發(fā)現(xiàn)可以用 enca工具來進(jìn)行批量轉(zhuǎn)換

    1)下載enca工具
      wget http://dl.cihar.com/enca/enca-1.13.tar.gz
    2) tar -zxvf enca-1.13.tar.gz
    3)./configure
    4) make
    5) make install


    轉(zhuǎn)換命令
      enca -L zh_CN -x UTF-8 *.java


    posted @ 2012-09-17 11:42 MikyTan 閱讀(1396) | 評論 (0)編輯 收藏

    沒有那個文件或目錄”的解決方法

    如果sh目錄存在且腳本無誤,最可能是原因是在windows下寫的腳本是dos格式的,放在Linux下編碼不識別,解決方法是使用dos2unix命令轉(zhuǎn)一下,即輸入: dos2unix 文件名

    posted @ 2012-08-18 16:01 MikyTan 閱讀(373) | 評論 (0)編輯 收藏

    畢業(yè)心得。。。。。

    畢業(yè)后,有人工作,有人繼續(xù)上學(xué),大家千萬不要錯過這篇文章,能看到這篇文章也是一種幸運,真的受益匪淺,對我有很大啟迪,這篇文章將會改變我的一生,真的太好了,希望與有緣人分享,也希望對有緣人有所幫助!這篇文章有點長,但是希望你能夠耐心的看完,看完之后有種“相見恨晚”的感覺,特別激動,希望大家好好的珍藏這篇文章,相信多年以后,再來看這篇文章,一定有不同的感覺。

     

            正如”打工皇帝”唐駿說:”我覺得有兩種人不要跟別人爭利益和價值回報。第一種人就是剛剛進(jìn)入企業(yè)的人,頭5年千萬不要說你能不能多給我一點兒工資,最重要的是能在企業(yè)里學(xué)到什么,對發(fā)展是不是有利……”

     

            人總是從平坦中獲得的教益少,從磨難中獲得的教益多;從平坦中獲得的教益淺,從磨難中獲得的教益深。一個人在年輕時經(jīng)歷磨難,如能正確視之,沖出黑暗,那就是一個值得敬慕的人。最要緊的是先練好內(nèi)功,畢業(yè)后這5年就是練內(nèi)功的最佳時期,練好內(nèi)功,才有可能在未來攀得更高。 

     

            出路在哪里?出路在于思路!

     

      其實,沒有錢、沒有經(jīng)驗、沒有閱歷、沒有社會關(guān)系,這些都不可怕。沒有錢,可以通過辛勤勞動去賺;沒有經(jīng)驗,可以通過實踐操作去總結(jié);沒有閱歷,可以一步一步去積累;沒有社會關(guān)系,可以一點一點去編織。但是,沒有夢想、沒有思路才是最可怕的,才讓人感到恐懼,很想逃避!

     

      人必須有一個正確的方向。無論你多么意氣風(fēng)發(fā),無論你是多么足智多謀,無論你花費了多大的心血,如果沒有一個明確的方向,就會過得很茫然,漸漸就喪失了斗志,忘卻了最初的夢想,就會走上彎路甚至不歸路,枉費了自己的聰明才智,誤了自己的青春年華。 

     

        荷馬史詩《奧德賽》中有一句至理名言:”沒有比漫無目的地徘徊更令人無法忍受的了。”畢業(yè)后這5年里的迷茫,會造成10年后的恐慌,20年后的掙扎,甚至一輩子的平庸。如果不能在畢業(yè)這5年盡快沖出困惑、走出迷霧,我們實在是無顏面對10年后、20年后的自己。畢業(yè)這5年里,我們既有很多的不確定,也有很多的可能性。

     

      畢業(yè)這5年里,我們既有很多的待定,也有很多的決定。

     

      迷茫與困惑誰都會經(jīng)歷,恐懼與逃避誰都曾經(jīng)有過,但不要把迷茫與困惑當(dāng)作可以自我放棄、甘于平庸的借口,更不要成為自怨自艾、祭奠失意的苦酒。生命需要自己去承擔(dān),命運更需要自己去把握。在畢業(yè)這5年里,越早找到方向,越早走出困惑,就越容易在人生道路上取得成就、創(chuàng)造精彩。無頭蒼蠅找不到方向,才會四處碰壁;一個人找不到出路,才會迷茫、恐懼。 

     

        生活中,面對困境,我們常常會有走投無路的感覺。不要氣餒,堅持下去,要相信年輕的人生沒有絕路,困境在前方,希望在拐角。只要我們有了正確的思路,就一定能少走彎路,找到出路! 

     

      成功的人不是贏在起點,而是贏在轉(zhuǎn)折點。 

     

      不少剛剛畢業(yè)的年輕人,總是奢望馬上就能找到自己理想中的工作。然而,很多好工作是無法等來的,你必須選擇一份工作作為歷練。職業(yè)旅程中的第一份工作,無疑是踏入社會這所大學(xué)的起點。也許你找了一份差強(qiáng)人意的工作,那么從這里出發(fā),好好地沉淀自己,從這份工作中汲取到有價值的營養(yǎng),厚積薄發(fā)。千里之行,始于足下,只要出發(fā),就有希望到達(dá)終點。

     

      起點可以相同,但是選擇了不同的拐點,終點就會大大不同!   

     

      畢業(yè)這幾年,我們的生活、感情、職業(yè)等都存在很多不確定的因素,未來也充滿了各種可能。這個時候,必須學(xué)會選擇,懂得放棄,給自己一個明確的定位,使自己穩(wěn)定下來。如果你不主動定位,就會被別人和社會”定型”!

     

      可以這么說:一個人在畢業(yè)這5年培養(yǎng)起來的行為習(xí)慣,將決定他一生的高度。我們能否成功,在某種程度上取決于自己對自己的評價,這就是定位。你給自己定位是什么,你就是什么。定位能決定人生,定位能改變命運。丑小鴨變成白天鵝,只要一雙翅膀;灰姑娘變成美公主,只要一雙水晶鞋。 

     

      人的命,三分天注定,七分靠打拼,有夢就”會紅”,愛拼才會贏。只要不把自己束縛在心靈的牢籠里,誰也束縛不了你去展翅高飛。

     

      現(xiàn)實情況遠(yuǎn)非他們所想的那樣。于是,當(dāng)優(yōu)越感逐漸轉(zhuǎn)為失落感甚至挫敗感時,當(dāng)由堅信自己是一塊”金子”到懷疑自己是一粒”沙子”時,憤怒、迷茫、自卑就開始與日俱增。

     

      其實,應(yīng)該仔細(xì)掂量一下自己,你是否真是金子?是真金,手中要有絕活,才能上要有過人之處才行。一句話:真金是要靠實力來證明的,只有先把自己的本領(lǐng)修煉好了,才有資格考慮伯樂的事情 

     

      每顆珍珠原本都是一粒沙子,但并不是每一粒沙子都能成為一顆珍珠。

     

      想要卓爾不群,就要有鶴立雞群的資本。忍受不了打擊和挫折,承受不住忽視和平淡,就很難達(dá)到輝煌。年輕人要想讓自己得到重用,取得成功,就必須把自己從一粒沙子變成一顆價值連城的珍珠。

     

            天有下雨與日出,人生高峰與低谷。

            莫為浮云遮望眼,風(fēng)物長宜放眼量。

     

        只要拂去陰霾,就能亮出朗朗晴空。如果你在工作上有些不如意,要相信自己不會一直處于人生的低谷期,總有一天能沖破重重云層。告訴自己:我并沒有失敗,只是暫時沒有成功!只要在內(nèi)心點亮一盞希望之燈,一定能驅(qū)散黑暗中的陰霾,迎來光明。 

     

       的確,論資歷,他們是不折不扣的職場菜鳥,業(yè)務(wù)涉及不深,人脈一窮二白,在工作中經(jīng)常碰壁。他們的壓力并不一定都像千鈞大石,而是像大雨來臨前的天色,灰色低沉,明明有空間,卻被灰色填滿每個縫隙,只能等待大雨傾盆之后的晴空。

     

      ”起得比雞早,睡得比狗晚,干得比驢多,吃得比豬差。”這是很多剛剛畢業(yè)的人喜歡用來調(diào)侃自己生活狀態(tài)的話。雖然有點兒夸張,但是,他們中的很多人的確一直都被灰色心情所籠罩–心里永遠(yuǎn)是多云轉(zhuǎn)陰。記得有位哲人曾說:”我們的痛苦不是問題本身帶來的,而是我們對這些問題的看法產(chǎn)生的。”換個角度看人生,是一種突破、一種解脫、一種超越、一種高層次的淡泊與寧靜,從而獲得自由自在的快樂。 

     

       一位哲人說:”人生就是一連串的抉擇,每個人的前途與命運,完全把握在自己手中,只要努力,終會有成。”就業(yè)也好,擇業(yè)也罷,創(chuàng)業(yè)亦如此,只要奮發(fā)努力,都會成功。你是不是準(zhǔn)備把生命的承諾全部都交給別人?

     

      畢業(yè)后這5年,是改變自己命運的黃金時期。在最能決定自己命運時,如果還不把握,那你還要等到什么時候呢?我的人生我做主,命運由己不由人。

     

      不要活在別人的嘴里,不要活在別人的眼里,而是把命運握在自己手里。

     

      別說你沒有背景,自己就是最大的背景。美國作家杰克·凱魯亞克說過一句話:”我還年輕,我渴望上路。”在人生的旅途中,我們永遠(yuǎn)都是年輕人,每天都應(yīng)該滿懷渴望。每個人的潛能都是無限的,關(guān)鍵是要發(fā)現(xiàn)自己的潛能和正確認(rèn)識自己的才能,并找到一個能充分發(fā)揮潛能的舞臺,而不能只為舞臺的不合適感到不快。要客觀公正地看待自己的能力,結(jié)合自己的實際情況和愛好冷靜選擇,盡可能到最需要自己、最適合自己的地方。

     

         在人力資源管理界,特別流行一個說法,即”騎馬,牽牛,趕豬,打狗”理論:人品很好,能力又很強(qiáng)的,是千里馬,我們要騎著他;人品很好但能力普通的,是老黃牛,我們要牽著他;人品、能力皆普通的,就是”豬”,我們要趕走他;人品很差能力很強(qiáng)的,那是”狗”,我們要打擊他。

     

      我想,剛剛畢業(yè)幾年的你,一樣胸懷大志,一樣想成為一匹被人賞識、馳騁沙場的千里馬吧?那么,就好好沉淀下來。低就一層不等于低人一等,今日的俯低是為了明天的高就。所謂生命的價值,就是我們的存在對別人有價值。能被人利用是一件好事,無人問津才是真正的悲哀!

       能干工作、干好工作是職場生存的基本保障。

     

      任何人做工作的前提條件都是他的能力能夠勝任這項工作。能干是合格員工最基本的標(biāo)準(zhǔn),肯干則是一種態(tài)度。一個職位有很多人都能勝任,都有干好這份工作的基本能力,然而,能否把工作做得更好一些,就要看是否具有踏實肯干、苦于鉆研的工作態(tài)度了。

     

      在能干的基礎(chǔ)上踏實肯干。

     

      工作中,活干得比別人多,你覺得吃虧;錢拿得比別人少,你覺得吃虧;經(jīng)常加班加點,你覺得吃虧……其實,沒必要這樣計較,吃虧不是災(zāi)難,不是失敗,吃虧也是一種生活哲學(xué)。現(xiàn)在吃點兒小虧,為成功鋪就道路,也許在未來的某個時刻,你的大福突然就來了。

     

      能吃虧是做人的一種境界,是處世的一種睿智。 

     

      在工作中并不是多做事或多幫別人干點兒活就是吃虧。如果領(lǐng)導(dǎo)讓你加加班、趕趕任務(wù),別以為自己吃了大虧,反而應(yīng)該感到慶幸,因為領(lǐng)導(dǎo)只叫了你,而沒叫其他人,說明他信任你、賞識你。吃虧是一種貢獻(xiàn),你貢獻(xiàn)得越多,得到的回報也就越多。樂于加班,就是這樣的一種吃虧。

     

      舍得舍得,有舍才有得;學(xué)會在適當(dāng)時吃些虧的人絕對不是弱智,而是大智。

     

      給別人留余地就是給自己留余地,予人方便就是予己方便,善待別人就是善待自己。

     

      傻人有傻福,因為傻人沒有心計。和這樣的人在一起,身心放松,沒有太多警惕,就能相互靠近。傻在很多時候意味著執(zhí)著和忠貞,也意味著寬厚和誠實,讓人不知不覺站到他一邊。傻人無意中得到的,比聰明人費盡心機(jī)得到的還多。畢業(yè)這幾年,你的天空中只飄著幾片雪花,這樣你就滿足了嗎?成功需要堅持與積累,與其專注于搜集雪花,不如省下力氣去滾雪球。巴菲特說:”人生就像滾雪球,最重要的是發(fā)現(xiàn)很濕的雪和很長的坡。”讓自己沉淀下來,學(xué)著發(fā)現(xiàn)”很濕的雪”,努力尋找”很長的坡”。記住:散落的雪花會很快融化,化為烏有,只有雪球才更實在,才能長久。

    在畢業(yè)這幾年里,你要是能做到比別人多付出一分努力,就意味著比別人多積累一分資本,就比別人多一次成功的機(jī)會。 

     

      什么是職業(yè)化呢?職業(yè)化就是工作狀態(tài)的標(biāo)準(zhǔn)化、規(guī)范化、制度化,即在合適的時間、合適的地點用合適的方式說合適的話、做合適的事,使知識、技能、觀念、思維、態(tài)度、心理等符合職業(yè)規(guī)范和標(biāo)準(zhǔn)。”在每個行業(yè)里,都有很多出色的人才,他們之所以能存在,是因為比別人更努力、更智慧、更成熟。但是,最重要的是,他們比一般人更加職業(yè)化!這就是為什么我現(xiàn)在能當(dāng)你老板的原因。一個人僅僅專業(yè)化是不夠的,只有職業(yè)化的人才能飛在別人前面,讓人難以超越!”不要以為我們現(xiàn)在已經(jīng)生存得很安穩(wěn)了。對于畢業(yè)5年的人來講,一定要認(rèn)清即將面臨的五大挑戰(zhàn)。

     

    一、贍養(yǎng)父母。

    二、結(jié)婚生子。

    三、升職加薪。

    四、工作壓力。

    五、生活質(zhì)量。

     

      有的人為生存而雀躍,目光總是停在身后,三天打魚兩天曬網(wǎng),有始無終。

     

      有的人為發(fā)展而奮斗,目光總是盯在正前方,每天進(jìn)步一點點,堅持不懈。

     

      畢業(yè)這幾年,不能沒有追求和探索,不能沒有理想和目標(biāo)。人生如逆水行舟,不進(jìn)則退。甘于現(xiàn)狀的生活就是不再前行的船,再也無法追上時代前進(jìn)的步伐。一定要抓緊每一秒鐘的時間來學(xué)習(xí),要明白學(xué)習(xí)不是學(xué)生的專利。小聰明的人最得意的是:自己做過什么?大智慧的人最渴望的是:自己還要做什么?

     

      小聰明是戰(zhàn)術(shù),大智慧是戰(zhàn)略;小聰明看到的是芝麻,大智慧看到的是西瓜。

     

      在這個世界上,既有大人物,也有小角色,大人物有大人物的活法,小人物有小人物的瀟灑,每個人都有自己的生活方式,誰也勉強(qiáng)不了誰。但是,小聰明只能有小成績和小視野,大智慧才能有大成就和大境界。小企業(yè)看老板,中企業(yè)看制度,大企業(yè)看文化。 

     

      小公司與大企業(yè)都有生存之道,沒有好壞之分,但對一個人不同階段的影響會不同。

     

      小公司肯定想要發(fā)展為大企業(yè),這是一種目標(biāo),年輕人也要給自己的職業(yè)生涯制定目標(biāo)。畢業(yè)幾年的你,是否經(jīng)常會怯場或者是感到?jīng)]有底氣?居安思危絕對不是危言聳聽!此刻打盹,你將做夢;此刻學(xué)習(xí),你將圓夢。在競爭激烈的人生戰(zhàn)場上,打盹的都是輸家!

     

      每個人在年輕的時候似乎都豪情萬丈,什么都不怕,可是隨著年齡的增長,每天想著房子、工作、養(yǎng)家糊口這些俗事兒,再也沒有年輕時那種敢于”上天探星、下海撈月”的勇氣了。是我們改變了生活,還是生活改變了我們?我們的思想越來越復(fù)雜,因為有了越來越多的舍不得、越來越多的顧慮,我們總是在徘徊、總是在猶豫。畢業(yè)開始一兩年,生活的重?fù)?dān)會壓得我們喘不過氣來,挫折和障礙堵住四面八方的通口,我們往往在壓迫得自己發(fā)揮出潛能后,才能殺出重圍,找到出路。可是兩三年后,身上的重?fù)?dān)開始減輕,工作開始一帆風(fēng)順,我們就松懈了下來,漸漸忘記了潛在的危險。直到有一天危機(jī)突然降臨,我們在手足無措中被擊敗……畢業(yè)這幾年,仍然處于危險期,一定要有居安思危的意識,好好打拼,這樣才能有一個真正的安全人生!

     

      生于憂患,死于安樂。如果你想跨越自己目前的成就,就不能畫地自限,而是要勇于接受挑戰(zhàn)。對畏畏縮縮的人來說,真正的危險正在于不敢冒險!

     

      年輕人在社會的重壓下,適應(yīng)能力已變得越來越強(qiáng),只是他們不自覺地習(xí)慣被環(huán)境推著走。他們不敢冒險,怕給自己帶來終身的遺憾,于是告慰自己:”我對得起自己、對得起家人,因為我已竭盡全力。”其實,人只有不斷挑戰(zhàn)和突破才能逐漸成長。長期固守于已有的安全感中,就會像溫水里的青蛙一樣,最終失去跳躍的本能。

     

      經(jīng)歷了這幾年社會生活,你應(yīng)該明白:這個世界上有富也有貧,有陰也有亮,有丑也有美,到底看到什么,取決于自己是積極還是消極。在年輕時學(xué)會勤勉地工作,用一種光明的思維對待生活,那么,只要張開手掌,你就會發(fā)現(xiàn),里面有一片燦爛的人生。

     

      把感恩刻在石頭上,深深地感謝別人幫助過你,永遠(yuǎn)銘記,這是人生應(yīng)有的一種境界;把仇恨寫在沙灘上,淡淡忘掉別人傷害過你,學(xué)會寬容,讓所有的怨恨隨著潮水一去不復(fù)返,這也是一種人生境界。

     

      學(xué)會倒出水,才能裝下更多的水。從畢業(yè)那天開始,學(xué)會把每天都當(dāng)成一個新的起點,每一次工作都從零開始。如果你懂得把”歸零”當(dāng)成一種生活的常態(tài),當(dāng)成一種優(yōu)秀的延續(xù),當(dāng)成一種時刻要做的事情,那么,經(jīng)過短短幾年,你就可以完成自己職業(yè)生涯的正確規(guī)劃與全面超越。

     

      在職業(yè)起步的短短道路上,想要得到更好、更快、更有益的成長,就必須以歸零思維來面對這個世界。不要以大學(xué)里的清高來標(biāo)榜自己,不要覺得自己特別優(yōu)秀,而是要把自己的姿態(tài)放下,把自己的身架放低,讓自己沉淀下來,抱著學(xué)習(xí)的態(tài)度去適應(yīng)環(huán)境、接受挑戰(zhàn)。放下”身段”才能提高身價,暫時的俯低終會促成未來的高就。

     

      年輕人從校園或者從一個環(huán)境進(jìn)入一個新環(huán)境,就要勇于將原來環(huán)境里熟悉、習(xí)慣、喜歡的東西放下,然后從零開始。我們想在職場上獲得成功,首先就要培養(yǎng)適應(yīng)力。從自然人轉(zhuǎn)化為單位人是融入職場的基本條件。一個人起點低并不可怕,怕的是境界低。越計較自我,便越?jīng)]有發(fā)展前景;相反,越是主動付出,那么他就越會快速發(fā)展。很多今天取得一定成就的人,在職業(yè)生涯的初期都是從零開始,把自己沉淀再沉淀、倒空再倒空、歸零再歸零,正因為這樣,他們的人生才一路高歌,一路飛揚(yáng)。

     

      在畢業(yè)這幾年里,我們要讓過去歸零,才不會成為職場上那只背著重殼爬行的蝸牛,才能像天空中的鳥兒那樣輕盈地飛翔。請好好品味一下杰克·韋爾奇說過的一句話:”糾正自己的行為,認(rèn)清自己,從零開始,你將重新走上職場坦途。” 吐故才能納新,心靜才能身涼,有舍才能有得,杯空才能水滿,放下才能超越。

     

      歸零思維五大表現(xiàn):心中無我,眼中無錢,念中無他,朝中無人,學(xué)無止境。

     

      年輕人難免帶著幾分傲氣,認(rèn)為自己無所不能、所向披靡,其實不然,初入職場的新人還是個”嬰兒”,正處在從爬到走的成長階段。在畢業(yè)這幾年里,一定要讓自己逐步培養(yǎng)起學(xué)徒思維、海綿思維、空杯思維,具有這樣思維的人心靈總是敞開的,能隨時接受啟示和一切能激發(fā)靈感的東西,他們時刻都能感受到成功女神的召喚。

    posted @ 2010-03-07 22:24 MikyTan 閱讀(1901) | 評論 (2)編輯 收藏

    JavaScrip 中String 與XML 互相轉(zhuǎn)換的函數(shù)小記

    JavaScrip 中String 與XML 互相轉(zhuǎn)換的函數(shù)小記


    function convert_string_to_xml(strXML)   
    {   
        
    if (window.ActiveXObject) {   
            xmlDoc
    =new ActiveXObject("Microsoft.XMLDOM");   
            xmlDoc.async
    ="false";   
            xmlDoc.loadXML(strXML);   
            
    return xmlDoc;   
        } 
    else {   
            parser
    =new DOMParser();   
            xmlDoc
    =parser.parseFromString(strXML,"text/xml");   
            
    return xmlDoc;   
        }   
    }


    function convert_xml_to_string(xmlObject)   
    {   
        
    if (window.ActiveXObject) { // for IE   
            return xmlObject.xml;   
        } 
    else {   
            
    return (new XMLSerializer()).serializeToString(xmlObject);   
        }   

     



    posted @ 2010-02-02 10:37 MikyTan 閱讀(217) | 評論 (0)編輯 收藏

    JBOSS 下如何配置C3P0的連接池(解決Mysql 8小時的問題)

         摘要: JBOSS 下如何配置C3P0的連接池(解決Mysql 8小時的問題) 問題引起:     在公司配置文檔管理系統(tǒng)(OPENKM)時,把數(shù)據(jù)源切換到Mysql數(shù)據(jù)源下,經(jīng)過測試,發(fā)現(xiàn)經(jīng)過8小時后,數(shù)據(jù)庫連接自動斷開。 解決辦法:     把原來的openkm-ds.xml刪除掉。原openkm-ds.xml的內(nèi)容如下: ...  閱讀全文

    posted @ 2010-01-19 17:28 MikyTan 閱讀(3186) | 評論 (0)編輯 收藏

    在RedHat Enterprise Linux 5下安裝JDK

    一、系統(tǒng)環(huán)境
    操作系統(tǒng):  RedHat Enterprise Linux 5

     

    二、安裝JDK

    1.      從java.sun.com下載最新的J2SE 1.5:jdk-1_5_0_17-linux-i586-rpm.bin

    下載地址:

    http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-1_5_0_17-linux-i586-rpm.bin?BundledLineItemUUID=QZlIBe.mUMYAAAEevV9SRJFA&OrderID=V_dIBe.mwxAAAAEeoV9SRJFA&ProductID=UEdIBe.omzcAAAEdklhGb7Xo&FileName=/jdk-1_5_0_17-linux-i586-rpm.bin

     

    2.      將JDK安裝文件jdk-1_5_0_17-linux-i586-rpm.bin拷貝到Redhat任意目錄下。例如:/opt/jdk(目錄jdk需要手動新建)

     

    3.      執(zhí)行   #chmod  +x  jdk-1_5_0_17-linux-i586-rpm.bin

     

    4.      執(zhí)行   ./jdk-1_5_0_17-linux-i586-rpm.bin

    此時會出現(xiàn)JDK安裝授權(quán)協(xié)議。可以一路按Enter瀏覽。如果等的不耐煩可以直接按Ctrl+C,直接會出現(xiàn)Do you agree to the above license terms? [yes or no]的字樣。

     

    5.      鍵入yes,同意該授權(quán)協(xié)議。

    此時系統(tǒng)會開始解壓jdk-1_5_0_17-linux-i586-rpm.bin

     

    6.      解壓完畢后,回到/opt/jdk目錄,鍵入dir。會發(fā)現(xiàn)多出了一個解壓好的安裝文件:jdk-1_5_0_17-linux-i586.rpm

     

    7.      執(zhí)行   rpm  -ivh  jdk-1_5_0_17-linux-i586.rpm

    此時,系統(tǒng)會開始安裝JDK。安裝結(jié)束后可以在/usr目錄下發(fā)現(xiàn)新增了一個名為java的文件夾。該文件夾就是安裝好的JDK目錄。

     

    8.      設(shè)置環(huán)境變量

    a.       進(jìn)入/etc文件夾(具體操作命令忽略),找到文件profile并打開。

        [注意:profile是指文件不是指文件夾]

    b.       找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC,在該語句的上面添加以下語句:

            export   JAVA_HOME="/usr/java/jdk1.5.0_17"

            [注意:“=”兩側(cè)不能有空格]

            export  CLASSPATH="/usr/java/jdk1.5.0_17/lib:/usr/java/jdk1.5.0_17/jre/lib"

            [注意:“=”兩側(cè)不能有空格;“:”是冒號,同樣不要有空格出現(xiàn)]

            pathmunge  /usr/java/jdk1.5.0_17/bin:/usr/java/jdk1.5.0_17/jre/bin

            [注意:無引號]

     

    9.      設(shè)置完畢后,保存文件。重啟Redhat后登錄控制終端,鍵入:java  -version;

    如果出現(xiàn)java version “1.5.0.17”等字樣,說明您的JDK已經(jīng)安裝成功了!祝賀你!

     

     

     

    posted @ 2009-12-30 14:45 MikyTan 閱讀(1664) | 評論 (0)編輯 收藏

    Jetty啟動時不能修改 js等靜態(tài)文件的解決

    Jetty啟動后,如果修改javascript文件,將不能保存,使調(diào)試很麻煩。這是因為使用了CACHE,JETTY說是WINDOWS下的一個限制。可以通過如下方法修正:

    解壓出jetty.jar中的org/mortbay/jetty/webapp/webdefault.xml文件,將這一選項由true改為false,另存到src/main/resources目錄,或者其它自選目錄。
    <init-param>
    <param-name>useFileMappedBuffer</param-name>
    <param-value>true</param-value> <!-- change to false -->
    </init-param>

    把修改后的webdefault.xml文件跟pom.xml放在一起

    修改pom.xml里的Jetty Plugin的配置,加入webdefault.xml
    ...
    <plugin>
     <groupId>org.mortbay.jetty</groupId>
     <artifactId>maven-jetty-plugin</artifactId>
     <version>6.1.7</version>
     <configuration>
     <contextPath>/</contextPath>
     <webDefaultXml>webdefault.xml</webDefaultXml>
     ...
     </configuration>
     ...
    </plugin>
    ...

    附。。。在項目中用到的Jetty用Java代碼Call Jetty啟動的方法
    import org.mortbay.jetty.Connector;
    import org.mortbay.jetty.Server;
    import org.mortbay.jetty.nio.SelectChannelConnector;
    import org.mortbay.jetty.webapp.WebAppContext;

    public class JettyStarter {
        
        
    public JettyStarter() {
            
        }
        
    public static void main(String[] args) {
            
    try {
                Server server 
    = new Server();
                Connector connector 
    = new SelectChannelConnector();
                connector.setPort(
    9999);
                server.setConnectors(
    new Connector[] { connector });
                
                WebAppContext webapp 
    = new WebAppContext();
                webapp.setContextPath(
    "/");
                webapp.setResourceBase(
    "./src/main/webapp");
                webapp.setDefaultsDescriptor(
    "./webdefault.xml");
                server.setHandler(webapp);

                server.start();
                server.join();
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    posted @ 2009-12-28 10:50 MikyTan 閱讀(2659) | 評論 (0)編輯 收藏

    Openfire

        Openfire 是由Jive Software 主導(dǎo)開發(fā)的一套功能非常強(qiáng)大的開源im 服務(wù)器(前身是

    wildfire),它基于XMPP 協(xié)議,完全用java實現(xiàn),是一款非常優(yōu)秀的服務(wù)器端軟件。


    一. 安裝JDK(我使用的是JDK1.6), 不再詳述
    二. 安裝 Eclipse 5.5(不再詳述)
    三. 安裝Subversive插件
         Subversive是一款不錯的svn插件,具體安裝方法請參看我的另一篇文章《Eclipse中

    安裝svn插件Subversive 》,鏈接

    http://blog.csdn.net/zhenyucheung/archive/2008/03/19/2195518.aspx


    四. check out openfire 源碼
       1. 在eclipse中點擊Windows->Open Perspective->Other
       2. 在彈出窗口中點擊SVN Repository Exploring 然后點OK
       3. 在SVN Repositories 點右鍵,選擇 New->Repository Location...
       4. 在彈出的New Repository Location頁面,將

    http://svn.igniterealtime.org/svn/repos輸入URL文本框,點Finish. 你將會看到頁面出

    現(xiàn)URL地址.
       5. 展開URL地址
       6. 展開openfire樹形結(jié)構(gòu)
       7. 在trunk上點擊右鍵,選擇Check Out
       剩下的就是等待check out完成了 :)


    五. 創(chuàng)建openfire工程
      對使用過eclipse的人來說,這一步不用多說,這里僅列出幾個需要注意的地方.
      1. check out完畢后,eclipse會自動創(chuàng)建一個openfire工程,請把它刪除(注意刪除時

    不要刪除content),否則你將不得不手動配置一些開發(fā)環(huán)境。
      2. 用Create project from existing source新建工程,注意工程名要用openfire。

    -----------------

    若自己創(chuàng)建工程:

    五.創(chuàng)建Java項目,將源代碼導(dǎo)入此項目中。在Eclipse中將此Java文件夾當(dāng)成源代碼文件夾

    新建工程。庫都在Build目錄的lib目錄下,將openfire用到的庫都添加到這個新建工程的

    Referenced Libraries中。

     

    六. Build openfire
      openfire是用ant構(gòu)建的,所以要先設(shè)置使得eclipse中每次編譯都使用內(nèi)置的ant工具,

    保證編譯的正確執(zhí)行。
      1. eclipse中點擊Window->Show View->Ant
      2. 在Ant 頁面點右鍵,選擇 Add Buildfiles...
      3. 展開openfire/build文件夾,選擇build.xml, 點 OK.
      4. 在Ant頁面, 展開Openfire XMPP Server,雙擊 openfire ant 任務(wù)


    七. 創(chuàng)建項目Builder
      1. 點擊Run->Open Run Dialog...
      2. 選擇Java Application,點擊 New 按鈕
      3. 在Run窗口的Main選項卡中, 修改Name文本框中的值,改成Openfire,其他名字亦可
      4. 點Browse按鈕,選擇openfire, 點ok
      5. 點Search按鈕,選擇Main class為

    org.jivesoftware.openfire.starter.ServerStarter,點OK。(這是openfire的啟動類)
      6. 點擊進(jìn)入Arguments選項卡
      7. 在VM arguments文本框中輸入 -

    DopenfireHome="${workspace_loc:openfire}/target/openfire",這個是用于eclipse執(zhí)行

    java命令時傳遞的參數(shù),這樣openfire程序可以通過System.getProperty(“openfireHome”)得到

     openfire的本地位置。
      8. 點擊進(jìn)入Classpath選項卡
      9. 點選User Entries,這樣Advanced...就處于可用狀態(tài)
      10. 點擊Advanced...按鈕
      11. 在Advanced Options頁面,選擇Add Folders, 點ok.
      12. 選擇openfire\src\i18n, 點ok將這個文件夾加入到class path,同樣的方式把

    openfire\src\resources\jar也加到class path中。
      13. 在Common選項卡中,點選Run復(fù)選框。

    設(shè)置完畢,這樣以后在run這個工程的時候就會按照正確的配置進(jìn)行了。

    posted @ 2009-12-11 22:53 MikyTan 閱讀(287) | 評論 (0)編輯 收藏

    解決Maven中的OutOfMemory錯誤

    當(dāng)Maven項目很大,或者你運行諸如 mvn site 這樣的命令的時候,maven運行需要很大的內(nèi)存,在默認(rèn)配置下,就可能遇到j(luò)ava的堆溢出。如:

    [INFO] Building jar: /home/dl9pf/svn/mindquarry/mindquarry-jcr/mindquarry-jcr-changes/target/mindquarry-migration-with-dependencies.jar
    [INFO] ------------------------------------------------------------------------
    [ERROR] FATAL ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] Java heap space
    [INFO] ------------------------------------------------------------------------
    [INFO] Trace
    java.lang.OutOfMemoryError: Java heap space
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:99)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:518)
    ...
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 7 minutes 14 seconds
    [INFO] Finished at: Wed Sep 05 07:44:55 CEST 2007
    [INFO] Final Memory: 37M/63M
    [INFO] ------------------------------------------------------------------------

    解決的方法是調(diào)整java的堆大小的值。

       Windows環(huán)境中
    找到文件%M2_HOME%\bin\mvn.bat ,這就是啟動Maven的腳本文件,在該文件中你能看到有一行注釋為:

    @REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE...

    它的意思是你可以設(shè)置一些Maven參數(shù),我們就在注釋下面加入一行:

    set MAVEN_OPTS= -Xms128m -Xmx512m
    之后,當(dāng)你運行Maven命令如 mvn -version 的時候,你會看到如下的輸出:

    E:\test>mvn -version

    E:\test>set MAVEN_OPTS= -Xms128m -Xmx512m
    Maven version: 2.0.9
    Java version: 1.6.0_07
    OS name: "windows 2003" version: "5.2" arch: "x86" Family: "windows"
    我們看到,配置的Maven選項生效了,OutOfMemoryError也能得以相應(yīng)的解決。

     

     

    Linux環(huán)境中
    也可以通過設(shè)置環(huán)境變量解決該問題, 如,編輯文件 /etc/profile 如下

    MAVEN_OPTS=-Xmx512m
    export JAVA_HOME MAVEN_HOME MAVEN_OPTS JAVA_BIN PATH CLASSPATH

     

    如果你使用Hudson

    用 Hudson + Maven做持續(xù)集成,并不幸也遇到了類似的錯誤,那么上述兩種方式都將不再起作用了,因為Hudson使用自己的maven-agent來啟動Maven,不會去調(diào)用Maven的腳本,自然相應(yīng)的配置也就無效了。

    好在Hudson也給為我們提供了配置點,在Hudson的項目配置頁面中,有一塊Build區(qū)域,這里我們已經(jīng)設(shè)置了Root Pom和Goals。注意該區(qū)域的右下角有一個"Advanced..."按鈕,點擊會看到MAVEN_OPTS輸入框,這里輸入"-Xmx512m"就OK了。

     

    m2eclipse中
    類似以上的方法都會失效,所幸m2eclipse提供了配置點。步驟如下:

    項目上右擊 -> Run As -> Run Configurations -> Maven Build 上右擊 -> New

    這時會看到一個maven運行配置對話框,這里面其它的配置我不多解釋了,為了解決內(nèi)存溢出的問題,我們可以選擇第二個TAB: JRE,然后在VM arguments中輸入配置如:-Xms128m -Xmx512m。

    posted @ 2009-11-19 18:30 MikyTan 閱讀(372) | 評論 (0)編輯 收藏

    UTF-8頁面調(diào)用GB2312頁面的JS顯示亂碼的解決辦法

    在<Script>標(biāo)簽里設(shè)置一個 charset

    例如:
    <link type="text/css" rel="stylesheet" href="http://020sun.3322.org/hxair/style.css" charset="gb2312" /> 
    <script type="text/javascript" src="http://020sun.3322.org/hxair/js/command.js" charset="gb2312"></script> 

    posted @ 2009-08-06 10:29 MikyTan 閱讀(1113) | 評論 (0)編輯 收藏

    Sysbase 中判斷某表是否存在(表所對應(yīng)的索引名是否存在的判斷方法)

    今天在寫動態(tài)建表及表所對應(yīng)的索引時,需要判斷表及索引是否存在。現(xiàn)記錄如下。。

    判斷表是否存在

    select id,name from sysobjects where type='U' and name='Airbook';
    其中 Airbook是所需要創(chuàng)建的表名。。

    判斷表所對應(yīng)的索引名是否存在
    select sysobjects.id,sysobjects.name ,sysindexes.name 
    from sysobjects,sysindexes
    where sysobjects.id = sysindexes.id  and 
          sysobjects.type
    ='U'
            
    and sysobjects.name='Airbook'
            
    and sysindexes.name='in_abksaleid'
    ;
    其中 Airbook是指表名, in_abksaleid 是指所建的索引名。

    查詢表中的某個字段是否存在


    select sysobjects.id,sysobjects.name ,syscolumns.name 
    from sysobjects,syscolumns
    where sysobjects.id = syscolumns.id  and 
          sysobjects.type
    ='U'
            
    and sysobjects.name='Airbook'
            
    and syscolumns.name='Agent_ID'
    ;

    其中Airbook是指表名,Agent_ID為Airbook的字段

    posted @ 2009-07-20 21:14 MikyTan 閱讀(994) | 評論 (0)編輯 收藏

    適配器模式(Adapter)

    為一個接口提供缺省實現(xiàn),這樣子類可以從這個缺省實現(xiàn)進(jìn)行擴(kuò)展.而不必從原有接口進(jìn)行擴(kuò)展.作為適配器模式的一個特例,缺省適配模式在java語言中有著特殊的應(yīng)用.(引用java模式書)

    adapter是一個非常常用的設(shè)計模式.
    像windows的每個窗口,事件很多個.關(guān)閉,移動,最大化,最小化,
    java代碼設(shè)計如下:
    interface 窗口{
    public void 關(guān)閉();
    public void 移動();
    public ovid 最大化();
    ...
    ...
    }
    如果客戶點擊了關(guān)閉按鈕,java類實現(xiàn)如下:
    Frame implements 窗口{
    public void 關(guān)閉(){
    System.out.println("關(guān)閉窗口");
    }

    public void 移動()[
    }
    public ovid 最大化(){
    }
    ...
    ...
    }
    這里面我們可以看出,我們關(guān)注的只有關(guān)閉按鈕觸發(fā)的事件,其它的我們不用管.但是在java類中,我們必須把接口的所有方法都給實現(xiàn).這樣我們連一些沒有用的方法也得給實現(xiàn).那怕是空實現(xiàn).


    下面我們來建一個抽象類來實現(xiàn)這個接口.
    public abstract Frame implements 窗口{
    public void 關(guān)閉(){

    }

    public void 移動(){
    }
    public ovid 最大化(){
    }
    ...
    ...
    }
    這里我們可以看出,抽象類給每個接口一個空的實現(xiàn),那我們都可以在抽象類的基礎(chǔ)上進(jìn)行擴(kuò)展。關(guān)閉功能實現(xiàn)如下:
    public CloseFrame extends Frame{
    public void 關(guān)閉(){
    System.out.println("關(guān)閉窗口");

    }
    }

    像在java中的事件處理都是用適配器模式來實現(xiàn)的。接口,抽象類都是已經(jīng)寫好的。我們只需要實現(xiàn)具體功能的類就可以了。

    再舉個簡單的例子:
    假如存在如下接口:
    interface TestInterface{
    void test1();
    void test2();
    void test3();
    }
    如果我們只關(guān)注test1接口應(yīng)該怎樣寫呢。
    abstract class TestAbstract implements Test{
    public void test1(){
    }
    public void test2(){
    }
    public void test3(){
    }
    }
    class TestTest1 extends TestAbstract{
    public void test1(){
    System.out.println("方法1實現(xiàn)");
    }
    }
    那么在什么情況下用相信大家已經(jīng)能看得出來了吧。假如你不準(zhǔn)備實現(xiàn)接口的所有方法。就可以建一個抽象類來實現(xiàn)這個接口的所有方法,當(dāng)然這里全都是空的實現(xiàn).然后再寫一個類繼承這個抽象類就可以得到你想要的結(jié)果了.

    posted @ 2009-07-06 21:17 MikyTan 閱讀(186) | 評論 (0)編輯 收藏

    Java字符串操作小記

    JAVA 把字符串間的若干空格保留一個

    String str="你  好,       Fuck   You";
      System.out.println(str.replaceAll("\\s+"," "));

    javascript和java里的回車換行符的處理

     request.getParameter("modelTail").replaceAll("<br>",String.valueOf((char)13)).replaceAll("<bt>",String.valueOf((char)10))
     content.replaceAll(String.valueOf((char)13),"<br>").replaceAll(String.valueOf((char)10),"<bt>")
     document.all.txtContent.value = (varGet2.Content).replace("<br>",String.fromCharCode(13)).replace("<bt>",String.fromCharCode(10));
      javascript里的String.fromCharCode 和 strObj.charCodeAt(index)

    posted @ 2009-06-27 12:08 MikyTan 閱讀(165) | 評論 (0)編輯 收藏

    tomcat 配置 小記

      Tomcat默認(rèn)可以使用的內(nèi)存為128MB,在較大型的應(yīng)用項目中,這點內(nèi)存是不夠的,輕微時,會使系統(tǒng)性能急劇下降,嚴(yán)重時,將導(dǎo)致系統(tǒng)無法運行,影響系統(tǒng)的穩(wěn)定性。當(dāng)內(nèi)存不夠用時,常見的問題就是報tomcat內(nèi)存益處錯誤,從兒導(dǎo)致客戶端包500錯誤的,如下:解決方法主要是加大TOMCAT可利用內(nèi)存,并在程序當(dāng)中加大內(nèi)存使用。因此根據(jù)應(yīng)用的需求,有必要調(diào)整JVM使用內(nèi)存的大小。現(xiàn)在將手工修改tomcat內(nèi)存的方法及注意事項列出,希望能對新人有所幫助。
    tomcat提供了兩種安裝模式,即免安裝(*.zip)和安裝(*.exe)方式。針對不同的安裝方式下修改tomcat內(nèi)存大小的方法幾注意問題(windows環(huán)境):
     方式1:當(dāng)選擇安裝方式時,可以在安裝tomcat的過程進(jìn)行設(shè)置tomcat初始化內(nèi)存的大小。但是假如說在安裝時沒有選擇,或者應(yīng)用改變了,需要增加tomcat內(nèi)存時怎么半呢?此時,我們就要手工修改tomcat的一些文件了:
     看了很多網(wǎng)上的資料,都是說修改<CATALINA_HOME>\bin\catalina.bat文件的內(nèi)容,即在里面增加一行代碼:
    set JAVA_OPTS=-Xms512m -Xmx512m //表示初始化最小可用內(nèi)存和最大可用內(nèi)存都是512MB(修改相應(yīng)值即可)
     
     如在catalina.bat的
         rem ----- Execute The Requested Command
         echo Using CATALINA_BASE:   %CATALINA_BASE%
         echo Using CATALINA_HOME:   %CATALINA_HOME%
         echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
         echo Using JAVA_HOME:       %JAVA_HOME%
    這一欄改為
        rem ----- Execute The Requested Command
        set JAVA_OPTS=-Xms512m -Xmx512m
        echo Using CATALINA_BASE:   %CATALINA_BASE%
        echo Using CATALINA_HOME:   %CATALINA_HOME%
        echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
        echo Using JAVA_HOME:       %JAVA_HOME%
    就可以將JAVA虛擬機(jī)分配內(nèi)存  508.0625MB的!
    但是很多人修改后,發(fā)現(xiàn)修改并沒有起作用,即通過windows的服務(wù)啟動tomcat時,實際的內(nèi)存還是默認(rèn)的,修改的設(shè)置并沒有起作用;而通過<CATALINA_HOME>\bin\startup.bat 啟動卻是生效的。這是為什么呢?因為在安裝過程中,JVM的初始化參數(shù)已經(jīng)寫在注冊表中了,由于沒有修改注冊表中相關(guān)參數(shù),所以以windows服務(wù)方式啟動時,修改的并沒有生效。而通過<CATALINA_HOME>\bin\startup.bat 啟動直接是通過<CATALINA_HOME>\bin\catalina.bat文件中的配置的。你需要重新加載到系統(tǒng)服務(wù)中才生效,或者你手工在注冊表中查找修改啟動值,加載到服務(wù)中的時候參數(shù)已經(jīng)配置好了,自己修改artup.bat不會改變注冊表中的參數(shù)設(shè)置。
     
    解決方法:修改注冊表中的參數(shù),加入JVM初始化內(nèi)存的參數(shù):
    HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
    值為
    -Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
    -Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
    -Xrs
    如加入 -Xms512m -Xmx800m
     
    方式2:針對免安裝的用戶,也可以通過將tomcat注冊為windows的一個服務(wù)的方式來實現(xiàn):‘
    我們可以對service.bat文件做一些其他修改,使tomcat更加能滿足我們各種不同需求時的要求
    1. 如果讓tomcat編譯jsp文件,就在PR_CLASSPATH中加入J2SDK的tools.jar
    修改前:
    set PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar
    修改后:
    set PR_CLASSPATH=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar
    2.要使用一個特定的JVM,就要修改jvm的參數(shù);要使注冊的windows服務(wù)的啟動方式為自動,增加--Startup Automatic,這個是比較常用的;要用定制的server.xml配置文件并且傳遞多個參數(shù)給StartClass,要修改StartParams的值,各個值之間用分號分隔:
    修改前:
    "%EXECUTABLE%" //IS//%SERVICE_NAME% --Jvm auto
    --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap
    --StartParams start --StopParams stop
    修改后:
    "%EXECUTABLE%" //IS//%SERVICE_NAME% --Jvm "%JAVA_HOME%\jre\bin\server\jvm.dll"
    --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap
    --StartParams "-config;%CUSTOM_SERVERXML_FILE%;-nonaming;start" --StopParams stop
    --Startup Automatic
    3. 指定最大和最小的內(nèi)存限制,要增加jvm的初始參數(shù)
    修改前:
    "%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions
    "-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\common\endorsed"
    --StartMode jvm --StopMode jvm
    修改后:
    "%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions
    "-Xms128M;-Xmx256M;-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\common\endorsed"
    --StartMode jvm --StopMode jvm
    4.有時注冊windows服務(wù)成功后,但是啟動服務(wù)時顯示“發(fā)生服務(wù)特定錯誤: 0.”
    就是因為jvm沒有指定,修改Jvm auto為Jvm "%JAVA_HOME%\jre\bin\server\jvm.dll"后重新注冊windows服務(wù)就可以啟動了。

    posted @ 2009-05-27 11:16 MikyTan 閱讀(252) | 評論 (0)編輯 收藏

    Struts2中 用OGNL表達(dá)式定義字符串常量 與單個字符常量需要注意的一個小細(xì)節(jié)

    具體記錄如下:

    <s:set name="fieldType" value="'condition'"></s:set>
    <s:set name="countryID" value="'CHN'"></s:set>
    <s:set name="corpCenter" value="#session.opType.corpCenter"></s:set>
    <s:set name="corpID" value="#session.opType.corpID"></s:set>
    <s:set name="corpType" value="#session.opType.corpType"></s:set>
    <s:set name="agentID" value=""></s:set>
    <s:set name="city" value=""></s:set>
    <s:set name="agentType" value='"A"'></s:set>
    注意上面紅色部分的標(biāo)識。當(dāng)定義的變量為單個字符是,必須外面是單引號,字符用雙引號引起。

    <s:action name="ReportBeanListAction" id="reportBeanSkyechoAgentListAction">
                          <s:param name="agentID"><s:property value="agentID" /></s:param>
             <s:param name="city"><s:property value="city" /></s:param>
             <s:param name="corpID"><s:property value="corpID" /></s:param>
             <s:param name="corpCenter"><s:property value="corpCenter" /></s:param>
             <s:param name="agentType"><s:property value="agentType" /></s:param>
                            </s:action>

    附:轉(zhuǎn)載OGNL表達(dá)式相關(guān)的知識點:

    OGNL的全稱是Object Graph Navigation Language(對象圖導(dǎo)航語言),它是一種強(qiáng)大的表達(dá)式語言,讓你通過簡單一致的表達(dá)式語法來讀取和設(shè)置Java對象的屬性值,調(diào)用對象的方法,遍歷整個對象的結(jié)構(gòu)圖,實現(xiàn)字段類型轉(zhuǎn)換等功能。

    為什么使用OGNL
    相對于其它的表達(dá)式語言,OGNL的功能更為強(qiáng)大,它提供了很多高級而必需的特性,例如強(qiáng)大的類型轉(zhuǎn)換功能、靜態(tài)或?qū)嵗椒ǖ膱?zhí)行、跨集合投影,以及動態(tài)lambda表達(dá)式定義等。
    OGNL基礎(chǔ)
    OGNL表達(dá)式的計算都是圍繞OGNL上下文來進(jìn)行的,OGNL上下文實際上就是一個Map對象,由ognl.OgnlContext類(實現(xiàn)了 java.util.Map接口)來表示。OGNL上下文可以包含一個或多個JavaBean對象,在這些對象中有一個是特殊的,這個對象就是上下文的根 (root)對象。如果在寫表達(dá)式的時候,沒有指定使用上下文中的哪一個對象,那么根對象將被假定為表達(dá)式所依據(jù)的對象。
    在OGNL上下文中,只能有一個根對象,如果你訪問根對象,那么在寫表達(dá)式的時候,直接寫對象的屬性就可以了;否則,你需要使用“#key”前綴,例如表達(dá)式#namager.name。
    OGNL表達(dá)式
    OGNL表達(dá)式的基礎(chǔ)單元就是導(dǎo)航鏈,通常簡稱為鏈(chain)。最簡單的鏈由下列部分組成:
    1、屬性名:如name和manager.name;
    2、方法調(diào)用:如manager.hashCode(),返回manager對象的散列碼;
    3、數(shù)組索引:如emals[0],返回當(dāng)前對象的郵件列表中的第一個郵件地址。
    所有OGNL表達(dá)式的計算都是在當(dāng)前對象的上下文中,一個鏈簡單地使用鏈中先前鏈接的結(jié)果作為下一步計算的當(dāng)前對象。我們看如下所示的鏈:
    name.toCharArray()[0].numericValue.toString()
    這個表達(dá)式按照下列的步驟進(jìn)行計算:
    1、獲取根對象的name屬性;
    2、在String結(jié)果上調(diào)用toCharArray()方法;
    3、從char數(shù)組中提取第一個字符;
    4、從提取的字符對象上行到numericValue屬性(這個字符被表示為Character對象,Character類有一個getNumericValue()方法);
    5、在Integer對象結(jié)果上調(diào)用toString()方法。
    這個表達(dá)式最終結(jié)果是最后返回的toString()方法調(diào)用返回的字符串。
    常量
    OGNL支持的所有常量類型:
    1、字符串常量:
    以單引號或雙引號括起來的字符串。如”hello”,’hello’。
    不過要注意的是,如果是單個字符的字符串常量,必須使用雙引號。
    2、字符常量:
    以單引號括起來的字符。如’a'。
    3、數(shù)值常量:
    除了Java中的int、long、float和double外,OGNL還讓你使用“b”或“B”后綴指定BigDecimal常量,用“h”“H”后綴指定BigInteger常量。
    4、布爾常量:
    true和false。
    5、null常量。
    操作符
    OGNL除了支持所有的Java操作符外,還支持以下幾種:
    1、逗號,
    與C語言中的逗號操作符類似。
    2、花括號{}
    用于創(chuàng)建列表,元素之間用逗號分隔。
    3、in和not in
    用于判斷一個值是否在集合中。
    訪問JavaBean的屬性
    假如有一個employee對象作為OGNL上下文的根對象,那對于下面的表達(dá)式:
    1、name
    對應(yīng)的java代碼是employee.getName();
    2、address.country
    對應(yīng)的java代碼是employee.getAddress().getCountry();
    訪問靜態(tài)方法和靜態(tài)字段
    @class@method(args)     //調(diào)用靜態(tài)方法
    @class@field           //調(diào)用靜態(tài)字段
    其中class必須給出完整的類名(包括包名),如果省略class,那么默認(rèn)使用的類是java.util.Math,如:
    @@min(5,3)
    @@max(5,3)
    @@PI
    索引訪問
    OGNL支持多種索引方式的訪問。
    1、數(shù)組和列表索引
    在OGNL中,數(shù)組和列表可以大致看成是一樣的。
    如:array[0]、list[0]。表達(dá)式:{’zhangsan’,'lisi’,'wangwu’}[1]等。
    2、JavaBean的索引屬性
    要使用索引屬性,需要提供兩對setter和getter方法,一對用于數(shù)組,一對用于數(shù)組中的元素。
    如:有一個索引屬性interest,它的getter和setter如下
    public String[] interest;
    public String[] getInterest(){ return interest;}
    public void setInterest(String[] interest){ this.interest=interest;}
    public String getInterest(int i){ return interest[i]}
    public void setInterest(int i, String newInterest){ interest[i]=newInterest;}
    對于表達(dá)式interest[2],OGNL可以正確解釋這個表達(dá)式,調(diào)用getInterest(2)方法。如果是設(shè)置的情況下,會調(diào)用setInterest(2,value)方法。
    3、OGNL對象的索引屬性
    JavaBean的索引屬性只能使用整型作為索引,OGNL擴(kuò)展了索引屬性的概念,可以使用任意的對象來作為索引。
    對集合進(jìn)行操作
    1、創(chuàng)建集合:
    創(chuàng)建列表
    使用花括號將元素包含起來,元素之間使用逗號分隔。如{’zhangsan’,'lisi’,'wangwu’}
    創(chuàng)建數(shù)組
    OGNL中創(chuàng)建數(shù)組與Java語言中創(chuàng)建數(shù)組類似。
    創(chuàng)建Map
    Map使用特殊的語法來創(chuàng)建     #{”key”:value, ……}
    如果想指定創(chuàng)建的Map類型,可以在左花括號前指定Map實現(xiàn)類的類名。如:
    #@java.util.LinkedHashMap@{”key”:”value”,….}
    Map通過key來訪問,如map["key"]或map.key。
    2、投影
    OGNL提供了一種簡單的方式在一個集合中對每一個元素聞?wù){(diào)用相同的方法,或者抽取相同的屬性,并將結(jié)果保存為一個新的集合,稱之為投影。
    假如employees是一個包含了employee對象的列表,那么
    #employees.{name}將返回所有雇員的名字的列表。
    在投影期間,使用#this變量來引用迭代中的當(dāng)前元素。
    如:objects.{#this instanceof String? #this: #this.toString()}
    3、選擇
    OGNL提供了一種簡單的方式來使用表達(dá)式從集合中選擇某些元素,并將結(jié)果保存到新的集合中,稱為選擇。
    如#employees.{?#this.salary>3000}
    將返回薪水大于3000的所有雇員的列表。
    #employees.{^#this.salary>3000}
    將返回第一個薪水大于3000的雇員的列表。
    #employees.{$#this.salary>3000}
    將返回最后一個薪水大于3000的雇員的列表。
    lambda表達(dá)式
    lambda表達(dá)式的語法是:   :[...]。OGNL中的lambda表達(dá)式只能使用一個參數(shù),這個參數(shù)通過#this引用。
    如:
    #fact= :[ #this<=1 ? 1 : #this* #fact ( #this-1) ], #fact(30)
    #fib= :[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)

    OGNL的全稱是Object Graph Navigation Language(對象圖導(dǎo)航語言),它是一種強(qiáng)大的表達(dá)式語言,讓你通過簡單一致的表達(dá)式語法來讀取和設(shè)置Java對象的屬性值,調(diào)用對象的方法,遍歷整個對象的結(jié)構(gòu)圖,實現(xiàn)字段類型轉(zhuǎn)換等功能。

    為什么使用OGNL
    相對于其它的表達(dá)式語言,OGNL的功能更為強(qiáng)大,它提供了很多高級而必需的特性,例如強(qiáng)大的類型轉(zhuǎn)換功能、靜態(tài)或?qū)嵗椒ǖ膱?zhí)行、跨集合投影,以及動態(tài)lambda表達(dá)式定義等。
    OGNL基礎(chǔ)
    OGNL表達(dá)式的計算都是圍繞OGNL上下文來進(jìn)行的,OGNL上下文實際上就是一個Map對象,由ognl.OgnlContext類(實現(xiàn)了 java.util.Map接口)來表示。OGNL上下文可以包含一個或多個JavaBean對象,在這些對象中有一個是特殊的,這個對象就是上下文的根 (root)對象。如果在寫表達(dá)式的時候,沒有指定使用上下文中的哪一個對象,那么根對象將被假定為表達(dá)式所依據(jù)的對象。
    在OGNL上下文中,只能有一個根對象,如果你訪問根對象,那么在寫表達(dá)式的時候,直接寫對象的屬性就可以了;否則,你需要使用“#key”前綴,例如表達(dá)式#namager.name。
    OGNL表達(dá)式
    OGNL表達(dá)式的基礎(chǔ)單元就是導(dǎo)航鏈,通常簡稱為鏈(chain)。最簡單的鏈由下列部分組成:
    1、屬性名:如name和manager.name;
    2、方法調(diào)用:如manager.hashCode(),返回manager對象的散列碼;
    3、數(shù)組索引:如emals[0],返回當(dāng)前對象的郵件列表中的第一個郵件地址。
    所有OGNL表達(dá)式的計算都是在當(dāng)前對象的上下文中,一個鏈簡單地使用鏈中先前鏈接的結(jié)果作為下一步計算的當(dāng)前對象。我們看如下所示的鏈:
    name.toCharArray()[0].numericValue.toString()
    這個表達(dá)式按照下列的步驟進(jìn)行計算:
    1、獲取根對象的name屬性;
    2、在String結(jié)果上調(diào)用toCharArray()方法;
    3、從char數(shù)組中提取第一個字符;
    4、從提取的字符對象上行到numericValue屬性(這個字符被表示為Character對象,Character類有一個getNumericValue()方法);
    5、在Integer對象結(jié)果上調(diào)用toString()方法。
    這個表達(dá)式最終結(jié)果是最后返回的toString()方法調(diào)用返回的字符串。
    常量
    OGNL支持的所有常量類型:
    1、字符串常量:
    以單引號或雙引號括起來的字符串。如”hello”,’hello’。
    不過要注意的是,如果是單個字符的字符串常量,必須使用雙引號。
    2、字符常量:
    以單引號括起來的字符。如’a'。
    3、數(shù)值常量:
    除了Java中的int、long、float和double外,OGNL還讓你使用“b”或“B”后綴指定BigDecimal常量,用“h”“H”后綴指定BigInteger常量。
    4、布爾常量:
    true和false。
    5、null常量。
    操作符
    OGNL除了支持所有的Java操作符外,還支持以下幾種:
    1、逗號,
    與C語言中的逗號操作符類似。
    2、花括號{}
    用于創(chuàng)建列表,元素之間用逗號分隔。
    3、in和not in
    用于判斷一個值是否在集合中。
    訪問JavaBean的屬性
    假如有一個employee對象作為OGNL上下文的根對象,那對于下面的表達(dá)式:
    1、name
    對應(yīng)的java代碼是employee.getName();
    2、address.country
    對應(yīng)的java代碼是employee.getAddress().getCountry();
    訪問靜態(tài)方法和靜態(tài)字段
    @class@method(args)     //調(diào)用靜態(tài)方法
    @class@field           //調(diào)用靜態(tài)字段
    其中class必須給出完整的類名(包括包名),如果省略class,那么默認(rèn)使用的類是java.util.Math,如:
    @@min(5,3)
    @@max(5,3)
    @@PI
    索引訪問
    OGNL支持多種索引方式的訪問。
    1、數(shù)組和列表索引
    在OGNL中,數(shù)組和列表可以大致看成是一樣的。
    如:array[0]、list[0]。表達(dá)式:{’zhangsan’,'lisi’,'wangwu’}[1]等。
    2、JavaBean的索引屬性
    要使用索引屬性,需要提供兩對setter和getter方法,一對用于數(shù)組,一對用于數(shù)組中的元素。
    如:有一個索引屬性interest,它的getter和setter如下
    public String[] interest;
    public String[] getInterest(){ return interest;}
    public void setInterest(String[] interest){ this.interest=interest;}
    public String getInterest(int i){ return interest[i]}
    public void setInterest(int i, String newInterest){ interest[i]=newInterest;}
    對于表達(dá)式interest[2],OGNL可以正確解釋這個表達(dá)式,調(diào)用getInterest(2)方法。如果是設(shè)置的情況下,會調(diào)用setInterest(2,value)方法。
    3、OGNL對象的索引屬性
    JavaBean的索引屬性只能使用整型作為索引,OGNL擴(kuò)展了索引屬性的概念,可以使用任意的對象來作為索引。
    對集合進(jìn)行操作
    1、創(chuàng)建集合:
    創(chuàng)建列表
    使用花括號將元素包含起來,元素之間使用逗號分隔。如{’zhangsan’,'lisi’,'wangwu’}
    創(chuàng)建數(shù)組
    OGNL中創(chuàng)建數(shù)組與Java語言中創(chuàng)建數(shù)組類似。
    創(chuàng)建Map
    Map使用特殊的語法來創(chuàng)建     #{”key”:value, ……}
    如果想指定創(chuàng)建的Map類型,可以在左花括號前指定Map實現(xiàn)類的類名。如:
    #@java.util.LinkedHashMap@{”key”:”value”,….}
    Map通過key來訪問,如map["key"]或map.key。
    2、投影
    OGNL提供了一種簡單的方式在一個集合中對每一個元素聞?wù){(diào)用相同的方法,或者抽取相同的屬性,并將結(jié)果保存為一個新的集合,稱之為投影。
    假如employees是一個包含了employee對象的列表,那么
    #employees.{name}將返回所有雇員的名字的列表。
    在投影期間,使用#this變量來引用迭代中的當(dāng)前元素。
    如:objects.{#this instanceof String? #this: #this.toString()}
    3、選擇
    OGNL提供了一種簡單的方式來使用表達(dá)式從集合中選擇某些元素,并將結(jié)果保存到新的集合中,稱為選擇。
    如#employees.{?#this.salary>3000}
    將返回薪水大于3000的所有雇員的列表。
    #employees.{^#this.salary>3000}
    將返回第一個薪水大于3000的雇員的列表。
    #employees.{$#this.salary>3000}
    將返回最后一個薪水大于3000的雇員的列表。
    lambda表達(dá)式
    lambda表達(dá)式的語法是:   :[...]。OGNL中的lambda表達(dá)式只能使用一個參數(shù),這個參數(shù)通過#this引用。
    如:
    #fact= :[ #this<=1 ? 1 : #this* #fact ( #this-1) ], #fact(30)
    #fib= :[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)



     

    posted @ 2009-05-09 12:30 MikyTan 閱讀(4891) | 評論 (0)編輯 收藏

    Struts2 字符串截取


    <s:set name="hello" value="'Hello Miky as Miky'"></s:set>  ----定義源字符串
    <s:property value="#hello.substring(#hello.indexOf('as')+2)"/>  ---輸出字符串。結(jié)果為 Miky

    posted @ 2009-05-05 22:55 MikyTan 閱讀(383) | 評論 (0)編輯 收藏

    JSP 中使用Struts2的值 (Strust2 中調(diào)用JAVA的公共類方法)

    Struts2的值是保存在ValueStack中的,假設(shè)有一個字符串str,我們一般是這么取值的:

    <s:property value="str"/> 或者 ${str}

    如果想在jsp中使用的話,可以這么取:

    <%@ page import="com.opensymphony.xwork2.util.ValueStack" %>
    ……
    <%= ((ValueStack)request.getAttribute("struts.valueStack")).findString("str") %>

     

    也可以把ValueStack中的值先放到attribute中,然后直接取attribute的值:

    <s:set name="str" value="%{str}" />
    <%=request.getAttribute("str") %>

    方法一:

    <s:set name="str" value="'Hello World'"></s:set>

    <s:property value="%{@com.common.Constant@func(#str)}"/>

     

    func是類com.common.Constant里面的一個靜態(tài)方法

    str是動態(tài)的參數(shù)

     

    方法二:

    <s:bean name="com.common.StrutsHelper" id="helper" />

    <s:set name="str" value="'Hello World'"></s:set>

    <s:property value="#helper.func(#str)" />

    func是類com.common.StrutsHelper里面的一個普通方法

    str是動態(tài)方法

    s:bean其實是對類StrutsHelper的實例化,跟方法一有些區(qū)別,方法一里的函數(shù)必須是靜態(tài)的

    posted @ 2009-05-05 20:42 MikyTan 閱讀(2675) | 評論 (1)編輯 收藏

    產(chǎn)品時間段(StartDate,EndDate)SQL查詢

    表 a 字段,id,開始時間,結(jié)束時間,價格
    1,2008-01-01,2008-09-10,220.0
    2,2008-09-11,2008-09-30,280.0
    3,2008-10-01,2008-10-10,320.0
    3,2008-10-11,2008-12-31,350.0

    輸入一個開始時間,一個結(jié)束時間,返回這段時間內(nèi)每天的價格,最好返回每天的日期和對應(yīng)的價格
    例輸入開始時間2008-09-09,結(jié)束時間2008-09-13
    返回
    2008-09-09,220
    2008-09-10,220
    2008-09-11,280
    2008-09-12,280
    2008-09-13,280

    方案一:采用存儲過程的方案!
    create table T([id] int,[開始時間] datetime,[結(jié)束時間] datetime,[價格] numeric(4,1))
    insert into T
    select 1,'2008-01-01','2008-09-10',220.0 union all
    select 2,'2008-09-11','2008-09-30',280.0 union all
    select 3,'2008-10-01','2008-10-10',320.0 union all
    select 3,'2008-10-13','2008-12-31',350.0

    select * from T
    go
    --Code
    create procedure GetTimePrice(@begintime datetime,@endtime datetime)
    as
    declare @tmptime datetime
    declare @tmp table (dt datetime,price numeric(4,1))--結(jié)果表
    begin
    set @tmptime=@begintime
    while @tmptime<=@endtime
    begin

    insert into @tmp
    select @tmptime,價格  from t where @tmptime between 開始時間 and 結(jié)束時間
    set @tmptime=DATEADD(dd,1,@tmptime)
    end
    select * from @tmp
    end
    go

    exec GetTimePrice '2008-09-09','2008-09-14'--執(zhí)行
    --
    Drop
    drop table T
    drop procedure GetTimePrice


    方案二:采用Case方案
    set nocount on
    create table T([id] int,[開始時間] datetime,[結(jié)束時間] datetime,[價格] numeric(4,1))
    insert into T
    select 1,'2008-01-01','2008-09-10',220.0 union all
    select 2,'2008-09-11','2008-09-30',280.0 union all
    select 3,'2008-10-01','2008-10-10',320.0 union all
    select 3,'2008-10-11','2008-12-31',350.0

    declare @bgnTime datetime set @bgnTime = '2008-09-09'
    declare @endTime datetime set @endTime = '2008-09-13'
    select id
        ,
    case when [開始時間]<@bgnTime then @bgnTime else [開始時間] end as [開始時間] -- 讓輸出結(jié)果更貼近參數(shù)表現(xiàn)出來
        ,case when [結(jié)束時間]>@endTime then @endTime else [結(jié)束時間] end as [結(jié)束時間] -- 讓輸出結(jié)果更貼近參數(shù)表現(xiàn)出來
        ,[價格]
    from T
    where [開始時間]<@endTime
    and [結(jié)束時間]>@bgnTime
    -- id,開始時間,結(jié)束時間
    --
     1,2008-09-09 00:00:00.000,2008-09-10 00:00:00.000
    --
     2,2008-09-11 00:00:00.000,2008-09-13 00:00:00.000

    drop table T

    id          開始時間                                                   結(jié)束時間                                                   價格     
    ----------- ------------------------------------------------------ ------------------------------------------------------ ------ 
    1           2008-09-09 00:00:00.000                                2008-09-10 00:00:00.000                                220.0
    2           2008-09-11 00:00:00.000                                2008-09-13 00:00:00.000                                280.0

    posted @ 2009-04-23 20:50 MikyTan 閱讀(799) | 評論 (0)編輯 收藏

    jQuery實現(xiàn)input文本框內(nèi)灰色提示文本效果 和 input標(biāo)簽獲取焦點是文本框內(nèi)提示信息清空

         摘要: 一、jQuery實現(xiàn)input文本框內(nèi)灰色提示文本效果 <html>   <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <titl...  閱讀全文

    posted @ 2009-04-23 11:50 MikyTan 閱讀(13376) | 評論 (3)編輯 收藏

    酒店價格間夜顯示(JavaScript 實現(xiàn))

         摘要: 酒店間夜價格顯示實現(xiàn): 跨周: <%@ page language="java" contentType="text/html; charset=utf-8"     pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC&...  閱讀全文

    posted @ 2009-04-21 13:31 MikyTan 閱讀(410) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲色偷偷狠狠综合网| 亚洲国产成人99精品激情在线| 亚洲Aⅴ在线无码播放毛片一线天| 男女作爱在线播放免费网站| 波多野结衣免费视频观看| 亚洲成综合人影院在院播放| 国产免费久久久久久无码| 国产精品无码免费视频二三区| 久久精品a亚洲国产v高清不卡| jizz免费一区二区三区| 热久久精品免费视频| 亚洲毛片基地日韩毛片基地| 香蕉免费看一区二区三区| 国产精品免费看久久久久| 亚洲人成黄网在线观看| 日本免费在线观看| 国产亚洲精午夜久久久久久| 国产亚洲Av综合人人澡精品| 成年轻人网站色免费看| 亚洲短视频在线观看| 久久久久免费精品国产小说| 亚洲午夜无码AV毛片久久| 亚洲Av无码国产一区二区| 国产1024精品视频专区免费| 午夜亚洲www湿好大| 免费无码作爱视频| 亚洲中文字幕无码久久精品1| 国产精品亚洲专一区二区三区| 成人毛片手机版免费看| 亚洲成人黄色在线| 99在线视频免费| 午夜亚洲www湿好大| 欧洲人成在线免费| 国产成人精品日本亚洲网站| 久久久久亚洲av无码尤物| 久久WWW免费人成—看片| 亚洲精品国产高清不卡在线| 欧洲精品码一区二区三区免费看| 免费萌白酱国产一区二区| 亚洲av永久中文无码精品| 日韩在线a视频免费播放|