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

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

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

    Loading...

    java .net

    2009年2月5日

    最近在學(xué)習(xí)如何使用maven,做了一個(gè)demo(基于S2S整合),總結(jié)一下與大家分享,期待與大家討論以期快速進(jìn)步。

    一、maven介紹

    1、maven是什么

    http://maven.apache.org/
    官方解釋?zhuān)篗aven是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型 (Project Object Model),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴管理系統(tǒng)(Dependency Management System),和用來(lái)運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。

    2、使用maven有什么好處,解決什么問(wèn)題

    jar統(tǒng)一管理了:

    如果建立了一個(gè)本地的jar倉(cāng)庫(kù),那么所有人都是從倉(cāng)庫(kù)里面下載jar,拷貝項(xiàng)目時(shí)只需要copy幾K的源碼即可!其次,依然是倉(cāng)庫(kù),使得每個(gè)人的jar版本都是一致的,不會(huì)出現(xiàn)因?yàn)榘姹静煌鸬哪涿畹腻e(cuò)誤。
    項(xiàng)目的自動(dòng)化:

    只需要mvn package命令,在eclipse里面,看run里面,只需要選擇就行了!它會(huì)自動(dòng)的從編譯,測(cè)試開(kāi)始,一直到打包,自動(dòng)的運(yùn)行,保證你的包沒(méi)有問(wèn)題。

    我們?cè)谧龆鄠€(gè)不同的Java項(xiàng)目時(shí),每個(gè)項(xiàng)目所用到的庫(kù)文件基本都是大同小異的,通常的做法是每個(gè)項(xiàng)目下面都會(huì)復(fù)制一份這些庫(kù)文件,甚至?xí)堰@些庫(kù)文件都提交到vss上去,這樣帶來(lái)的問(wèn)題不僅是增大了項(xiàng)目占用的硬盤(pán)空間,而且也使包管理很混亂。

    我們可以這樣查看jar包的依賴關(guān)系,是不是很爽?!
    image

    還可以單元測(cè)試覆蓋率報(bào)表:

    image

    2、helloword

    1、下載Maven 附件中的maven3.jar 解壓到任意目錄

    2、安裝eclipse插件m2eclipse

    方式一:在線安裝 更新地址是:http://m2eclipse.sonatype.org/sites/m2e
    方式二:本地安裝 help-->install new softeware-->add-->name填寫(xiě)maven-->archive..-->jar:file:/../m2e.zip!/-->ok
    安裝完成重啟eclipse,在Window-->Preferences-->Maven下配置

    image

    禁用eclipse啟動(dòng)時(shí)更新maven index 主要是每次eclipse啟動(dòng)時(shí)都更新很煩人

    image

    添加自己的maven

    3、新建maven項(xiàng)目

    按照下圖步驟

    image

    • groupId定義了項(xiàng)目屬于哪個(gè)組,這個(gè)組往往和項(xiàng)目所在的組織或公司存在關(guān)聯(lián)。譬如在googlecode上建立了一個(gè)名為myapp的項(xiàng)目,那么groupId就應(yīng)該是com.googlecode.myapp.
    • artifactId定義了當(dāng)前Maven項(xiàng)目在組中唯一的ID,groupId為com.googlecode.myapp的例子中,你可能會(huì)為不同的子項(xiàng)目(模塊)分配artifactId,如myapputil、myappdomain、myappweb等。
    • version指定了項(xiàng)目當(dāng)前的版本——1.0SNAPSHOT。SNAPSHOT意為快照,說(shuō)明該項(xiàng)目還處于開(kāi)發(fā)中,是不穩(wěn)定的版本。隨著項(xiàng)目的發(fā)展,version會(huì)不斷更新,如升級(jí)為1.0、1.1SNAPSHOT、1.1、2.0等。
    • name元素聲明了一個(gè)對(duì)于用戶更為友好的項(xiàng)目名稱(chēng)

    點(diǎn)擊Finish完成

    4、maven項(xiàng)目結(jié)構(gòu)

    下圖為基于maven項(xiàng)目結(jié)構(gòu),這里跟我們以前的項(xiàng)目結(jié)構(gòu)很不一樣,以前的項(xiàng)目結(jié)構(gòu)約定俗成的只有兩塊 一個(gè)src 一個(gè)webRoot,當(dāng)然這些都可以隨意配置,比如WebRoot有的叫WebContent

    image
    這里maven倡導(dǎo)約定優(yōu)于配置,maven的約定就是以下目錄結(jié)構(gòu)
    src/main/java 下存放java類(lèi)
    src/main/webapp 下存放頁(yè)面文件(需要手動(dòng)創(chuàng)建)
    src/main/resources 下存放資源文件
    src/test/java 下存放單元測(cè)試代碼
    src/test/resources 下存放測(cè)試資源文件

    5、添加jar包

    只需維護(hù)pom.xml
    比如添加struts2-core
    <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.0.11.2</version>
    </dependency>

    我在172.20.66.230上部署了一個(gè)maven倉(cāng)庫(kù),訪問(wèn)地址http://172.20.66.230:8081/nexus/

    maven會(huì)根據(jù)pom.xml中的配置訪問(wèn)230的倉(cāng)庫(kù)下載對(duì)應(yīng)的jar source 以及doc,下載到哪?這要看maven3/conf/settings.xml 55:

    <localRepository>F:/Maven3/repository</localRepository>

    6、編寫(xiě)代碼

    附件中有一個(gè)struts2+spring 的demo,解壓然后import eclipse

    在項(xiàng)目名上右鍵 run as -->Run Configurations

    image

    按圖配置,點(diǎn)擊Run即可。瀏覽器中訪問(wèn)http://localhost:8080/MavenSSH/

    Maven運(yùn)行的生命周期

    • 復(fù)制src/main/resources資源文件到輸出目錄

    • 編譯src/main/java下的源代碼

    • 復(fù)制src/test/resources下的測(cè)試用資源文件到測(cè)試輸出目錄

    • 編譯src/test/java下的測(cè)試用例

    • 運(yùn)行測(cè)試用例

    • 打包生成

    ===========================

    • 以上是一個(gè)簡(jiǎn)單的例子,只是用它獲取依賴的jar包 。maven還有很多諸如項(xiàng)目管理方面的功能,比如文檔編制、發(fā)布管理、配置管理...

    • 第一個(gè)次運(yùn)行項(xiàng)目會(huì)比較慢,因?yàn)橐螺djar包。

    • MavenSSH.rar是一個(gè)struts2與spring集成的例子,頁(yè)面用到了sitemesh div+css 也值得學(xué)習(xí)

    • 項(xiàng)目debug是運(yùn)行在jetty(類(lèi)似于tomcat的容器)中。

    posted @ 2011-04-18 16:09 豬 閱讀(1332) | 評(píng)論 (5)編輯 收藏

    如果部署GAE時(shí)正在upload files時(shí)退出,下次部署時(shí)會(huì)報(bào)錯(cuò)

    Another transaction by user is already in progress for this app and major version. That user can undo the transaction with appcfg.py's "rollback" command

     

    找到eclipse中的GAE SDK目錄

    如:D:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle.1.3.8_1.3.8.v201010161055\appengine-java-sdk-1.3.8\bin

     

    執(zhí)行命令

    appcfg.cmd rollback 后面跟gae項(xiàng)目war所在目錄

    如 appcfg.cmd rollback D:/spring/eclipse_workspace/taobaoke/war

     

    執(zhí)行:

    ********************************************************
    Warning: Future versions of the Dev App Server will require Java 1.6 or later. P
    lease upgrade your JRE.
    ********************************************************
    Reading application configuration data...
    2010-11-15 9:34:23 com.google.apphosting.utils.config.AppEngineWebXmlReader read
    AppEngineWebXml
    信息: Successfully processed D:/spring/eclipse_workspace/taobaoke/war\WEB-INF/ap
    pengine-web.xml
    2010-11-15 9:34:23 com.google.apphosting.utils.config.AbstractConfigXmlReader re
    adConfigXml
    信息: Successfully processed D:/spring/eclipse_workspace/taobaoke/war\WEB-INF/we
    b.xml
    2010-11-15 9:34:23 com.google.apphosting.utils.config.AbstractConfigXmlReader re
    adConfigXml
    信息: Successfully processed D:/spring/eclipse_workspace/taobaoke/war\WEB-INF/cr
    on.xml
    Beginning server interaction for taokeapp...
    0% Rolling back the update.
    Success.
    Cleaning up temporary files...

    posted @ 2010-11-15 09:55 豬 閱讀(425) | 評(píng)論 (0)編輯 收藏

    在網(wǎng)上無(wú)意搜到一個(gè)用Ext實(shí)現(xiàn)的淘寶客,恩 ,咱用GWT做一個(gè)車(chē)輪

    下了淘寶的 SDK for java就開(kāi)干 參考API文檔按部就班

    在淘寶的沙箱里測(cè)試,很順利,乘勝前進(jìn),到正式環(huán)境下測(cè)試

    問(wèn)題來(lái)了

    invalid signature

    網(wǎng)上搜了一通,有說(shuō)時(shí)間戳不對(duì),果不其然,GAE使用的是標(biāo)準(zhǔn)時(shí)間,整整差了8小時(shí),遂在獲得的當(dāng)前時(shí)間上加了8小時(shí),OK

    invalid signature 可能的另一個(gè)原因是APP_KEY 或 APP_SERCET不正確,仔細(xì)檢查

     

    調(diào)用 taobao.item.get

     

    1 TaobaoClient client=new DefaultTaobaoClient(TaobaokeConstant.SANDBOX_URL, TaobaokeConstant.APP_KEY, TaobaokeConstant.APP_SERCET);
    2 ItemcatsGetRequest req=new ItemcatsGetRequest();
    3 java.util.Calendar c=java.util.Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
    4 c.add(Calendar.HOUR, 8);
    5 req.setTimestamp(c.getTime().getTime()) ;
    6 req.setParentCid(new Long(0));
    7 ItemcatsGetResponse response=client.execute(req);
    8 return response.getItemCats();

     

    調(diào)用 taobao.taobaoke.items.get

     
    1 TaobaoClient client=new DefaultTaobaoClient(TaobaokeConstant.SANDBOX_URL, TaobaokeConstant.APP_KEY,TaobaokeConstant.APP_SERCET);
    2 TaobaokeItemsGetRequest req=new TaobaokeItemsGetRequest();
    3 req.setFields("num_iid,title,nick,pic_url,price,click_url,commission,commission_rate,commission_num,commission_volume,shop_click_url,seller_credit_score,item_location,volume,taobaoke_cat_click_url,keyword_click_url");
    4 req.setCid(Long.parseLong(cid));
    5 req.setNick(TaobaokeConstant.NICK);
    6 req.setSort("commissionRate_desc");
    7 TaobaokeItemsGetResponse response=client.execute(req);
    8 return response.getTaobaokeItems();
     
    想用GAE JCache API 加入緩存以減輕壓力,但屢試不行,從緩存中取 的時(shí)候報(bào)錯(cuò)
    沒(méi)找到原因
     
    改用自己寫(xiě)的緩存,然后用App Engine Cron 服務(wù)管理緩存
     
    corn.xml
     
    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <cronentries>
    3   <cron>
    4     <url>/cron/recache</url>
    5     <description>Repopulate the cache every 1 hours</description>
    6     <schedule>every 1 hours</schedule>
    7   </cron>
    8 </cronentries>
    posted @ 2010-10-21 11:33 豬 閱讀(743) | 評(píng)論 (0)編輯 收藏
    posted @ 2010-06-13 09:54 豬 閱讀(434) | 評(píng)論 (0)編輯 收藏
         摘要: 01 var $j = jQuery.noConflict(); 02 //使用此方法驗(yàn)證所有text textarea 是否含有非法字符 03 $j(document).ready(function(){ 04    $j("input[type='text']").each(functio...  閱讀全文
    posted @ 2010-06-13 09:53 豬 閱讀(2047) | 評(píng)論 (1)編輯 收藏
    一個(gè)喜歡coding的程序員,工作在北京,從事java web 開(kāi)發(fā),喜歡JavaScript,平時(shí)關(guān)注技術(shù)新聞,試用各種新框架、新語(yǔ)言,學(xué)海無(wú)涯,有時(shí)也迷茫
    平時(shí)沒(méi)事翻翻編程思想、瀏覽各位同行的blog,將各種實(shí)際中的技巧、方法拿來(lái)養(yǎng)眼,并用到自己的項(xiàng)目中感受快樂(lè)
    頭兒的評(píng)價(jià):不管遇到什么難題,都會(huì)鉆窟窿盜洞把它解決掉

    求職簡(jiǎn)歷
    posted @ 2010-05-19 14:58 豬 閱讀(282) | 評(píng)論 (0)編輯 收藏
    Compiling module com.capinfo.cdss.gwt.olap.Olap
    Compiling 12 permutations
    Compiling permutation 0...
    Compiling permutation 1...
    Compiling permutation 2...
    Compiling permutation 3...
    Compiling permutation 4...
    Compiling permutation 5...
    Compiling permutation 6...
    Compiling permutation 7...
    Compiling permutation 8...
    Compiling permutation 9...
    Compiling permutation 10...
    Compiling permutation 11...
    Compile of permutations succeeded
    Linking into D:\spring\workspace\fusionchart\war\olap.
    Link succeeded
    Compilation succeeded -- 291.925s

    在#.gwt.xml中添加支持Firefox
    <!-- User Agent -->
    <set-property name="user.agent" value="gecko1_8" /> 
    編譯的確變得很快,但I(xiàn)E中果真不好使
    posted @ 2010-05-19 10:19 豬 閱讀(1159) | 評(píng)論 (1)編輯 收藏
    GWT設(shè)置UncaughtExceptionHandler 以捕獲為捕捉的異常,這gwt在host mode編譯后的JavaScript如果出現(xiàn)錯(cuò)誤,No errors in Hosted Mode and Compiled localy, but deployed to tomcat yields in errors
    這是惱人,加上UncaughtExceptionHandler起碼有一絲線索
    GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
        public void onUncaughtException(Throwable throwable{
            String text = "Uncaught exception: ";
            while (throwable != null{
                StackTraceElement[] stackTraceElements = throwable
                        .getStackTrace();
                text += throwable.toString() + "\n";
                for (int i = 0i < stackTraceElements.lengthi++) {
                    text += "    at " + stackTraceElements[i] + "\n";
                }
                throwable = throwable.getCause();
                if (throwable != null{
                    text += "Caused by: ";
                }
            }
            System.err.print(text);
            text = text.replaceAll(" ", " ");
            Window.alert("系統(tǒng)錯(cuò)誤:"+text);
        }
    });
    posted @ 2010-05-19 10:18 豬 閱讀(371) | 評(píng)論 (0)編輯 收藏
    java.lang.IllegalStateException:Should only call onDetach when the widget is attached to the browser's document

    這個(gè)異常是在com.google.gwt.user.client.ui.Widget protected void onDetach() 方法拋出的
    當(dāng)頁(yè)面重新加載或離開(kāi)頁(yè)面時(shí)會(huì)執(zhí)行這個(gè)方法
    如果系統(tǒng)沒(méi)有正常初始化,會(huì)有這個(gè)異常
    郁悶的是No errors in Dev Mode but Compiled localy and deployed to tomcat in errors
    posted @ 2010-05-19 10:18 豬 閱讀(507) | 評(píng)論 (0)編輯 收藏

    private void showWaitMess(Frame window){
        final MessageBox box = MessageBox.wait("等待", "正在查詢數(shù)據(jù),請(qǐng)稍后...", "查詢中...");
        final Element frame = window.getElement();
        final Timer t = new Timer() {
            @Override
            public void run() {
                if (ready(frame)) {
                    this.cancel();
                    box.close();
                }
            }
        };
        t.scheduleRepeating(100);
    }
    private native boolean ready(Element frame)/*-{
        return frame.contentWindow.document.readyState=="complete";
    }-*/;
    posted @ 2010-05-19 10:15 豬 閱讀(296) | 評(píng)論 (0)編輯 收藏
    又漲見(jiàn)識(shí)了
    IE8報(bào)下面錯(cuò)誤,而且是我的機(jī)器不報(bào),同事的機(jī)器報(bào),試了4臺(tái),兩個(gè)報(bào),兩個(gè)不報(bào),IE版本都一樣,沒(méi)想明白
    解決:1、查看是否有未關(guān)閉的html標(biāo)簽,比如<table>而沒(méi)有</table> (我就是這個(gè)原因)
    2、是否在頁(yè)面未加載完前js代碼操作了body里的元素,將相關(guān)js代碼移到</body>后面



    網(wǎng)頁(yè)錯(cuò)誤詳細(xì)信息

    用戶代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
    時(shí)間戳: Wed, 14 Apr 2010 08:33:56 UTC


    消息: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
    行: 0
    字符: 0
    代碼: 0
    URI:  


    http://support.microsoft.com/kb/927917
    posted @ 2010-05-19 10:11 豬 閱讀(1855) | 評(píng)論 (0)編輯 收藏

           本來(lái)系統(tǒng)是由JSP+潤(rùn)乾報(bào)表做的,做出一版來(lái)給人家客戶演示,人家覺(jué)得體驗(yàn)不夠,也沒(méi)不夠絢麗,要求回去返工,主要是因?yàn)樗麄兛催^(guò)他們兄弟部門(mén)的一個(gè)類(lèi)似系統(tǒng),要求向那個(gè)系統(tǒng)靠攏,可殊不知人家那是.net做的C/S,交互體驗(yàn)當(dāng)然好了。

          面臨一個(gè)抉擇,換.net平臺(tái)做winform,然后用sql server Analysis Services 的現(xiàn)成組件,這要技術(shù)上肯定可行,但是需要購(gòu)買(mǎi)一堆微軟的東西,錢(qián)啊。

          正好以前看過(guò)一些GWT的資料,以及基于GWT的開(kāi)源框架,它的界面效果倒是可以滿足客戶的要求,遂毛遂自薦,想試試用GXT實(shí)驗(yàn)是否能實(shí)現(xiàn)要求的功能和效果,同時(shí)也有其他同事考察了SAP的BI,水晶E表,IBM的Cognos,結(jié)果因功能實(shí)現(xiàn)不夠或者商務(wù)問(wèn)題擱淺

          好像春節(jié)后沒(méi)多久就開(kāi)始搞GWT,現(xiàn)在終于實(shí)現(xiàn)了(或是變相實(shí)現(xiàn)了)要求的功能、滿足了客戶的意見(jiàn),很有成就感,期間經(jīng)歷了兩次重構(gòu),現(xiàn)在采用的GXT提供的MVC模型,底層數(shù)據(jù)訪問(wèn)是通過(guò)調(diào)用潤(rùn)乾報(bào)表API,將潤(rùn)乾報(bào)表運(yùn)算結(jié)果轉(zhuǎn)化為一個(gè)List,然后交給GXT在頁(yè)面展現(xiàn)。

          頁(yè)面功能上,GXT挺全面,Grid列排序,隱藏顯示特定列,樹(shù)形展開(kāi)收縮,用open chart封裝的統(tǒng)計(jì)圖表,數(shù)據(jù)鉆取,列標(biāo)題分組,拖拽形式動(dòng)態(tài)設(shè)置列維度、行維度以實(shí)現(xiàn)靈活查詢,將靈活查詢行列維度保存起來(lái)供以后隨時(shí)打開(kāi),將結(jié)果到處Excel、PDF、Word,動(dòng)態(tài)設(shè)置查詢條件的顯示隱藏,動(dòng)態(tài)的進(jìn)度條提示等等

          接下來(lái)還要融入GIS,實(shí)現(xiàn)報(bào)表到地圖,地圖到報(bào)表。

          值得注意的是所有這些功能都是在一個(gè)窗口中完成的,實(shí)現(xiàn)了菜單、維度定義、報(bào)表、統(tǒng)計(jì)圖功能的融合,不用客戶點(diǎn)來(lái)點(diǎn)去,一步了然。

    posted @ 2010-05-19 10:11 豬 閱讀(456) | 評(píng)論 (0)編輯 收藏

    OLAP(On_line Analytical Processing聯(lián)機(jī)分析處理) 和 OLTP(On_line Transaction Processing聯(lián)機(jī)事務(wù)處理)

    OLTP:On_line Transaction Processing 聯(lián)機(jī)事務(wù)處理 ,以業(yè)務(wù)處理為主

    OLAP:On_line Analytical Processing     聯(lián)機(jī)分析處理,則是專(zhuān)門(mén)為支持復(fù)雜的分析操作而設(shè)計(jì)的,側(cè)重于對(duì)決策人員和高層管理人員的決策支持

    posted @ 2010-05-19 10:05 豬 閱讀(329) | 評(píng)論 (0)編輯 收藏
    因?yàn)榭蛻舨粷M意界面設(shè)計(jì),人家看中了兄弟單位用的系統(tǒng)的樣子,可他卻不知那時(shí)cs程序,要想用bs做成那樣的效果還是先天不足,就這樣開(kāi)始了GWT GXT的探索,一邊摸索一邊用GXT重寫(xiě)這個(gè)系統(tǒng)
    現(xiàn)在想想 經(jīng)歷了三個(gè)階段
    剛開(kāi)始是demo階段,因?yàn)椴恢缆纷卟蛔叩耐ǎ婷鱃XT能實(shí)現(xiàn)的效果,也沒(méi)注意模塊的規(guī)劃,甚至就一個(gè)類(lèi)
    而后發(fā)現(xiàn)還是能走通的,就開(kāi)始添磚加瓦,發(fā)現(xiàn)代碼越加越亂,決心重構(gòu),定義了多個(gè)包,多個(gè)類(lèi)負(fù)責(zé)不同的功能模塊,定義了一些Panel,一下子清晰多了,也遇到了不同模塊間互相調(diào)用的問(wèn)題,自己想當(dāng)然的辦法就是在一個(gè)類(lèi)中聲明每個(gè)模塊作為屬性,就像一個(gè)總管,每個(gè)屋子的鑰匙我都有了,也認(rèn)識(shí)到了這樣的缺點(diǎn),一些模塊中的事件不等不在這個(gè)主管中定義
    現(xiàn)在Now,用一天時(shí)間再次改寫(xiě),仿照Gxt中的例子Explorer
    1、將各個(gè)模塊定義成com.extjs.gxt.ui.client.mvc.View,View中必須實(shí)現(xiàn)方法handleEvent(AppEvent event),負(fù)責(zé)處理發(fā)給自己的事件
    2、為每個(gè)View定義com.extjs.gxt.ui.client.mvc.Controller,每個(gè)Controller中包含View,在這里定義View要處理的事件
    3、在Dispatcher中注冊(cè)每個(gè)Controller

    這樣,每個(gè)View各司其職,他們各自有各自的功能,會(huì)接收為他們定義的所有事件并處理,發(fā)送事件Dispatcher.forwardEvent(appEvent);

    感覺(jué)這次改寫(xiě)后 速度還沒(méi)有改寫(xiě)前的快,現(xiàn)在每次操作url會(huì)自動(dòng)添加Hash,想把它去掉,一直沒(méi)找到根結(jié)
    posted @ 2010-05-19 09:55 豬 閱讀(612) | 評(píng)論 (0)編輯 收藏
    Gwt中調(diào)用panel的setUrl方法嵌入一個(gè)網(wǎng)頁(yè)
    在網(wǎng)頁(yè)加載過(guò)程中加入wait
    在頁(yè)面中加入javascript
    var ready = false; 
    $j(document).ready(function(){
    ready = true; 
    });//這里用了jquery

    然后再java中聲明
    public native boolean ready(Element frame)/*-{
    return frame.contentWindow.ready?true:false;
    }-*/;

    然后在設(shè)置Frame的url時(shí)
    olapFrame = centerCp.setUrl(GWT.getHostPageBaseURL()
    + com.google.gwt.http.client.URL.encode("jsp/showOlap.jsp?dim="
    + dims + "&dimname=" + colLabels + ""));
    final MessageBox box = MessageBox.wait("等待", "正在查詢數(shù)據(jù),請(qǐng)稍后...", "查詢中...");
    final Element frame = olapFrame.getElement();
    final Timer t = new Timer() {
    @Override
    public void run() {
    if (ready(frame)) {
    this.cancel();
    box.close();
    }
    }
    };
    t.scheduleRepeating(100);
    posted @ 2010-05-19 09:54 豬 閱讀(481) | 評(píng)論 (0)編輯 收藏
    organize imports應(yīng)該是ctrl+shift+o的操作
    add import導(dǎo)入指定的類(lèi)
    organize imports導(dǎo)入所有需要導(dǎo)入的類(lèi),并且如果有些import是沒(méi)用的,那么eclipse會(huì)自動(dòng)刪除
    posted @ 2010-03-03 22:07 豬 閱讀(1289) | 評(píng)論 (0)編輯 收藏
    Gwt中調(diào)用panel的setUrl方法嵌入一個(gè)網(wǎng)頁(yè)
    在網(wǎng)頁(yè)加載過(guò)程中加入wait
    在頁(yè)面中加入javascript
    var ready = false;
    $j(document).ready(function(){
    ready = true;
    });//這里用了jquery

    然后再java中聲明
    public native boolean ready(Element frame)/*-{
    return frame.contentWindow.ready?true:false;
    }-*/;

    然后在設(shè)置Frame的url時(shí)
    olapFrame = centerCp.setUrl(GWT.getHostPageBaseURL()
    + com.google.gwt.http.client.URL.encode("jsp/showOlap.jsp?dim="
    + dims + "&dimname=" + colLabels + ""));
    final MessageBox box = MessageBox.wait("等待", "正在查詢數(shù)據(jù),請(qǐng)稍后...", "查詢中...");
    final Element frame = olapFrame.getElement();
    final Timer t = new Timer() {
    @Override
    public void run() {
    if (ready(frame)) {
    this.cancel();
    box.close();
    }
    }
    };
    t.scheduleRepeating(100);
    posted @ 2010-03-03 22:07 豬 閱讀(226) | 評(píng)論 (0)編輯 收藏
    javascript 調(diào)用java代碼
    //調(diào)用JAVA靜態(tài)方法
    //規(guī)則: @全路徑類(lèi)名::靜態(tài)方法名(方法簽名)(傳入?yún)?shù))
    //@com.capinfo.cdss.gwt.olap.client.ui.PartOlapCenterTab::saveOlapState

    (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava

    /lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)

    (saveName,dims,rowDims,colDims,sql,colLabels,expandInfo,hideInfo,exp,field,remark);
    //調(diào)用JAVA非靜態(tài)方法
    //規(guī)則:實(shí)例對(duì)象.@全路徑類(lèi)名::方法名(方法簽名)(傳入?yún)?shù))
    //this.@com.capinfo.cdss.gwt.olap.client.ui.PartOlapCenterTab::saveOlapState

    (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava

    /lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)

    (saveName,dims,rowDims,colDims,sql,colLabels,expandInfo,hideInfo,exp,field,remark);


    //調(diào)用JAVA的非靜態(tài)屬性
    //規(guī)則:實(shí)例對(duì)象.@全路徑類(lèi)名::屬性名
    //var field=this.@com.capinfo.cdss.gwt.olap.client.ui.PartOlapCenterTab::field;

    參考:http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/types.html#wp16432
    http://yonglin4605.javaeye.com/blog/568045
    http://yonglin4605.javaeye.com/blog/564829
    posted @ 2010-03-03 22:06 豬 閱讀(652) | 評(píng)論 (0)編輯 收藏
    在*.gwt.xml中加入 顯示中文
    <inherits name="com.google.gwt.i18n.I18N"/>
    <extend-property name="locale" values="zh" />
    在頁(yè)面中加入
    <meta name="gwt:property" content="locale=zh" >
    posted @ 2010-03-03 21:44 豬 閱讀(518) | 評(píng)論 (0)編輯 收藏
    調(diào)用panel的setUrl方法嵌入一個(gè)網(wǎng)頁(yè)
    要訪問(wèn)這個(gè)網(wǎng)頁(yè)中的js變量 var abc
    setUrl返回一個(gè)Frame

    public native void jsGetVar(Element element)/*-{
    var abc = element.contentWindow.abc;
    //element.contentWindow.document.getElementById("name");訪問(wèn)element
    }-*/;

    調(diào)用 jsGetVar(frame.getElement());

    參考:http://tailorcai.javaeye.com/blog/186897
    posted @ 2010-03-03 21:44 豬 閱讀(397) | 評(píng)論 (0)編輯 收藏
    在網(wǎng)上搜索了很多部署gwt到tomcat的blog,吸取了大家的經(jīng)驗(yàn),又發(fā)現(xiàn)一些問(wèn)題,總結(jié)一下
    我是用的Google Plugin for Eclipse ,跟用gwt的sdk編譯有點(diǎn)點(diǎn)不一樣
    1、在gwt項(xiàng)目右鍵Google > GWT Compile,就會(huì)在項(xiàng)目中的war中得到編譯后的文件
    To run the application as JavaScript in what GWT calls "production mode", compile the application by right-

    clicking the project and choosing Google > GWT Compile.
    參考:http://code.google.com/webtoolkit/usingeclipse.html#compiling
    2、將war中這些文件復(fù)制到tomcat webapp/應(yīng)用 目錄下
    看一下WEB-INF\classes是不是有相應(yīng)的class文件,要是沒(méi)有用eclipse編譯后復(fù)制過(guò)來(lái)
    3、這樣就需要gwt-user.jar了
    url中也不需要?gwt.codesvr=172.20.66.140:9997這樣的參數(shù)了
    4、打開(kāi)tomcat訪問(wèn)相應(yīng)html可能什么都出不來(lái),或者訪問(wèn)數(shù)據(jù)庫(kù)時(shí)出錯(cuò),查看gwt編譯時(shí)控制臺(tái)輸出,是不是跟web.xml中配的

    Servlet mapping是不是對(duì)應(yīng),
    比如
    Linking into D:\spring\workspace\fusionchart\war\olap.
    Link succeeded
    Compilation succeeded -- 92.640s
    我的web.xml原來(lái)是
    <servlet-mapping>
    <servlet-name>olap</servlet-name>
    <url-pattern>/com.capinfo.cdss.gwt.olap.Olap/olap</url-pattern>
    </servlet-mapping>
    要改成
    <servlet-mapping>
    <servlet-name>olap</servlet-name>
    <url-pattern>/olap/olap</url-pattern>
    </servlet-mapping>
    相應(yīng)html中原來(lái)是
    <script type="text/javascript" language="javascript" src="com.capinfo.cdss.gwt.olap.Olap/com.capinfo.cdss.gwt.olap.Olap.nocache.js"></script>
    改成
    <script type="text/javascript" language="javascript" src="olap/olap.nocache.js"></script>
    還沒(méi)鬧清楚為什么會(huì)這樣
    跟eclipse自動(dòng)編譯有關(guān)?高人告知啊
    posted @ 2010-03-03 21:43 豬 閱讀(676) | 評(píng)論 (1)編輯 收藏
    ext-gwt 設(shè)置日期格式

    DateField date = new DateField();
    date.setPropertyEditor(new DateTimePropertyEditor("yyyy-MM-dd"));
    posted @ 2010-03-03 21:43 豬 閱讀(572) | 評(píng)論 (0)編輯 收藏
    如果要去掉此提示,打開(kāi)SQL 2008 在最上面 工具-〉選項(xiàng)-〉左側(cè)有個(gè) 設(shè)計(jì)器-〉表設(shè)計(jì)器和數(shù)據(jù)庫(kù)設(shè)計(jì)器 -> 阻止保存要求重新創(chuàng)建表的更改(右側(cè)) 把鉤去即可

    參考:http://www.cnblogs.com/ajayumi/archive/2009/04/08/1431429.html
    posted @ 2010-03-03 21:42 豬 閱讀(740) | 評(píng)論 (0)編輯 收藏
    連接Sql Azure
    微軟早就公布Sql Azure可以使用了,今天切身體驗(yàn)了一下,方法看下面鏈接
    http://blogs.msdn.com/sqlcrd/archive/2009/12/28/sql-azure.aspx

    測(cè)試asp.net連接時(shí),啟動(dòng)項(xiàng)目報(bào)錯(cuò):
    Windows Azure Tools: Failed to initialize the Development Storage service. Unable to start Development Storage.

    Failed to start Development Storage: the SQL Server instance ‘localhost\SQLExpress’ could not be found.   Please configure the SQL Server instance for Development Storage using the ‘DSInit’ utility in the Windows Azure SDK.
    解決方法:
    go to the "Windows Azure SDK Command Prompt"
    執(zhí)行:
    DSInit /sqlInstance:. /forceCreate

    再次重新啟動(dòng),驚喜,報(bào)一堆這樣的錯(cuò)誤:

    命名空間“http://schemas.microsoft.com/developer/msbuild/2003”中的“PropertyGroup”。 的子元素
    命名空間“http://schemas.microsoft.com/developer/msbuild/2003”中的“ServiceHostingSDKInstallDir”。
    無(wú)效。應(yīng)為可能元素的列表: 命名空間“http://schemas.microsoft.com/developer/msbuild/2003”中的“Property”。。   

    C:\Program Files\MSBuild\Microsoft\Cloud Service\v1.0\Microsoft.CloudService.targets    9    6    雜項(xiàng)文件

    鬧了半天是因?yàn)閯偛?br /> 開(kāi)著"Windows Azure SDK Command Prompt"
    關(guān)了就OK了
    posted @ 2010-03-03 21:42 豬 閱讀(346) | 評(píng)論 (0)編輯 收藏
    今天上班發(fā)現(xiàn)訪問(wèn)公司局域網(wǎng)里的計(jì)算機(jī)共享不好使了,輸入正確的用戶名密碼,也提示不正確,差點(diǎn)就還原系統(tǒng)了,最后Google到了方法: WIN7電腦上開(kāi)始 search 輸入sec , 打開(kāi)local security policy, 找到security settings\local policies\Network Security: LAN Manager authentication level, the default vaule 是 not defined. 改為"Send NTLM response only"后即可. 參考:http://bbs.pcbeta.com/thread-511161-1-1.html
    posted @ 2010-03-03 21:41 豬 閱讀(1732) | 評(píng)論 (0)編輯 收藏
    http://www.infzm.com/content/39708 一直比較喜歡南方周末,不像一些報(bào)紙媒體報(bào)喜不報(bào)憂,想南方為追求事實(shí)真相的記者致敬!!! 另發(fā)句牢騷:對(duì)北京的除雪工作甚是不滿,要政府干啥吃的
    posted @ 2010-01-08 11:32 豬 閱讀(237) | 評(píng)論 (0)編輯 收藏
    余年已七十有余,一朝怛化,揆諸生寄 死歸之理,一切無(wú)所 縈懷,惟我瞻四方,蹙國(guó)萬(wàn)里,民窮財(cái)盡,實(shí)所痛心,生平不喜多言,往日曲突徒薪之謀,國(guó)人或不盡省記,今則本識(shí)途之驗(yàn),為將死之鳴,愿我國(guó)人靜聽(tīng)而力行 焉!則余生雖死猶生,九原瞑目矣。國(guó)雖微弱,必有復(fù)興直道,亦至簡(jiǎn)單。 勿因我見(jiàn)而輕起政爭(zhēng),勿尚空談而不顧實(shí)踐,勿興不急之務(wù)而浪用民財(cái),勿信過(guò)激言行之說(shuō)而自搖邦本。講外交者,勿忘鞏固國(guó)防;司教育者,勿忘 保存國(guó)粹;治家者,勿棄國(guó)有之禮教;求學(xué)者,勿鶩時(shí)尚之紛華。 本此八勿,以應(yīng)萬(wàn)有,所謂自力更生者在此,轉(zhuǎn)弱為強(qiáng)者亦在此矣。余生平不事生產(chǎn),后人宜體我樂(lè)道安貧之意,喪葬力崇節(jié)簡(jiǎn),殮以居士服,毋以葷腥饋祭。
    好一個(gè) 勿興不急之務(wù)而浪用民財(cái)

    引自:時(shí)寒冰 -- 騰訊博客 http://shihanbing.qzone.qq.com
    posted @ 2010-01-08 11:31 豬 閱讀(241) | 評(píng)論 (0)編輯 收藏

    java.lang.InstantiationException

    在Struts creating form bean的時(shí)候遇到這個(gè)異常

    在form bean 中加一個(gè)無(wú)參的構(gòu)造函數(shù)就Ok了

    posted @ 2009-12-29 12:19 豬 閱讀(618) | 評(píng)論 (0)編輯 收藏

    驚聞諸如趕集網(wǎng)\263這類(lèi)網(wǎng)站上的租房信息都被中介代理買(mǎi)斷了,只有他們能看到,天理何在阿
    在這發(fā)一個(gè),氣死我了

    自己的房子出租

    房屋信息:出租西三旗橋東南角常秀家園南北通透三居住房一套,面積80平米,6層的6層。三室為正規(guī)三室無(wú)隔斷,主臥朝陽(yáng)20平左右,有陽(yáng)臺(tái),2次臥朝北面積10平左右。
    房屋裝修為中裝,新刷白墻,房間整潔干凈,設(shè)施齊全。天然氣入戶,電熱水器,上網(wǎng)方便。
    房屋周邊信息:小區(qū)周邊交通設(shè)施方便,有二十幾趟公交車(chē),下樓小區(qū)門(mén)口就有運(yùn)通103、運(yùn)通109、運(yùn)通118三趟公交始發(fā)。
    離小區(qū)步行5分鐘的公交站有919、307、315、345、379、393、398、407、618、625、670、629、753、810、819、運(yùn)通117等N趟四通八達(dá)
    的公交車(chē),其中的919大站快車(chē),919區(qū)間等八達(dá)嶺高速的直達(dá)車(chē),在上班高峰時(shí)間直達(dá)三環(huán)馬甸只需不到半小時(shí)時(shí)間。919大站
    快車(chē)一站直達(dá)起家豁子(換乘10號(hào)線地鐵)3站德勝門(mén)站(換乘地鐵2號(hào)線)。小區(qū)離13號(hào)線城鐵龍澤站僅2站地公交。周邊商業(yè)圈發(fā)達(dá)并正在迅速崛起中,購(gòu)物及吃飯都很方便
    ,京客隆、超市發(fā)、肯德基、烤鴨店、老家肉餅、蘇寧電器、購(gòu)物中心、24小時(shí)藥店……環(huán)繞周邊應(yīng)有盡有。
    出租條件:房屋覓有正當(dāng)職業(yè),無(wú)不良嗜好的有為青年出租,希望生活習(xí)慣良好,收入穩(wěn)定,長(zhǎng)期出租,可整租也可單租,全天看房。中介勿擾,謝謝~
    聯(lián)系方式:13810428318 QQ 122088025

    做編程的勞苦兄弟優(yōu)惠


    這有圖
    http://beijing.koubei.com/fang/detail-rent-r38c4e1aede9546588a7150079255ec2d.html
    posted @ 2009-12-02 14:15 豬 閱讀(204) | 評(píng)論 (0)編輯 收藏

    request.getInputStream() 和 request.getReader()不能同時(shí)調(diào)用,否則會(huì)引發(fā)java.lang.IllegalStateException異常。

    API中有寫(xiě):

    getInputStream

    public ServletInputStream getInputStream()
    throws java.io.IOException
    Retrieves the body of the request as binary data using a ServletInputStream. Either this method or getReader() may be called to read the body, not both.
    Returns:
    a ServletInputStream object containing the body of the request
    Throws:
    java.lang.IllegalStateException - if the getReader() method has already been called for this request
    java.io.IOException - if an input or output exception occurred
    posted @ 2009-10-19 13:48 豬 閱讀(3066) | 評(píng)論 (0)編輯 收藏

    eclipse中如果選中一個(gè)變量,則在本源文件中高亮顯示相同的變量

    Window->Preferences,在type filter text 中輸入Mark Occurrences

    在Java-Editor-Mark Occurrences中將Mark occurrences of the selected element in the current file.選中OK即可

    posted @ 2009-10-17 20:41 豬 閱讀(1340) | 評(píng)論 (0)編輯 收藏
    下午頭兒出去了,這周一口氣粘帖復(fù)制了14個(gè)Action20個(gè)jsp,沒(méi)什么技術(shù)含量,完全是粘帖復(fù)制,我在等待什么?
    posted @ 2009-10-17 20:40 豬 閱讀(197) | 評(píng)論 (0)編輯 收藏

    工作快三年了,一直沒(méi)有用到spring,做的幾個(gè)項(xiàng)目全部基于struts+hibernate,昨天忙完手頭的活兒,自己建了個(gè)struts+spring+hibernate的demo,能用MyEclipse自動(dòng)生成的全部自動(dòng)生成,表映射、pojo、SessionFactory、applicationContext.xml、struts-config.xml都自動(dòng)生成了,弄了兩個(gè)jsp,一個(gè)add,一個(gè)view

    運(yùn)行發(fā)現(xiàn),spring未被加載,原因找來(lái)找去找不到,最后還是看了以前寫(xiě)的一篇blog,可能存在重復(fù)jar包,有沖突,確實(shí)發(fā)現(xiàn)Myeclipse自動(dòng)鍵入的jar包好多好多,而且有的有重復(fù),搗鼓出以前做的例子,復(fù)制lib里面的jar包,果然OK了,實(shí)現(xiàn)了增查。

    spring確實(shí)是個(gè)好東西,強(qiáng)大、強(qiáng)大。

    Google SSH整合的例子,發(fā)現(xiàn)都是Struts2SpringHibernate了,俺還struts1呢,out了

    posted @ 2009-10-17 20:39 豬 閱讀(310) | 評(píng)論 (0)編輯 收藏
    轉(zhuǎn)自:http://pengjiayou.com/blog/fedora-10-auto-install-scripts
    easyLife 是另一款和 autoten 類(lèi)似的軟件,是剛剛才發(fā)現(xiàn)的,不過(guò)其官方網(wǎng)站打不開(kāi),需翻墻解決,我找到了它的下載頁(yè)面,在 sf.net 上,請(qǐng)直接點(diǎn)擊這里下載最新的 easylife-1.1-1.fc10.noarch.rpm 。

    easyLife 允許你配置 Fedora 10 的各軟件,只需用鼠標(biāo)點(diǎn)擊就搞定了!它的主要特性如下:

    • 為你系統(tǒng)中的常規(guī)用戶添加 sudo 命令
    • 自動(dòng)安裝 Flash Player 插件
    • 安裝各種 Codecs (視頻、音頻解碼庫(kù)等)
    • 安裝額外字體
    • 安裝 Livna 軟件倉(cāng)庫(kù)以安裝其它額外及非免費(fèi)軟件
    • 安裝 Skype
    • 為 Firefox 安裝 Sun Java 和 Sun Java Plugin 插件
    • 用 system-switch-java 整合 Sun Java
    • 安裝 Adobe Raeder
    • 安裝其他軟件等
    用esayLife安裝來(lái)Flash Player 挺好用,真的是省了很多事,可能對(duì)我這個(gè)Linux初學(xué)者不是啥好事
    posted @ 2009-10-16 17:56 豬 閱讀(278) | 評(píng)論 (0)編輯 收藏
    google app engine對(duì)String長(zhǎng)度有限制,里面中有個(gè)com.google.appengine.api.datastore.Text類(lèi)型以替換長(zhǎng)String,但是換了com.google.appengine.api.datastore.Text后不能向數(shù)據(jù)庫(kù)保存了,就單單這個(gè)字段不能保存,看數(shù)據(jù)庫(kù)列中就沒(méi)有這個(gè)字段,google中找到 說(shuō)要在字段前加@Enumerated,但是在我這也不好使,后來(lái)又找到要加
    @Persistent(serialized="true", defaultFetchGroup="true") 
        private Text text;
    //    private String text;
    恩,這下好使了
    posted @ 2009-10-16 17:54 豬 閱讀(486) | 評(píng)論 (1)編輯 收藏
    開(kāi)發(fā)中遇到這個(gè)異常:
    NestedThrowablesStackTrace:
    Attempt was made to manually set the id component of a Key primary key. If you want to control the value of the primary key, set the name component instead.
    org.datanucleus.exceptions.NucleusUserException: Attempt was made to manually set the id component of a Key primary key. If you want to control the value of the primary key, set the name component instead.


    原來(lái)的修改代碼是這樣些的:
    public void attachDirty(UrlTarget instance) {
            PersistenceManager pm = null;
            try {
               
                pm = PMF.get().getPersistenceManager();
                UrlTarget ut = (UrlTarget) pm.getObjectById(UrlTarget.class, instance.getId());
                ut.setName(instance.getName());
                ut.setRemark(instance.getRemark());
                ut.setUrl(instance.getUrl());
               pm.makePersistent(ut);
            } catch(Exception ex){
                ex.printStackTrace();
            }finally {
                if(pm != null)pm.close();
            }
           
        }

    public UrlTarget findById(Long id) {
            PersistenceManager pm = PMF.get().getPersistenceManager();
            try{
                return (UrlTarget) pm.getObjectById(UrlTarget.class, id);
            }catch(Exception ex){
                ex.printStackTrace();
            }finally {
                pm.close();
            }
            return null;
        }
    在利用findById方法得到對(duì)象后修改,但是findById中pm已經(jīng)關(guān)閉,這就是錯(cuò)誤的原因了
    posted @ 2009-10-14 18:01 豬 閱讀(413) | 評(píng)論 (0)編輯 收藏

    來(lái)自http://net.zdnet.com.cn/network_security_zone/2008/0519/869835.shtml

    一.簡(jiǎn)介

    vi是unix世界中最通用的全屏編輯器,linux中是用的是vi的加強(qiáng)版vim,vim同vi完全兼容,vi就是"visual interface"的縮寫(xiě)。它可以執(zhí)行輸出、刪除、查找、替換、塊操作等眾多文本操作,而且用戶可以根據(jù)自己的需要對(duì)其進(jìn)行定制,這是其它編輯程序所沒(méi) 有的。

      vi不是一個(gè)排版程序,它不象Word或WPS那樣可以對(duì)字體、格式、段落等其他屬性進(jìn)行編排,它只是一個(gè)文本編輯程序。

      vi沒(méi)有菜單,只有命令,且命令繁多。只要在命令行上鍵入vi就可進(jìn)入vi的編輯環(huán)境。vi有三種狀態(tài):命令模式,文本輸入模式和末行模式。鍵入vi回車(chē)后首先進(jìn)入vi的命令模式。

    在命令模式下用戶輸入的任何字符都被Vi當(dāng)作命令加以解釋執(zhí)行,如果用戶要將輸入的字符當(dāng)作是文本內(nèi)容時(shí),則首先應(yīng)將Vi的工作模式從命令模式切換到文 本輸入模式。在命令模式下,按一下"a"("A")鍵或者”i” ("I")或者"o"("O")鍵,即進(jìn)入插入態(tài)文本輸入模式。按"a"鍵,插入到當(dāng)前光標(biāo)的后面;按"i"鍵,在當(dāng)前光標(biāo)處插入;按"A"鍵,在當(dāng)前光 標(biāo)所在行的最后插入;按"I"鍵,在當(dāng)前光標(biāo)所在行的開(kāi)頭插入。在文本輸入模式下,按Esc鍵,即回到命令模式。

    末行模式也稱(chēng)ex轉(zhuǎn)義模式。Vi有一個(gè)專(zhuān)門(mén)的“轉(zhuǎn)義”命令,可訪問(wèn)很多面向行的Ex命令。在命令模式下,用戶按“:”鍵即可進(jìn)入末行模式下,此時(shí)Vi會(huì) 在顯示窗口的最后一行(通常也是屏幕的最后一行)顯示一個(gè)“:”作為末行模式的提示符,等待用戶輸入命令。多數(shù)文件管理命令都是在此模式下執(zhí)行的(如把編 輯緩沖區(qū)的內(nèi)容寫(xiě)到文件中等)。末行命令執(zhí)行完后,Vi自動(dòng)回到命令模式。

      例如:

      :1,$s /A/a/g

      則從文件第一行至文件尾將大寫(xiě)A全部替換成小寫(xiě)a。

      若在末行模式下輸入命令過(guò)程中想轉(zhuǎn)換的到命令模式,可按鍵,或用退格鍵將輸入的命令全部刪除之后,再按一下退格鍵,即可使Vi回到命令模式下。

      如果要從命令模式轉(zhuǎn)換到編輯模式,可以鍵入命令a或者i;如果需要從文本模式返回,則按Esc鍵即可。在命令模式下輸入“:”即可切換到末行模式,然后輸入命令。

    Vi中的許多命令都要用到行號(hào)及行數(shù)等數(shù)值。若編輯的文件較大時(shí),自己去數(shù)是非常不方便的。為此Vi提供了給文本加行號(hào)的功能。這些行號(hào)顯示在屏幕的左 邊,而相應(yīng)行的內(nèi)容則顯示在行號(hào)之后。 需要說(shuō)明的是,這里加的行號(hào)只是顯示給用戶看的,它們并不是文件內(nèi)容的一部分。

      當(dāng)用Vi建立一個(gè)新文件時(shí),在進(jìn)入Vi的命令中也可以不給出文件名,當(dāng)編輯完文件需要保存數(shù)據(jù)時(shí),再由用戶指定文件名。

    進(jìn)入Vi時(shí),用戶不僅可以指定一個(gè)待編輯的文件名,而且還有許多附加操作。如果希望在進(jìn)入Vi之后,光標(biāo)處于文件中特定的某行上,可在Vi后加上任選 項(xiàng)+n,其中n為指定的行數(shù)。例如 鍵入命令:vi +3 example.txt后,光標(biāo)將位于文件example.txt中的第3行上。

      二.vi常用的命令

      1.插入(Insert)命令

      Vi提供了兩個(gè)插入命令:i 和 I命令

      (1)i命令

      插入文本從光標(biāo)所在位置前開(kāi)始,并且插入過(guò)程中可以使用鍵刪除錯(cuò)誤的輸入。此時(shí)Vi處于插入狀態(tài),屏幕最下行顯示“--INSERT--”(插入)字樣。

      例1,有一正在編輯的文件,如下所示:

      Welcome to vi world!Come on!

      ~

      ~

      光標(biāo)位于第一個(gè)“!”上,需在其前面插入:

      This is an example!

      使用i命令,并輸入相應(yīng)文本后,屏幕顯示如下:

      Welcome to vi world This is an example!!Come on!

      ~

      ~

      由此例可以看到,光標(biāo)本來(lái)是在第一個(gè)“!”處,但是由于是從光標(biāo)所在位置前開(kāi)始插入,所以這個(gè)“!”就被擠到了新插入的文本之后。

      (2)I命令

      該命令是將光標(biāo)移到當(dāng)前行的行首,然后在其前插入文本.

      2.光標(biāo)移動(dòng)操作在屏幕上移動(dòng)

    全屏幕文本編輯器中,光標(biāo)的移動(dòng)操作無(wú)疑是最經(jīng)常使用的操作了。用戶只有熟練地使用移動(dòng)光標(biāo)的這些命令,才能迅速準(zhǔn)確地到達(dá)所期望的位置處進(jìn)行編輯。

    Vi中的光標(biāo)移動(dòng)既可以在命令模式下,也可以在文本輸入模式下,但操作的方法不盡相同。

    (1)在文本輸入模式下,可直接使用鍵盤(pán)上的四個(gè)方向鍵移動(dòng)光標(biāo)。

    (2)在命令模式下,有很多移動(dòng)光標(biāo)的方法。不但可以使用四個(gè)方向鍵來(lái)移動(dòng)光標(biāo),還可以用h、j、k、l這四個(gè)鍵代替四個(gè)方向鍵來(lái)移動(dòng)光標(biāo),這樣可以避免 由于不同機(jī)器上的不同鍵盤(pán)定義所帶來(lái)的矛盾,而且使用熟練后可以手不離開(kāi)字母鍵盤(pán)位置就能完成所有操作,從而提高工作效率。

    3.在屏幕上移動(dòng)

    Vi提供了三個(gè)關(guān)于光標(biāo)在全屏幕上移動(dòng)并且文件本身不發(fā)生滾動(dòng)的命令。它們分別是H、M和L命令。

    (1)H命令

    該命令將光標(biāo)移至屏幕首行的行首(即左上角),也就是當(dāng)前屏幕的第一行,而不是整個(gè)文件的第一行。利用此命令可以快速將光標(biāo)移至屏幕頂部。若在H命令之前 加上數(shù)字n,則將光標(biāo)移至第n行的行首。值得一提的是,使用命令dH將會(huì)刪除從光標(biāo)當(dāng)前所在行至所顯示屏幕首行的全部?jī)?nèi)容。

    (2)M命令

    該命令將光標(biāo)移至屏幕顯示文件的中間行的行首。即如果當(dāng)前屏幕已經(jīng)充滿,則移動(dòng)到整個(gè)屏幕的中間行;如果并未充滿,則移動(dòng)到文本的那些行的中間行。利用此 命令可以快速地將光標(biāo)從屏幕的任意位置移至屏幕顯示文件的中間行的行首。例如,在上面屏幕顯示的情況下(不論光標(biāo)在屏幕的何處),在命令模式下,輸入命令 M之后,光標(biāo)都將移到add這一行的字母a上。同樣值得一提的是,使用命令dM將會(huì)刪除從光標(biāo)當(dāng)前所在行至屏幕顯示文件的中間行的全部?jī)?nèi)容。

    (3)L命令

    當(dāng)文件顯示內(nèi)容超過(guò)一屏?xí)r,該命令將光標(biāo)移至屏幕上的最底行的行首;當(dāng)文件顯示內(nèi)容不足一屏?xí)r,該命令將光標(biāo)移至文件的最后一行的行首。可見(jiàn),利用此命令 可以快速準(zhǔn)確地將光標(biāo)移至屏幕底部或文件的最后一行。若在L命令之前加上數(shù)字n,則將光標(biāo)移至從屏幕底部算起第n行的行首。同樣值得一提的是,使用命令 dL將會(huì)刪除從光標(biāo)當(dāng)前行至屏幕底行的全部?jī)?nèi)容。

    4.編輯命令

    讓我們看看最簡(jiǎn)單也是最常用的編輯過(guò)程:沒(méi)有人不犯錯(cuò)誤。所以遲早你會(huì)碰到修改你輸入的文本的時(shí)候。實(shí)際上花在字處理上的大多數(shù)時(shí)間是修改而不是輸入新的東西。因此,你要知道如何方便地修改就很重要。

    (1)x--刪除一個(gè)字符

    刪除文字的最簡(jiǎn)單的方式是用x。這個(gè)命令的結(jié)果是光標(biāo)所處的字符的消失,后面的文字左移動(dòng)。如果你刪除的字符是一行最后的一個(gè)字符,那么光標(biāo)將向左移動(dòng)一個(gè),這樣光標(biāo)就不會(huì)停留在不存在的字符的下面了。假如沒(méi)有任何文字了,喇叭就叫。

    (2)d--刪除對(duì)象

    這個(gè)命令的右邊還要有一定的文字對(duì)象。文字對(duì)象就是一塊文字。他右邊接的就是在控制光標(biāo)移動(dòng)的那些字符。例如 w 表示向前一個(gè)單詞,那么 dw 將刪除下一個(gè)單詞。5w 表示前進(jìn)5個(gè)單詞,那么 d5w 將刪除他們。

    (3)dd--刪除一行

    最常用的 d 系列命令之一。和前面一樣, 5dd 將刪除 5 行

    (4)D--整個(gè)刪除

    大寫(xiě)形式的 D 用來(lái)刪除從光標(biāo)到行尾。和 d$ 一樣效果。

    (5)u--恢復(fù)

    要后悔嗎?他不僅僅撤消刪除,還撤消你所有的編輯工作。

    (6).--重復(fù)

    重復(fù)編輯工作。

    5.退出Vi

    當(dāng)編輯完文件,準(zhǔn)備退出Vi返回到shell時(shí),可以使用以下幾種方法之一。

    (1)在命令模式中,連按兩次大寫(xiě)字母Z,若當(dāng)前編輯的文件曾被修改過(guò),則Vi保存該文件后退出,返回到shell;若當(dāng)前編輯的文件沒(méi)被修改過(guò),則Vi直接退出, 返回到shell。

    (2)在末行模式下,輸入命令 :w Vi保存當(dāng)前編輯文件,但并不退出,而是繼續(xù)等待用戶輸入命令。在使用w命令時(shí),可以再給編輯文件起一個(gè)新的文件名。

    例如:w newfile

    此時(shí)Vi將把當(dāng)前文件的內(nèi)容保存到指定的newfile中,而原有文件保持不變。若newfile是一個(gè)已存在的文件,則Vi在顯示窗口的狀態(tài)行給出提示信息:

    File exists (use ! to override)

    此時(shí),若用戶真的希望用文件的當(dāng)前內(nèi)容替換newfile中原有內(nèi)容,可使用命令

    :w! newfile

    否則可選擇另外的文件名來(lái)保存當(dāng)前文件。

    (3)在末行模式下,輸入命令 :q 系統(tǒng)退出Vi返回到shell。若在用此命令退出Vi時(shí),編輯文件沒(méi)有被保存,則Vi在顯示窗口的最末行顯示如下信息:

    No write since last change (use ! to overrides)

    提示用戶該文件被修改后沒(méi)有保存,然后Vi并不退出,繼續(xù)等待用戶命令。若用戶就是不想保存被修改后的文件而要強(qiáng)行退出Vi時(shí),可使用命令:q! Vi放棄所作修改而直接退到shell下。

    (4)在末行模式下,輸入命令 :wq Vi將先保存文件,然后退出Vi返回到shell。

    (5)在末行模式下,輸入命令 :x 該命令的功能同命令模式下的ZZ命令功能相同。

    來(lái)自:http://net.zdnet.com.cn/network_security_zone/2008/0519/869835.shtml

    posted @ 2009-10-14 17:54 豬 閱讀(257) | 評(píng)論 (0)編輯 收藏
    posted @ 2009-08-05 10:00 豬 閱讀(1354) | 評(píng)論 (4)編輯 收藏
    因?yàn)樽罱容^閑 有點(diǎn)不思進(jìn)取 也沒(méi)什么問(wèn)題要寫(xiě)了
    今天不錯(cuò),發(fā)現(xiàn)一個(gè),恩,感覺(jué)不錯(cuò)
    做了一個(gè)上傳Excel并解析數(shù)據(jù)然后入庫(kù)的功能,里面涉及到是否是日期格式的判斷
    之前是這么寫(xiě)的(深諳這么寫(xiě)是不好的,但以為它是可靠的)

    private boolean checkDate(String content) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                sdf.parse(content);
                return true;
            } catch (Exception e){
                return false;
            }
        }

    現(xiàn)在發(fā)現(xiàn)問(wèn)題了,對(duì)于“2008-06-23asdf”這種情況是返回true的,哈哈,看來(lái)是孤陋寡聞了,基礎(chǔ)不扎實(shí)了,看API上這樣講:

    在默認(rèn)情況下,進(jìn)行的分析是不嚴(yán)格的:如果輸入的形式不是此對(duì)象的格式化方法使用的形式,但仍可作為日期進(jìn)行分析,則分析將獲得成功。客戶機(jī)可能通過(guò)調(diào)用 setLenient(false) 來(lái)強(qiáng)調(diào)嚴(yán)格遵守該格式。


    按照API說(shuō)法,將代碼改成
    private boolean checkDate(String content) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                sdf. setLenient(false);
                sdf.parse(content);
                return true;
            } catch (Exception e){
                return false;
            }
        }

    運(yùn)行結(jié)果“2008-06-23asdf”這種情況還是返回true的,但“2008-13-23”這種情況是返回false的
    最后改進(jìn)程這種寫(xiě)法,可以適應(yīng)"yyyy-MM-dd""yyyy-M-d""yyyy-MM-d""yyyy-M-dd"

    private boolean checkDate(String content) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
            try {
                sdf.setLenient(false);
                content = content.replaceAll("-0", "-");
                Date d = sdf.parse(content);
                String s = sdf.format(d);
                return content.equals(s);
            } catch (Exception e){
                return false;
            }
        }

    參考資料http://www.99inf.net/SoftwareDev/Java/52734.htm
                  http://blog.163.com/everlee@126/blog/static/263574220089822631229/

    當(dāng)然也可以用正則表達(dá)式做到。
    posted @ 2009-07-13 17:11 豬 閱讀(2176) | 評(píng)論 (1)編輯 收藏
    昨天就發(fā)現(xiàn)這個(gè)問(wèn)題,用firefox沒(méi)問(wèn)題,我的chrome谷歌瀏覽器是3.0.182.3
    提示 yahoo郵箱無(wú)法加載
    按照提示 清楚緩存也沒(méi)有用


    Yahoo! 郵箱無(wú)法加載

    Loading Yahoo! Mail failed due to a client side error

    您可以嘗試對(duì)您的防火墻進(jìn)行設(shè)置,并且禁用“屏蔽廣告”。如果這個(gè)方法仍不湊效,請(qǐng)聯(lián)系我們的客服

    posted @ 2009-06-03 12:26 豬 閱讀(818) | 評(píng)論 (1)編輯 收藏
    建一個(gè)文本文件,命名為proxy.pac
    用文本編輯器打開(kāi) 輸入:
    function FindProxyForURL(url,host){ if(dnsDomainIs(host, ".blogspot.com")){ return "PROXY google.cn:80"; } }

    保存后,在FireFox-工具-選項(xiàng)-高級(jí)-網(wǎng)絡(luò)選項(xiàng)卡-設(shè)置-選自動(dòng)代理配置URL ,在文本框中輸入file:///C:/proxy.pac
    OK,可以訪問(wèn)blogger了。

    別的代理
    https://soproxy.appspot.com/
    http://proxy-12345.appspot.com/
    posted @ 2009-06-03 12:26 豬 閱讀(605) | 評(píng)論 (0)編輯 收藏
    posted @ 2009-06-03 12:25 豬 閱讀(512) | 評(píng)論 (0)編輯 收藏
    貌似已經(jīng)跟我沒(méi)啥關(guān)系的六一兒童節(jié),忙活了一天,簽字畫(huà)押,我勇敢的加入房奴大軍了...
    一下子從小康生活回歸到了解放前,嗚嗚~~~~(>_<)~~~~
    拿著一大堆票據(jù)、一大把鑰匙回到家倒頭便睡,累死了
    預(yù)祝房奴生活開(kāi)開(kāi)心心。
    posted @ 2009-06-03 12:25 豬 閱讀(210) | 評(píng)論 (0)編輯 收藏
    想?yún)⒖家幌聄oller的設(shè)計(jì)思路,遂又撿起roller,剛開(kāi)始是看roller4.0,磨嘰了半天時(shí)間,因?yàn)閷?duì)struts2不熟悉,轉(zhuǎn)而搞了個(gè) roller3.0,還好都運(yùn)行起來(lái)了,之中發(fā)現(xiàn)下載的源碼竟然不全,如果不引用roller的jar包的話會(huì)報(bào)錯(cuò),缺幾個(gè)package里的類(lèi),累的我 還要反編譯,不知道我是走彎路了還是怎么著,總算運(yùn)行起來(lái)了,改了log4j的配置讓日志在控制臺(tái)輸出,昨晚下班剛弄到這兒,接著搗鼓
    posted @ 2009-06-03 12:24 豬 閱讀(244) | 評(píng)論 (0)編輯 收藏
    突然想起來(lái)寫(xiě)blog也好長(zhǎng)時(shí)間了,可以追溯到3年前,一開(kāi)始是在msn space,后來(lái)搬家到baidu,那時(shí)候?qū)aidu還是很支持的,后來(lái)感覺(jué)baidu進(jìn)步有點(diǎn)慢啊,完了還出來(lái)一些緋聞
    接著就有些不安分了,到處搬家哈哈,csdn、javaeye、博客大巴、yo2、blogjava、blogger,哦天,真的不少,現(xiàn)在csdn、 javaeye、博客大巴、yo2已經(jīng)荒了,blogger這幾天還被和諧了很郁悶,就剩blogjava和baidu了,現(xiàn)在在搗鼓在GAE上弄個(gè)java寫(xiě)的blog,已經(jīng)糊弄上去了,湊合能添加文章,一有空就修改一下代碼往上面更新一下,現(xiàn)在在研究怎么靜態(tài)化和上傳圖片
    posted @ 2009-06-03 12:24 豬 閱讀(222) | 評(píng)論 (0)編輯 收藏
    好幾天了,發(fā)現(xiàn)無(wú)法打開(kāi)我的google blogger,難道被傳說(shuō)中的和諧了?!我剛剛搬家到blogger啊,還沒(méi)玩兒幾天呢
    posted @ 2009-06-03 12:23 豬 閱讀(419) | 評(píng)論 (1)編輯 收藏
    private void buttonToExcel_Click(object sender, EventArgs e)
    {

        SaveFileDialog saveFileDialog = new SaveFileDialog();
        saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
        saveFileDialog.FilterIndex = 0;
        saveFileDialog.RestoreDirectory = true;
        saveFileDialog.CreatePrompt = true;
        saveFileDialog.Title = "Export Excel File To";
        saveFileDialog.ShowDialog();
        Stream myStream;
        myStream = saveFileDialog.OpenFile();
        StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
        string str = "";
        try
        {
            //寫(xiě)標(biāo)題
            for (int i = 0; i < this.dataGridView3.ColumnCount; i++)
            {
                if (i > 0)
                {
                    str += "\t";
                }

                str += this.dataGridView3.Columns[i].HeaderText;
            }
            sw.WriteLine(str);
            //寫(xiě)內(nèi)容
            for (int j = 0; j < this.dataGridView3.Rows.Count; j++)
            {
                string tempStr = "";
                for (int k = 0; k < this.dataGridView3.Columns.Count; k++)
                {
                    if (k > 0)
                    {
                        tempStr += "\t";
                    }
                    tempStr += this.dataGridView3.Rows[j].Cells[k].Value + "";
                }
                sw.WriteLine(tempStr);
            }

            sw.Close();
            myStream.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

        finally
        {
            sw.Close();
            myStream.Close();
        }    
        MessageBox.Show("OK");
    }
    posted @ 2009-06-03 12:23 豬 閱讀(1153) | 評(píng)論 (0)編輯 收藏
    今早看到一則新聞:出處http://www.infoq.com/cn/news/2009/05/vs2010-beta1
    昨日,Soma在其博客上宣布Visual Studio 2010和.NET 4.0的Beta 1已經(jīng)可以通過(guò)MSDN訂閱下載了。
    過(guò)去的幾個(gè)月里,我們已經(jīng)初步了解了Visual Studio 2010和.NET 4.0的一系列新特性。和上次發(fā)布的CTP版本不同,這次的Beta 1是以安裝包形式發(fā)布的,而非VPC鏡像。這樣我們就可以自己下載安裝,一睹為快了,不過(guò)大家最好還是安裝到虛擬機(jī)中。
    在Visual Studio 2010的產(chǎn)品站點(diǎn)上,我們可以了解到VS 2010給我們帶來(lái)的革新:
    • 加強(qiáng)的用戶體驗(yàn):VS2010帶來(lái)了新用戶界面,讓工作更專(zhuān)注。
    • 便捷的SharePoint開(kāi)發(fā):對(duì)SharePoint開(kāi)發(fā)更完善的支持,讓SharePoint開(kāi)發(fā)不再痛苦。
    • 應(yīng)用程序生命周期管理(ALM):把項(xiàng)目角色更緊密地集成到整個(gè)應(yīng)用程序生命周期中。
    • 更佳的Web應(yīng)用開(kāi)發(fā):對(duì)JavaScript的加強(qiáng),Silverlight開(kāi)發(fā)的完整支持,更容易部署。
    • 云應(yīng)用程序開(kāi)發(fā):集成Azure開(kāi)發(fā)包,無(wú)縫進(jìn)行云應(yīng)用程序的開(kāi)發(fā)。
    • 數(shù)據(jù)庫(kù)支持:對(duì)IBM DB2和Oracle更好的支持。
    • 并行編程:從運(yùn)行時(shí)到IDE都對(duì)并行編程提供了很好的支持。
    • 更高的生產(chǎn)力:代碼上下文可幫助理解現(xiàn)存代碼,對(duì)C++開(kāi)發(fā)體驗(yàn)的提升,Windows 7的支持,Office開(kāi)發(fā)支持的加強(qiáng)。
    下面一些有用的鏈接,可讓大家獲取更多關(guān)于Visual Studio 2010和.NET 4.0的信息:PressPass:Visual Studio 2010公開(kāi) eWeek:Quest Tool for Oracle Database Developers InformationWeek:微軟詳述了Visual Studio 2010和.NET 4.0 Channel 9:Visual Studio 2010 來(lái)自Jono Wells的Twitter更新

    我開(kāi)始接觸.net是Visual Studio 2003和.net1.1,不由感嘆技術(shù)更新之快,之后微軟出了很多新名詞:WPF、WCF、Silverlight、Linq等等,真是抓瞎了,學(xué)不過(guò)來(lái),現(xiàn)在都2010了
    posted @ 2009-06-03 12:22 豬 閱讀(259) | 評(píng)論 (0)編輯 收藏
    經(jīng)常遇到javascript 缺少對(duì)象的錯(cuò)誤,無(wú)外乎調(diào)用的js方法未定義,名字寫(xiě)錯(cuò)了,之類(lèi),今兒遇到的郁悶的
    我在頁(yè)面中加了一個(gè)注釋 ,注意結(jié)束標(biāo)簽--和>之間有個(gè)空格,結(jié)果未起作用,結(jié)果可想而知,找了半天才找到
    posted @ 2009-04-23 20:39 豬 閱讀(3252) | 評(píng)論 (1)編輯 收藏
    通過(guò)簡(jiǎn)單修改,將blogger原有標(biāo)簽widget改成標(biāo)簽云形式
    修改html模板
    找到
    <b:loop values='data:labels' var='label'>
    ..........
    </b:loop>
    <b:loop>標(biāo)簽之間的內(nèi)容改成:
    <b:if cond='data:blog.url == data:label.url'>
      <span expr:dir='data:blog.languageDirection'>
        <font expr:size='data:label.count'><data:label.name/></font>
      </span>
    <b:else/>
      <a expr:dir='data:blog.languageDirection' expr:href='data:label.url'>
        <font expr:size='data:label.count'><data:label.name/></font>
      </a>
    </b:if>
    <span dir='ltr'>(<data:label.count/>)</span>
    OK啦 看看效果吧
    posted @ 2009-04-22 15:45 豬 閱讀(299) | 評(píng)論 (0)編輯 收藏
    早就注意到google blogger 首頁(yè)文章不能只顯示摘要,而是全部顯示
    google了幾個(gè)網(wǎng)頁(yè)提供的方法,官方的方式是在文章中加一個(gè)span,讓當(dāng)在首頁(yè)顯示時(shí)span隱藏,這種方式只適合以后新增文章,以前的舊文章均沒(méi)有加入這個(gè)span,就不好使
    想到blogger這么高度自定義,那么用jquery實(shí)現(xiàn)吧
    經(jīng)過(guò)一個(gè)晚上的實(shí)驗(yàn),終于出結(jié)果了

    修改html模板,在<head>下面加入
    <b:if cond='data:blog.pageType != "item"'>
       <script src='http://www.google.com/jsapi'/>
           <script type='text/javascript'>
                google.load('jquery', '1.3.2');
           </script>
           <script language='javascript' src='http://www.reindel.com/truncate/jquery.truncate.js' type='text/javascript'/>
           <script type='text/javascript'>
           $(function() {
               $("div[class='post-body entry-content']").truncate( 500, {
                   chars: /\s/,
                   trail: [ " ( <a href='#' class='truncate_show'>more</a> . . . )", " ( . . . <a href='#' class='truncate_hide'>less</a> )" ]
               });
           });
           </script>
           </b:if>

    經(jīng)測(cè)試,IE7中會(huì)提示:是否停止運(yùn)行腳本?此頁(yè)面的腳本造成Internet Explorer 運(yùn)行速度減慢,如果繼續(xù)運(yùn)行,您的計(jì)算機(jī)將可能停止響應(yīng)

    這個(gè).truncate的第一個(gè)參數(shù)設(shè)的大小也有關(guān)系,這里設(shè)了500

    在FireFox3和Google Chrome中沒(méi)有什么提示,速度還挺快,但會(huì)有顯示問(wèn)題,因?yàn)閼?yīng)用的jquery.truncate框架有瀏覽器兼容問(wèn)題

    posted @ 2009-04-22 12:49 豬 閱讀(466) | 評(píng)論 (0)編輯 收藏
        截止到今天下午,中午把自己的應(yīng)用部署到了Google app engine,用了一周的時(shí)間啊,真是費(fèi)勁周折
        好長(zhǎng)時(shí)間了,聽(tīng)說(shuō)Google出了個(gè)Google App Engine - Google Code,說(shuō)是可以讓用戶上傳自己的應(yīng)用,但是只支持python,當(dāng)時(shí)就想什么

    時(shí)候支持java啦啊,上個(gè)月看新聞就聽(tīng)說(shuō)Google app engine 要開(kāi)始支持java啦,哈哈,喜,到時(shí)候把我的寫(xiě)的blog傳上去,哈哈
        上周,終于知道了Google app engine終于開(kāi)始宣布支持java了,哈哈呼呼,動(dòng)手,到官網(wǎng)一看,沒(méi)有支持java的動(dòng)靜啊,

    對(duì),英文頁(yè)面,哈哈,看來(lái)中文的還是慢一拍啊
        首先到注冊(cè)一個(gè),竟然還要手機(jī)號(hào)發(fā)注冊(cè)碼,Google了一下 說(shuō)在手機(jī)號(hào)前加 86就OK了,填上手機(jī)號(hào)點(diǎn)按鈕,呦,短信馬

    上就來(lái)啦,搞定,注冊(cè)成功。
        這下下載SDK,還有eclipse插件,幫助文檔只有英文的,配合Google工具欄的翻譯功能,基本能看懂,哈哈,感覺(jué)一路下

    來(lái),英語(yǔ)水平有所上升啊,哈哈
        打開(kāi)eclipse,裝上插件,很輕松的建了第一個(gè)應(yīng)用,插件自動(dòng)生成了一個(gè)小實(shí)例,部署上去,驚嘆于Google的GWT
        開(kāi)始一直我原來(lái)寫(xiě)的blog程序,原來(lái)到處找免費(fèi)的空間,jsp的空間不好找,先是找了http://www.eatj.com/,但是沒(méi)24小

    時(shí)(好像是)就會(huì)自動(dòng)停止,必須手動(dòng)重啟服務(wù),原來(lái)還堅(jiān)持去上去看看,后來(lái)終于因?yàn)橛幸淮魏苊r(shí)間太長(zhǎng)被注銷(xiāo)了,接下來(lái)就聽(tīng)

    說(shuō)了http://www.stax.net/,跟Google的路子差不多,好像還更自定義些,繼續(xù)使用著,搞java朋友可以去看看
        因?yàn)間oogle app engine使用Google Account,原來(lái)的用戶管理模塊需要剔除,原來(lái)數(shù)據(jù)庫(kù)使用的是mysql hibernate,現(xiàn)在

    Google 使用JDO,數(shù)據(jù)庫(kù)被封裝了,還好,當(dāng)初設(shè)計(jì)是采用了工廠模式,實(shí)現(xiàn)了數(shù)據(jù)庫(kù)訪問(wèn)模塊與業(yè)務(wù)處理模塊的松耦合,很容易

    配置數(shù)據(jù)庫(kù)訪問(wèn)模塊的更改,感受到好的設(shè)計(jì)真是為以后修改省很多事啊。
        接著說(shuō)部署我的Google app engine,終于改好相關(guān)代碼,準(zhǔn)備上傳了,噩夢(mèng)開(kāi)始了
        1、Unable to upload:
    java.lang.IllegalStateException: cannot find javac executable based on java.home, tried “D:\Java\jdk1.6.0_13

    \jre\bin\javac.exe” and “D:\Java\bin\javac.exe”
    參考http://zhuyx808.javaeye.com/blog/370124
    http://onlypython.group.javaeye.com/group/blog/366471
    http://618119.com/archives/2009/04/12/148.html
        2、決定轉(zhuǎn)戰(zhàn)Linux..
        手上有四個(gè)版本的Linux,Ubuntu,Redhat,F(xiàn)edora,openSUSE,都裝過(guò),后來(lái)感覺(jué)還是Fedora比較好用,我裝的是

    Fedora9,F(xiàn)edora10正在下載中

    以下Linux安裝配置,僅限于在Fedora9上安裝通過(guò),資料都是通過(guò)Google搜索得來(lái),感謝各位網(wǎng)友,網(wǎng)絡(luò)的力量真是強(qiáng)大。

    1、在VMware中裝上Fedora9后,首先安裝VMware-tools,方便與主機(jī)交互

    首先需要下載相應(yīng)的kernel-devel.rpm包進(jìn)行安裝
    首先查看內(nèi)核版本:uname -r一下,我的是2.6.25-14.fc9.i686,

    所以下載kernel-devel-2.6.25-14.fc9.i686.rpm,然后運(yùn)行rpm -ivh kernel-devel-2.6.25-14.fc9.i686.rpm 進(jìn)行安裝. 內(nèi)核安

    裝完畢后,需要用這個(gè)命令確定內(nèi)核 C header 的安裝目錄:ls -d /usr/src/kernels/$(uname -r)*/include

    安裝內(nèi)核具體步驟如下:

    [root@localhost ~]# uname -r
    2.6.25-14.fc9.i686
    [root@localhost ~]# rpm -q kernel-devel
    package kernel-devel is not installed
    [root@localhost ~]# cd /home
    [root@localhost home]# wget ftp://rpmfind.net/linux/fedora/releases/9/Everything/i386/os/Packages/kernel-devel-

    2.6.25-14.fc9.i686.rpm
    [root@localhost home]# rpm -i kernel-devel-2.6.25-14.fc9.i686.rpm
    [root@localhost home]# rpm -q kernel-devel
    kernel-devel-2.6.25-14.fc9.i686

    再安裝gcc,否則安裝VMware-tools時(shí)會(huì)提示:Setup is unable to find the "gcc" program on your machine. Please make

    sure it
    is installed. Do you want to specify the location of this program by hand?
    [yes]

    What is the location of the "gcc" program on your machine?

    在命令行執(zhí)行:yum install gcc


    然后安裝VMware Tools就行了,打開(kāi)菜單“VM -> Install VMware Tools”,然后有光盤(pán)自動(dòng)彈出,把里面的源代碼拷貝出來(lái).我的文

    件是VMwareTools-6.5.0-xxxxx.tar.gz,我把它拷貝到/opt里.

    安裝 VMware TOOLS

              cd /opt

              tar -zxvf VMwareTools-6.5.0-xxxxx.tar.gz

              cd vmware-tools-distrib/

              ./vmware-install.pl

    再一路安回車(chē)OK


    2、由于在裝載xorg-x11-drv-vmmouse驅(qū)動(dòng)時(shí)的一個(gè)bug,在客戶虛擬機(jī)的顯示中,鼠標(biāo)位置可能不正確。直到被更新前,在客戶機(jī)

    中添加Option NoAutoAddDevices到/etc/X11/xorg.conf文件的ServerFlags節(jié)中。如果需要,創(chuàng)建這個(gè)節(jié):

    Section "ServerFlags"
            Option      "NoAutoAddDevices"
    EndSection


    3、第一,安裝JDK
    第一,到http://java.sun.com下載最新JDK,當(dāng)前本人下載的是jdk1.6.0_02!下載文件:jdk-6u2-linux-i586-rpm.bin.注意是

    rpm.bin的!

    第二,給下載回來(lái)的文件增加執(zhí)行權(quán)限:chmod 755 jdk-6u2-linux-i586-rpm.bin.

    第三,執(zhí)行文件:./jdk-6u2-linux-i586-rpm.bin.

    第四,執(zhí)行文件產(chǎn)生一個(gè)rpm文件,可直接雙擊執(zhí)行也可以在shell下執(zhí)行:rpm -ivh jdk-6u2-linux-i586-rpm.

    第五:配置環(huán)境變量,環(huán)境變量配置可在全局文件/etc/profile下修改,這樣所有l(wèi)inux系統(tǒng)的用戶都可以用JDK,如果只是特定的

    用戶用可修改/root/.bashrc文件,本人的修改為:

    #java set
    set JAVA_HOME=/usr/java/jdk1.6.0_02
    export JAVA_HOME
    export JRE_HOME=/usr/java/jre1.6.0_02
    set JAVA_BIN=/usr/java/jre1.6.0_02
    export JAVA_BIN

    第五,當(dāng)環(huán)境變量修改完后,重起系統(tǒng),在shell下輸入java,看是否輸入相關(guān)JAVA幫助信息,如果有,說(shuō)明已經(jīng)安裝成功!如果沒(méi)有,

    檢查一下變量環(huán)境設(shè)置是否有誤!

    2,安裝Eclipse,Eclipse不需要安裝,只要解壓縮就行了

    運(yùn)行Google app Engine不需要Tomcat
    3,安裝tomcat的方法跟安裝eclipse的一樣,也是下一個(gè)tar.gz的文件按安裝eclipse方法和步驟就行了!進(jìn)入tomcat/bin

    下./startup.sh,如果在shell出現(xiàn)jdk的相關(guān)信息說(shuō)明已經(jīng)安裝成功啟動(dòng)了,在firefox下打http://localhost:8080/出現(xiàn)tomcat頁(yè)就

    大成功了!

    在以上的安裝過(guò)程之中,出現(xiàn)了小插曲,就是tomcat找不到JDK,后來(lái)我又到JAVA網(wǎng)站下了一個(gè)JRE回來(lái)安裝,并建JRE_HOME,重起

    TOMCAT,成功了!


    4、運(yùn)行Google App Engine的應(yīng)用,提示
    ** Unable to load Mozilla for hosted mode **
    java.lang.UnsatisfiedLinkError:
    /home/dhofmann/development/ide/gwt-linux-1.4.61/mozilla-1.7.12/libxpcom.so:
    libstdc++.so.5: cannot open shared object file: No such file or directory
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    解決辦法:
    Search for stdc++5 in synaptic package manager (System->Administration->Synaptic) and then mark and install it. Or

    use this console command:
    yum install libstdc++.so.5

    停止進(jìn)程命令:
    就是kill 比較不錯(cuò),如果kill不了. 加上-9
    如#kill -9 1778
    注1778 為進(jìn)程pid
    pid可以通過(guò)ps aux|grep 服務(wù)名查得


    啟動(dòng)Eclipse時(shí),提示錯(cuò)誤:

    eclipse.buildId=M20090211-1700
    java.version=1.6.0
    java.vendor=Sun Microsystems Inc.
    BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=zh_CN
    Command-line arguments: -os linux -ws gtk -arch x86

    !ENTRY org.eclipse.ui.workbench 4 0 2009-04-18 02:12:18.085
    !MESSAGE Widget disposed too early!
    !STACK 0
    java.lang.RuntimeException: Widget disposed too early!
        at org.eclipse.ui.internal.WorkbenchPartReference$1.widgetDisposed(WorkbenchPartReference.java:171)

    在網(wǎng)上搜索得知:   
    eclipse.ini文件加個(gè)參數(shù)
    -vmargs
    -Dorg.eclipse.swt.browser.XULRunnerPath=

    在Fedora9中安裝拼音輸入法
    保證Fedora 9聯(lián)網(wǎng)的狀態(tài)下
    在application->system tools->terminal 應(yīng)用程序->系統(tǒng)工具->終端
    輸入
    su 回車(chē)
    提示輸入root密碼
    yum install scim 回車(chē)
    系統(tǒng)會(huì)自動(dòng)從一個(gè)鏡uy像站點(diǎn)檢索scim,并詢問(wèn)是否下載,選擇y
    下載完成后輸入
    yum install scim-pinyin 回車(chē)
    提示和操作如上
    然后輸入
    scim 回車(chē)
    (筆者的電腦運(yùn)行到starting SCIM后就沒(méi)有反應(yīng)了,不過(guò)沒(méi)關(guān)系這時(shí)候可以按ctrl+c中斷)
    選擇Fedora 9
    System->Preference->Personal->Input Method
    系統(tǒng)->首選項(xiàng)->個(gè)人->輸入法
    選擇啟用新特性,然后選擇里面的SCIM,然后選擇配置SCIM,
    在進(jìn)入后的界面中選擇Global Set 全局設(shè)置,在這里設(shè)置激活熱鍵即可,然后重新啟動(dòng)電腦,就可以在Fedora 9下面使用中文輸入

    法了 雖然有點(diǎn)麻煩 但畢竟fedora等眾多l(xiāng)inux桌面系統(tǒng)還很年輕,有很多不足之處。

    參考資料:
    http://www.5dlinux.com/article/6/2007/linux_9042.html
    http://zhidao.baidu.com/question/62290384.html
    http://www.linuxidc.com/Linux/2008-09/16011.htm
    posted @ 2009-04-19 00:32 豬 閱讀(6439) | 評(píng)論 (6)編輯 收藏
    JavaScript寫(xiě)的小游戲 用了jquery

    訪問(wèn)地址:http://liuspring315.googlepages.com/

    posted @ 2009-04-02 10:56 豬 閱讀(640) | 評(píng)論 (0)編輯 收藏
    備案:
    java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode


    hibernate查詢時(shí)報(bào)上面的異常,仔細(xì)檢查hql寫(xiě)的有不對(duì)的地方,我就是把逗號(hào),寫(xiě)成點(diǎn).
    posted @ 2009-03-31 13:27 豬 閱讀(463) | 評(píng)論 (0)編輯 收藏
    給你一個(gè)日期2009-01-01 00:00:00 獲取這個(gè)月的最后一天。
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date=null;
    try {
        date = sdf.parse("2009-12-01 00:00:00");
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Calendar calendar = new GregorianCalendar();
    calendar.setTime(date);
    calendar.set(Calendar.DATE, calendar
            .getActualMaximum(Calendar.DATE));
    Date d = calendar.getTime();
    System.out.println(sdf.format(d));
    posted @ 2009-03-31 13:23 豬 閱讀(630) | 評(píng)論 (0)編輯 收藏

    好久沒(méi)寫(xiě)了,過(guò)了個(gè)年,過(guò)了七天豬的日子,吃了睡睡了吃中間偶爾看看電視,為假期準(zhǔn)備了幾個(gè)電影都沒(méi)看,唉:-(忙,上了幾天班了,怎么感覺(jué)這周過(guò)的這么慢呢,剛剛剛周四
    昨兒看了一集struts2

    總結(jié)幾點(diǎn)

    1、struts.xml中的package標(biāo)簽有個(gè)abstract="true"屬性,如果為true,則這個(gè)package中不能有<action>標(biāo)簽,為true表示這個(gè)package為一個(gè)抽象package,就像java中的接口中不能有方法實(shí)現(xiàn)似的。

    2、package標(biāo)簽還有個(gè)namespace屬性,它關(guān)系到這個(gè)package中的action訪問(wèn)路徑,默認(rèn)是"",比如

    <package name= "capinfo" extends= "struts-default" namespace="/hello">
    <action name= "HelloWorld"
    class= "com.capinfo.struts2.action.HelloWordAction" >
    <result>/HelloWorld.jsp</result>
    </action>
    </package>

    則jsp中則應(yīng)為<form action="/hello/HelloWorld.action" method="post">,如果沒(méi)有找到hello/HelloWorld.action則會(huì)尋找namespace為""的,也就是HelloWorld.action,如果再?zèng)]有,就會(huì)拋出異常。

    3、在struts1中可以有多個(gè)struts-config.xml的文件,只要在web.xml配置org.apache.struts.action.ActionServlet時(shí)加到config參數(shù)中,以逗號(hào)分隔,在struts2中也可以有多個(gè)struts.xml形式的文件,這次不需要修改web.xml了,在struts.xml中添加諸如
    <include file=""/>就Ok了

    4、關(guān)于struts各種參數(shù)的配置信息位于struts2-core.jar/org.apache.struts2/default.properties中,如果要修改里面的配置,有兩種方式,一是在struts.xml中配置,例如<constant name="struts.devMode" value="true" />,二是在classess中建一個(gè)struts.properties,在里面配置比如struts.i18n.encoding=GBK,在struts2-core.jar/org.apache.struts2/default.properties中有一下這句注釋?zhuān)f(shuō)明了struts.properties將覆蓋default.properties中的配置

    ### Struts default properties
    ###(can be overridden by a struts.properties file in the root of the classpath)
    ###

    就總結(jié)這么些先。

    posted @ 2009-02-05 13:40 豬 閱讀(315) | 評(píng)論 (0)編輯 收藏

    公告

    希望有一天

    我能用鼠標(biāo)雙擊我的錢(qián)包

    然后選中一張100元

    按住“ctrl+c”

    接著不停的“ctrl+v”

    嘻嘻~~~笑醒~~~



    導(dǎo)航

    <2009年2月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    1234567

    統(tǒng)計(jì)

    常用鏈接

    留言簿(6)

    隨筆分類(lèi)(102)

    隨筆檔案(398)

    文章分類(lèi)

    文章檔案(10)

    有趣網(wǎng)絡(luò)

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 色偷偷亚洲女人天堂观看欧| 337P日本欧洲亚洲大胆精品 | 69式互添免费视频| 天天摸夜夜摸成人免费视频| 免费A级毛片无码A| 久久精品国产亚洲av日韩| 亚洲综合激情五月丁香六月| 中文在线免费视频| 中文字幕无码成人免费视频| 免费成人av电影| 国产一区二区三区亚洲综合| 亚州免费一级毛片| 亚洲女人初试黑人巨高清| xxxxx做受大片在线观看免费| 亚洲一级免费毛片| 亚洲国产模特在线播放| 国产中文字幕在线免费观看| 国产yw855.c免费视频| 亚洲日本在线播放| 大学生一级毛片免费看| 亚洲国产日韩精品| 91久久精品国产免费直播| 亚洲天堂一区二区三区| 无码永久免费AV网站| 亚洲愉拍一区二区三区| 永久免费视频v片www| 亚洲国产av美女网站| 性色av无码免费一区二区三区| 色婷婷亚洲十月十月色天| 久久午夜夜伦鲁鲁片免费无码影视 | 免费一级毛片一级毛片aa| 无遮挡免费一区二区三区| 永久在线毛片免费观看| 真正全免费视频a毛片| 亚洲一级特黄大片在线观看| 亚洲娇小性色xxxx| 在线观看免费精品国产| 亚洲一区二区三区写真| 日韩精品亚洲专区在线观看| 国产成人精品日本亚洲网址| 精品国产免费一区二区|