摘要: Javascript的調試,是開發(fā)Web應用尤其是AJAX應用很重要的一環(huán),目前對Javascript進行調試的工具很多,我比較喜歡使用的是Firebug。Firebug是Joe Hewitt開發(fā)的一套與Firefox集成在一起的功能強大的web開發(fā)工具,可以實時編輯、調試和監(jiān)測任何頁面的CSS、HTML和JavaScript。 本文主要是為初學者介紹一下Firebug的基本功能與如何使用Fir...  閱讀全文
          posted @ 2008-05-14 13:00 caihaibo 閱讀(1231) | 評論 (0)編輯 收藏
          最近嘗試用extjs來展示樹狀菜單。著實花了一番功夫。樹狀菜單的菜單項需要動態(tài)加載,而目前版本的extjs中只支持JSON格式的數據。查了一些資料,決定使用struts2的json-plugin。首先按照例子做了一個,但是結果就是不成功,界面上只出來了一個js中生成的root節(jié)點,不能加載從后臺生成的數據。研究后發(fā)現是數據格式有問題。使用json-plugin生成的數據格式如下:
          {"cls":"folder","id":10,"leaf":false,"children":[{"cls":"file","id":11,"leaf":true,"children":null,"text":"S600"},{"cls":"file","id":12,"leaf":true,"children":null,"text":"SLK200"}],"text":"Benz"}
          而extjs需要的數據格式如下:
          [{"cls":"folder","id":10,"leaf":false,"children":[{"cls":"file","id":11,"leaf":true,"children":null,"text":"S600"},{"cls":"file","id":12,"leaf":true,"children":null,"text":"SLK200"}],"text":"Benz"}]
          區(qū)別很小,就只相差最外面的兩個方括號。但是少了這兩個方括號,在json中,含義迥然不同,前者表示一個對象,而后者表示一個數組。而extjs中 tree的dataloader需要的數據必須是一個數組。而這樣的數據格式是json-plugin自動生成的,無法改變。所以,我最后放棄了json -plugin,轉而使用json-lib來解決這個問題。
          1. 下載json-lib, http://json-lib.sourceforge.net/
          2. lib目錄下的jar文件清單:
          commons-beanutils-1.7.0.jar
          commons-collections-3.2.jar
          commons-digester-1.6.jar
          commons-lang-2.3.jar
          commons-logging-1.1.jar
          dom4j-1.6.1.jar
          ezmorph-1.0.4.jar
          freemarker-2.3.8.jar
          json-lib-2.2.1-jdk15.jar
          log4j-1.2.13.jar
          ognl-2.6.11.jar
          struts2-core-2.0.11.jar
          xml-apis-1.0.b2.jar
          xwork-2.0.4.jar


          首先配置web.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
            xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation
          ="http://java.sun.com/xml/ns/j2ee
              http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
          >
            
          <welcome-file-list>
              
          <welcome-file>index.jsp</welcome-file>
            
          </welcome-file-list>
            
          <filter>
              
          <filter-name>struts2</filter-name>
              
          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
            
          </filter>

            
          <filter-mapping>
              
          <filter-name>struts2</filter-name>
              
          <url-pattern>/*</url-pattern>
            
          </filter-mapping>
          </web-app>

          然后是struts.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd"
          >
             
          <struts>
              
          <constant name="struts.devMode" value="true"/>
              
          <constant name="struts.i18n.encoding" value="UTF-8"/>
              
          <package name="person" extends="struts-default">
                  
          <action name="menus" method="execute" class="com.lab.MenuAction">
                      
          <result>/menu.jsp</result>
                  
          </action>
              
          </package>
          </struts>

          3. 樹的節(jié)點模型(省略了getter,setter)
          public class Menu {
              
          private int id;
              
          private String text;
              
          private boolean leaf;
              
          private String cls;
              
          private List<Menu> children;
          }

          4. action
          package com.lab;

          import java.util.ArrayList;
          import java.util.List;

          import net.sf.json.JSONArray;

          public class MenuAction {
              
          private String menuString;
             
              
          private List<Menu> menus;
             
              
          public String execute() {

                  menus 
          = new ArrayList<Menu>();
                 
                  Menu benz 
          = new Menu();
                  benz.setText(
          "Benz");
                  benz.setCls(
          "folder");
                  benz.setLeaf(
          false);
                  benz.setId(
          10);
                  menus.add(benz);
                 
                  List
          <Menu> benzList = new ArrayList<Menu>();
                  benz.setChildren(benzList);
                 
                  Menu menu;
                  menu 
          = new Menu();
                  menu.setText(
          "S600");
                  menu.setCls(
          "file");
                  menu.setLeaf(
          true);
                  menu.setId(
          11);
                  benzList.add(menu);
                  menu 
          = new Menu();
                  menu.setText(
          "SLK200");
                  menu.setCls(
          "file");
                  menu.setLeaf(
          true);
                  menu.setId(
          12);
                  benzList.add(menu);
                 
                  Menu bmw 
          = new Menu();
                  bmw.setText(
          "BMW");
                  bmw.setCls(
          "folder");
                  bmw.setLeaf(
          false);
                  bmw.setId(
          20);
                  menus.add(bmw);
                 
                  List
          <Menu> bmwList = new ArrayList<Menu>();
                  bmw.setChildren(bmwList);
                 
                  menu 
          = new Menu();
                  menu.setText(
          "325i");
                  menu.setCls(
          "file");
                  menu.setLeaf(
          true);
                  menu.setId(
          21);
                  bmwList.add(menu);
                 
                  menu 
          = new Menu();
                  menu.setText(
          "X5");
                  menu.setCls(
          "file");
                  menu.setLeaf(
          true);
                  menu.setId(
          22);
                  bmwList.add(menu);
                 
                  JSONArray jsonObject 
          = JSONArray.fromObject(menus);
                  
          try {
                      menuString 
          = jsonObject.toString();
                  } 
          catch (Exception e) {
                      menuString 
          = "ss";
                  }

                  
          return "success";
              }

              
          public String getMenuString() {
                  
          return menuString;
              }

              
          public void setMenuString(String menuString) {
                  
          this.menuString = menuString;
              }
          }

          5. menu.jsp
          <%@ taglib prefix="s" uri="/struts-tags" %>
          <s:property value="menuString" escape="false"/>

          6. html頁面和js
          我使用的就是extjs的example中的reorder.html和reorder.js,更改了reorder.js中treeloader的dataurl: menus.action
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
          <title>Reorder TreePanel</title>
          <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />

              
          <!-- GC -->
               
          <!-- LIBS -->
               
          <script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>
               
          <!-- ENDLIBS -->
           
              
          <script type="text/javascript" src="extjs/ext-all.js"></script>
          <script type="text/javascript" src="reorder.js"></script>

          <!-- Common Styles for the examples -->
          <link rel="stylesheet" type="text/css" href="extjs/resources/css/example.css" />
          </head>
          <body>
          <script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
          <h1>Drag and Drop ordering in a TreePanel</h1>
          <p>This example shows basic drag and drop node moving in a tree. In this implementation there are no restrictions and 
          anything can be dropped anywhere except appending to nodes marked 
          &quot;leaf&quot; (the files). <br></p>
          <p>Drag along the edge of the tree to trigger auto scrolling while performing a drag and drop.</p>
          <p>In order to demonstrate drag and drop insertion points, sorting was <b>not</b> enabled.</p>
          <p>The data for this tree is asynchronously loaded with a JSON TreeLoader.</p>
          <p>The js is not minified so it is readable. See <href="reorder.js">reorder.js</a>.</p>

          <div id="tree-div" style="overflow:auto; height:300px;width:250px;border:1px solid #c3daf9;"></div>

          </body>
          </html>



          js:
          /*
           * Ext JS Library 2.0.1
           * Copyright(c) 2006-2008, Ext JS, LLC.
           * licensing@extjs.com
           *
           * http://extjs.com/license
           
          */

          Ext.onReady(
          function(){
              
          // shorthand
              var Tree = Ext.tree;
             
              
          var tree = new Tree.TreePanel({
                  el:'tree
          -div',
                  autoScroll:
          true,
                  animate:
          true,
                  enableDD:
          true,
                  containerScroll: 
          true,
                  loader: 
          new Tree.TreeLoader({
                      dataUrl:'http:
          //localhost:8080/lab/menus.action'
                  })
              });

              
          // set the root node
              var root = new Tree.AsyncTreeNode({
                  text: 'Ext JS',
                  draggable:
          false,
                  id:'source'
              });
              tree.setRootNode(root);

              
          // render the tree
              tree.render();
              root.expand();
          });
          posted @ 2008-05-14 11:17 caihaibo 閱讀(895) | 評論 (5)編輯 收藏

          Firebug是Firefox下的一款開發(fā)類插件,現屬于Firefox的 五星級強力推薦插件之一。它集HTML查看和編輯、Javascript控制臺、網絡狀況監(jiān)視器于一體,是開發(fā)JavaScript、CSS、HTML和 Ajax的得力助手。Firebug如同一把精巧的瑞士軍刀,從各個不同的角度剖析Web頁面內部的細節(jié)層面,給Web開發(fā)者帶來很大的便利。這是一款讓 人愛不釋手的插件,如果你以前沒有接觸過它,也許在閱讀本文之后,會有一試的欲望。筆者在撰寫此文的時候,正逢Firebug發(fā)布1.0正式版,這不能不 說是種巧合。

          應用

          Firebug插件雖然功能強大,但是它已經和Firefox瀏覽器無縫地結合在一起,使用簡單直觀。如果你擔心它會占用太多的系統資源,也可以方便地啟用/關閉這個插件,甚至針對特定的站點開啟這個插件。

          在安裝好插件之后,先用Firefox瀏覽器打開需要測試的頁面,然后點擊右下方的綠色按鈕或使用快捷鍵F12喚出Firebug插件,它會將當前頁面分成上下兩個框架,如圖1所示。

          圖1:Firebug插件展開圖示
          firebug插件展開圖示
          從圖1中看到,Firebug有6個主要的Tab按鈕,下文將主要介紹介紹這幾方面的功能。

          Console HTML CSS Script Dom Net
          控制臺 Html查看器 Css查看器 腳本條時期 Dom查看器 網絡狀況監(jiān)視

          Console 控制臺

          控制臺能夠顯示當前頁面中的javascript錯誤以及警告,并提示出錯的文件和行號,方便調試,這些錯誤提示比起瀏覽器本身提供的錯誤提示更加 詳細且具有參考價值。而且在調試Ajax應用的時候也是特別有用,你能夠在控制臺里看到每一個XMLHttpRequests請求post出去的參數、 URL,http頭以及回饋的內容,原本似乎在幕后黑匣子里運作的程序被清清楚楚地展示在你面前。

          象C shell或Python shell一樣,你還能在控制臺中查看變量內容,直接運行javascript語句,就算是大段的javascript程序也能夠正確運行并拿到運行期的信息。

          控制臺還有個重要的作用就是查看腳本的log, 從前你也許習慣了使用alert來打印變量,但是Firebug給我們帶來了一個新朋友 —— console.log, 最簡單的打印日志的語法是這樣的:

          CODE:
          1. console.log("hello world")

          如果你有一堆參數需要組合在一起輸出,可以寫成這樣:

          CODE:
          1. console.log(2,4,6,8,"foo",bar).

          Firebug的日志輸出有多種可選的格式以及語法,甚至可以定制彩色輸出,比起單調的alert,顯然更加方便,限于篇幅,這里不做詳細說明,但是有志于提高debug效率的讀者,可以到Firebug的官方站點(見附錄)查看更詳細的教程。

          圖2: 在控制臺里調試javascript
          在控制臺里調試javascript

          查看和修改HTML

          第一次看到Firebug強大的HTML代碼查看器,就覺得它與眾不同,相比于Firefox自帶的HTML查看器,它的功能強大了許多。 HTML

          首先你看到的是已經經過格式化的HTML代碼,它有清晰的層次,你能夠方便地分辨出每一個標簽之間的從屬并行關系,標簽的折疊功能能夠幫助你集中精 力分析代碼。源代碼上方還標記出了DOM的層次,如圖3所示,它清楚地列出了一個hml元素的parent、child以及root元素,配合 Firebug自帶的CSS查看器使用,會給div+css頁面分析編寫帶來很大的好處。你還可以在HTML查看器中直接修改HTML源代碼,并在瀏覽器 中第一時間看到修改后的效果,光憑這一點就會讓許多頁面設計師死心塌地地成為Firebug的粉絲了。

          有時候頁面中的javascript會根據用戶的動作如鼠標的onmouseover來動態(tài)改變一些HTML元素的樣式表或背景色,HTML查看器會將頁面上改變的內容也抓下來,并以黃色高亮標記,讓網頁的暗箱操作徹底成為歷史。

          利用Inspect檢查功能,我們還可以用鼠標在頁面中直接選擇一些區(qū)塊,查看相應的HTML源代碼和CSS樣式表,真正的做到所見即所得,如果你 使用了外部編輯器修改了當前網頁,可以點擊Firebug的reload圖片重新載入網頁,它會繼續(xù)跟蹤你之前用Inspect選中的區(qū)塊,方便調試。

          圖3::HTML查看器
          HTML查看器

          CSS調試

          Firebug的CSS調試器是專為網頁設計師們量身定做的。

          如今的網頁設計言必稱div+css,如果你是用table套出來的HTML頁面,就得按這規(guī)矩重構一遍,否則顯得你不夠時髦!用div做出來的頁 面的確能精簡HTML代碼,HTML標簽減肥的結果就是CSS樣式表的編寫成了頁面制作的重頭戲。Firebug的CSS查看器不僅自下向上列出每一個 CSS樣式表的從屬繼承關系,還列出了每一個樣式在哪個樣式文件中定義。你可以在這個查看器中直接添加、修改、刪除一些CSS樣式表屬性,并在當前頁面中 直接看到修改后的結果。

          一個典型的應用就是頁面中的一個區(qū)塊位置顯得有些不太恰當,它需要挪動幾個象素。這時候用CSS調試工具可以輕易編輯它的位置——你可以根據需要隨意挪動象素。
          如圖4中正在修改一個區(qū)塊的背景色。

          提示:如果你正在學習CSS樣式表的應用,但是總記不住常用的樣式表有哪些值,可以嘗試在CSS調試器中選中一個樣式表屬性,然后用上下方向鍵來改變它的值,它會把可能的值一個個遍歷給你看。

          圖4: CSS查看器,能夠直接修改樣式表
          圖4: CSS查看器,能夠直接修改樣式表

          可視化的CSS尺標

          我們可以利用Firebug來查看頁面中某一區(qū)塊的CSS樣式表,如果進一步展開右側Layout tab的話,它會以標尺的形式將當前區(qū)塊占用的面積清楚地標識出來,精確到象素,更讓人驚訝的是,你能夠在這個可視化的界面中直接修改各象素的值,頁面上 區(qū)塊的位置就會隨改動而變化。在頁面中某些元素出現錯位或者面積超出預料值時,該功能能夠提供有效的幫助,你可以籍此分析offset、margin、 padding、size之間的關系,從而找出解決問題的辦法。

          圖5:Firebug中的CSS標尺
          圖5:Firebug中的CSS標尺

          網絡狀況監(jiān)視器

          也許有一天,你的老板或者客戶找到你,抱怨你制作的網頁速度奇慢,你該如何應對?你或許會說這可能是網絡問題,或者是電腦配置問題,或者是程序太慢,或者直說是他們的人品問題?不管怎么說,最后你可能被要求去解決這個有多種可能的問題。

          網絡狀況監(jiān)視器能幫你解決這個棘手問題。Firebug的網絡監(jiān)視器同樣是功能強大的,它能將頁面中的CSS、javascript以及網頁中引用 的圖片載入所消耗的時間以矩狀圖呈現出來,也許在這里你能一把揪出拖慢了你的網頁的元兇,進而對網頁進行調優(yōu),最后老板滿意客戶歡喜,你的飯碗也因此而牢 固。

          網絡監(jiān)視器還有一些其它細節(jié)功能,比如預覽圖片,查看每一個外部文件甚至是xmlHttpRequests請求的http頭等等。

          圖6:網絡狀況監(jiān)視器
          圖6:網絡狀況監(jiān)視器

          Javascript調試器

          這是一個很不錯的javascript腳本調試器,占用空間不大,但是單步調試、設置斷點、變量查看窗口一個不少。正所謂麻雀雖小,五臟俱全。

          如果你有一個網站已經建成,然而它的javascript有性能上的問題或者不是太完美,可以通過面板上的Profile來統計每段腳本運行的時間,查看到底是哪些語句執(zhí)行時間過長,一步步排除問題。

          圖7:javascript調試器
          圖7:javascript調試器

          DOM查看器

          DOM(Document Object Model)里頭包含了大量的Object以及函數、事件,在從前,你要想從中查到需要的內容,絕非易事,這好比你去了一個巨大的圖書館,想要找到幾本名 字不太確切的小書,眾多的選擇會讓你無所適從。而使用Firebug的DOM查看器卻能方便地瀏覽DOM的內部結構,幫助你快速定位DOM對象。雙擊一個 DOM對象,就能夠編輯它的變量或值,編輯的同時,你可能會發(fā)現它還有自動完成功能,當你輸入document.get之后,按下tab鍵就能補齊為 document.getElementById,非常方便。如果你認為補齊得不夠理想,按下shift+tab又會恢復原狀。用了Firebug的 DOM查看器,你的javascript從此找到了驅使的對象,Web開發(fā)也許就成了一件樂事。

          圖8: Dom查看器
          圖8: Dom查看器

          小結

          Firebug插件提供了一整套web開發(fā)所必需的工具。從HTML的編寫,到CSS樣式表的美化調優(yōu),以及用javascript腳本開發(fā),亦或 是Ajax應用,Firebug插件都會成為你的得力助手。所謂工欲善其事,必先利其器。在Web2.0的時代,言必稱Ajax,動輒就是用戶體驗提升, 如果把Firebug工具用好,必能讓你如虎添翼,將HTML、CSS、javascript整理得服服帖帖,從此成為web開發(fā)中的專家級人物。

          Firebug的中文含義是螢火蟲,作者是Joe Hewitt,官方網頁 http://www.getfirebug.com ,Firefox亦即火狐瀏覽器

          點擊下面的星星,參與投票評分



          平均得分3.50分(共2次打分)
          喜歡本文?歡迎訂閱且行資源,了解最新資訊 |不了解訂閱,請閱讀:如何訂閱
          posted @ 2008-05-12 16:27 caihaibo 閱讀(344) | 評論 (0)編輯 收藏
          Tomcat 6.0.10 配置指南
          作者:佚名    文章來源:不詳    點擊數:     更新時間:2007-7-8    
              今天在機子上配置了由Apache Software Foundation研發(fā)的開源產品Tomcat服務器,以用于jsp開發(fā)。
          正在裝載數據……

              首先,在運行Tomcat之前,我們要確保本機已經安裝了JDK(Java developing kit),這是運行Tomcat的首要環(huán)境。目前,sun公司已經將jdk升級為JDK 6.0,我們可以直接到下面的網址上去下載http://java.sun.com/javase/downloads/index.jsp。下載完成后按照向導完成安裝。然后如下配置環(huán)境變量:
              JAVA_HOME:  C:\Program Files\Java\jdk1.6.0(jdk的安裝路徑)
              CLASSPATH:  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
              PATH:  %JAVA_HOME%\bin;
              接下來我們就可以到下面的網址去下載Tomcat的最新版本:http://tomcat.apache.org/download-60.cgi,我下載的是Tomcat 6.0.10解壓版本。下載完成后直接解壓縮就可以用了。
              Tomcat的目錄下面有一個bin目錄,我們雙擊里面的startup.bat就可以使Tomcat運行。
              還有一個問題,如果我們注意的話,在運行Tomcat之前,窗口中會打印出如下信息:tomcat6.0The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path。如果你忽略它并不會影響你的正常使用。這是因為Tomcat 可以用 Apache Portable Runtime 來提供更強性能,提升Web靜態(tài)頁面的處理能力,不再需要專門的Web Server來處理靜態(tài)頁面了。
              但是APR的支持需要安裝三個本地組件
              APR support requires three main native components to be installed:
              1、APR library
              2、JNI wrappers for APR used by Tomcat (libtcnative)
              3、OpenSSL libraries
              我們可以點擊這里http://tomcat.heanet.ie/native下載編譯好的 tcnative-1.dll 文件,然后把它放到bin目錄中就OK了。
              相關的文檔請參見:http://tomcat.apache.org/tomcat-5.5-doc/apr.html   
          posted @ 2008-05-09 11:28 caihaibo 閱讀(290) | 評論 (0)編輯 收藏

          1) 安裝完MyEclipse后,在Eclpise的菜單欄可看到MyEclipse一項,
               下面的工具欄中可看到MyEclipse的Tomcat圖標

          2) 進行MyEclipse的配置,
                從菜單欄中進入“Windows --> Preferences”

          3) 先要進行JDK的配置,
              在左側欄中選擇“Java --> Installed JREs”,
              按“Add”按鈕進行添加

          4) 在彈出的“Add JRE”畫面中,選擇JRE的目錄,
               就是選擇你所在的JDK的目錄,
              在JRE名稱一欄中,填下想取的名稱,我這里叫“JDK”,
              然后“OK”確定

          5) 返回到設置框中,將剛剛配置的JRE選中

          6) 開始配置MyEclipse,
                左側MyEclipse節(jié)點下“Application Server”中有Tomcat,
                選擇自己安裝的版本,
                將Tomcat Server設為可用,并設置Tomcat的安裝目錄

          7) 在Tomcat的JDK中選擇剛剛配置的JDK

          8) 配置完成了,三個地方可以啟動它的服務,根據自己的喜好吧~~~ 呵呵~~~

           



          Trackback: http://tb.donews.net/TrackBack.aspx?PostId=772830

          posted @ 2008-05-08 11:44 caihaibo 閱讀(296) | 評論 (0)編輯 收藏
          iis 占用端口 80 ?
          posted @ 2008-05-04 10:39 caihaibo 閱讀(236) | 評論 (0)編輯 收藏
          相信大家都遇見過:在刪除一些軟件的時候彈出某某文件正在運行或磁盤寫保護不能刪除這樣的報錯提示吧(如圖1)。而常常刪除不掉的都一些后綴為.dll的文件。到底這個dll文件是什么文件,如何才能知道是哪些程序在調用這個dll文件呢?
           
              dll文件英文名稱為Dynamic Linking Library,以下簡稱dll,中文名字"動態(tài)鏈接程序庫"文件。在Windows中,許多應用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨立的動態(tài)鏈接庫,即dll文件,放置于系統中。當我們執(zhí)行某一個程序時,相應的dll文件就會被調用。一個應用程序可有多個dll文件,一個dll文件也可能被幾個應用程序所共用。比如,假設系統中有一dll具備了與遠端系統進行網絡聯接的功能,我們假設其名稱為Network.dll,如果有另外一個應用程序想使用該功能,則這個程序只需在執(zhí)行時與Network.dll進行動態(tài)鏈接(Dynamic Linking),就可以運用Network.dll的網絡聯接功能來實現遠端聯接系統。簡單地說,dll的特性是:
           
          1、dll本身無法自行執(zhí)行,必須靠其他程序調用。
           
          2、dll文件都具有一定的功能。
           
          3、在系統剛建立時 (如剛裝好Windows時),系統中即存在有一定數量的dll,而某些應用程序亦會將自已所需的dll添至系統中,導致dll的數量隨應用程序的增加而增加。
           
              既然知道了dll文件的概念和特性,那么怎么才能解決刪除難這個問題呢?雖然解決這個問題的方法有很多種,如用軟件unlocker來刪除。這里介紹的是手工刪除方法dll文件的方法。
           
              因為dll文件的特性注定了它可能被多個軟件調用,這也是dll文件為什么刪除不掉的原因——正在使用的文件是當然不可能給你刪除的。那么到底是哪個程序在調用這個dll文件呢?如何才能刪除這個dll文件呢?下面就手動刪除dll文件的方法。
           
          Step 1.在運行里輸入cmd進入命令提示符。
           
          step 2.然后輸入命令tasklist /m>c:\listdll.txt回車后,在C盤下會出現一個listdll.txt文本文件,這個文件里如圖2所示列出了目前運行的各個程序正在調用的dll文件。在用CTRL+F彈出查找框,輸入自己要刪除的的dll文件,查找出是哪個程序在調用這個dll文件。
          step 3.CTRL+ALT+DEL打開Windows資源管理器,結束占用需要刪除dll文件的程序或著進程,這時再去刪除這個dll文件就很輕松了。
           
          step 4.如果查出來的占用dll文件的進程是svhost.exe文件/進程,這個進程一般系統有7、8個至多,到底是哪個svhost.exe進程占用了這個dll文件呢?這是可以在命令提示符下輸入tasklist /svc,當然,你也可以把它輸出為文本文件tasklist /svc>C:\listsvc.txt。這時listsvc.txt文件里的svhost.exe會跟出如圖3所示的各個進程的PID號。這時就可以具體的根據PID號來結束進程,達到刪除dll文件的目的。
          posted @ 2008-05-04 09:37 caihaibo 閱讀(1745) | 評論 (0)編輯 收藏
          posted @ 2008-05-03 16:56 caihaibo 閱讀(182) | 評論 (0)編輯 收藏

          潘石屹的“草根哲學”

          ——讀他的新著《我用一生去尋找:潘石屹的人生哲學》

          在生活中,你遇到一個有平民氣質的平民不難,遇到一個有貴族氣質的貴族也不難,難的是能遇到有貴族氣質的平民,和有平民氣質的貴族。換句話說,見草是草,見樹是樹,這不稀奇,但你能見到一根有大樹氣質的小草,和有小草氣質的大樹么?這兒就有一個,他叫潘石屹,中國SOHO是他的外形,大樹樹冠的外形;這本書是他的氣質,小草草根的氣質。

          翻翻這本書,你能聞到一縷縷青草的香氣,看到一片片柔軟的蔥綠,聽到一陣陣輕微的窸窣,那不是綢緞和耳鬢斯磨的聲音,而是微風吹過草葉的聲音。這本書里的每行字,都像是一片片草葉;每片草葉,又都像作者絮語時輕輕卷動的舌頭。不同的是,草的話是說給風聽的,潘石屹的話是說給我們聽的:

          “當別人告訴這位智者我整天在網上寫博客,我的博客有許多人看時,他提醒我,要有仁慈的舌頭,千萬不要在人心中播下不和的種子。”

          我想,草葉的舌頭應該是仁慈的,就像美國大詩人惠特曼的舌頭一樣。但潘石屹寫的并不是《草葉集》,而是沿著草葉深入到根部,寫了一本通俗版的人生哲學,我很想將之稱為“草根哲學”。這個哲學平易得就像你每天早餐喝的那杯牛奶。

          ——要有根。這似乎是潘氏“草根哲學”的第一章。什么是人生的“根”? 潘石屹告訴我們,人生的根就是“愛”與“自信”。恨也是一種根,“仇恨入心要發(fā)芽”,那還不生根?但從恨的根上會開出惡之花,“以惡對惡,增值的還是惡”,被惡霸占的人生,就像是被毒蛇纏身的兔子,能有什么指望?所以潘石屹說:“我永遠相信愛的力量,而相信就是力量。”而有愛的人就有自信,自信的人才會誠實,誠實的人才能成功。所以,在潘石屹看來,愛是人生的第一只桶,自信是人生的第一桶金:

          “經常有人問我第一桶金怎么來的,從哪里得到的,有多少。其實每次別人問我這個問題時,我都想說,人的第一桶金是自信。即使你沒錢也不要怕,自信就是你的資本。”

          我可以為他這段話背書,他當年被海南萬通派到北京開發(fā)新項目,只帶了幾萬塊錢,但肯定在行李箱里放了很多自信進京。如果我沒有記錯,他最早住的是南兵馬司招待所,那地方我也住過,干凈,但很簡陋。幾年后,阜成門的萬通廣場落成,它當時是萬通系最大也是唯一一家發(fā)行法人股的地產項目。

          ——要平凡。平凡,低調,簡單……這些詞都可以用來定性被你看到,或被你踩在腳底下的小草。不過,當你走進一片豐美的草地時,你就忍不住想躺下來,讀幾頁書,或者無所事事地曬曬太陽,這是說,平凡的東西讓人親近。潘石屹所推崇的平凡,包括必要的“遲鈍”,甚至“緩慢”,特別是“簡單”:

          “從歷史的角度來看,一個民族向上的時候,它總是簡單和大氣為重要的風格;凡是這個民族衰敗之時,從建筑、家居、服裝、裝飾到語言表現出來的都是繁雜和多余。能把簡單作為自己的世界觀,成為自己做事情的指導思想,是走向成功的一個要素。你會在簡單中獲得成功。”

          潘石屹特別看重談話和人際交往中的“平凡”。最平凡最受人歡迎的交談者是“傾聽者”:“大多數情況下,當一個好的聽眾,欣賞別人的表現,就是建立人際關系的第一個好辦法。”最糟糕的想法,就是“今天要用語言征服那個人。”結果是針鋒相對,面紅耳赤。“你看有些人,瞪著眼睛看你說話,你以為他聽進去了,他沒有,他在找你說話的間歇來插言,來搶話。他是一個全神貫注尋找發(fā)言機會的人,就像一個蹲在路邊虎視眈眈準備攔路搶劫的強盜一樣。”讀到這兒,對照一下我自己,只能嘆口氣,看來,世界上最不平凡的事,就是甘于平凡呵。

          ——要合群。在潘石屹看來,生命是一個共同體,就像草一樣,一根草活不了,草連成片,才成氣候。但他這樣說,并不是要搞生命共產主義,他不反對“個性”,也不反對“自我”,他反對的是過分的“自我”。他把“自我”比作鹽,沒有它,沒有人生的美味,多了,就破壞了美味。既要自我,又要群體,怎么辦?磋商。自我通過磋商達成與別的自我的合作,所以他認為,“人人參與的磋商才具有普世價值”。杜甫有詩云:“繁枝容易紛紛落,嫩蕊商量細細開”。獨樹一幟的繁枝容易凋落,細細磋商的小草和嫩蕊慢慢茂盛。

          ——要無為。世界最無為的生命大概就是草了。它不追求什么,也不拒絕什么,不逃避什么,也不挽留什么。起伏隨風吹,榮枯順歲時。作為企業(yè)領導人,潘石屹認為,公司做得越大,越要無為而治理。無為而治,其實是順勢而為,“我們好像水上的小舟,依托流水的力量前行。我們要尊重它,感應到它,順應它。如果你以為你有一點權力,可以無所顧忌,搞亂生活,是一定會受到懲罰的。”禹作敏、牟其中等人如果能早一點悟出這個道理,下場肯定要好得多。

          關于潘石屹這本書,當然還有許多話可說,比如要頑強,要敬畏之類,不過,如果一定要我對它提出一點批評意見,我最想說的是,潘石屹的哲學是一個有明確人生目標的人的哲學,不是一個活在當下的人的哲學,后一種人欣賞的不是地上的小草,而是空中的微風和天上的白云。

          2008417
          ——原載
          2008-4-28《經濟觀察報》第48版“商業(yè)評論”(提前出版)

          posted @ 2008-04-29 17:36 caihaibo 閱讀(113) | 評論 (0)編輯 收藏

          MyEclipse+struts+Hibernate配置開發(fā)

          2005-12-18 10:31 作者: CoderGuo 出處: sina博客 責任編輯:方舟

          說明:

            這個手冊只是為初學者制作的環(huán)境配置和快速開發(fā)的一些基本方法,為的是廣大愛好者能快速上手,少走我走過的彎路,里面沒有任何關于java模式和其他相關的說明。本人水平有限,也沒有能力去討論關于模式設計和開發(fā)細節(jié)的一些內容。

           

           

            建議:

            如果你還不清楚struts和hibernate的一些基本原理,希望能先去了解一下這方面的相關內容。

            推薦:

            Hibernate中文手冊》作者認為要學Hibernate看這個就足夠了,里面幾乎包括了所有的細節(jié),不過可能不太適合快速入門。

            地址:http://www.hibernate.org/hib_docs/v3/reference/zh- cn/html_single/

            關于struts的資料就很多了,這里推薦一個可以下載一些入門教程的網站。

            地址:http://www.wnetw.com/jclub/index.jsp

            強烈建議入門的朋友先了解一下基本的原理!否則本文可能對你沒有任何幫助。

            相關工具下載:(注意版本)

            mysql5.0 http://www.mysql.org
            eclipse 3.1.1 http://www.eclipse.org
            myeclipse4.0.3 http://www.myeclipseide.com
            tomcat5.5

            安裝:

            關于tomcat和mysql的安裝就不多說了,需要注意的是最好保證你的 jdk是1.5的版本,并配置好你的環(huán)境變量,不然可能會遇到一些問題。

            把eclipse解開,再去安裝剛下載的myeclipse,在安裝的時候需要把路徑指定到剛才解開的eclipse上,由于myeclipse是個收費軟件,所以需要注冊。不過一般按照Chinese的習慣,去google一個注冊碼就可以了:}

            開發(fā)環(huán)境部署:

            好了,現在保證你的mysql和tomcat服務能夠正常啟動,myeclipse能夠正常打開(如果不能,可以去找一下相關的說明或者給作者留言)。下面我們就要開始真正的開始部署一個傳說中的tomcat+struts+hibernate+mysql結構的工程了!(faint!前言就寫的我好累)

            首先,在myeclipse里新建一個工程。在左邊的Package Exporler面版里點右鍵選擇new->project…

            在跳出菜單里選擇MyEclipse->J2EE Projects->Web Project。

            點擊next后進入如下畫面:


            工程名為:test

            結束后點擊Finish。

            好了,如果成功的話你就會在 Package Exporler里看到一個新的test工程!現在我們先配置一下數據庫方面的東西。首先在你的mysql 里建立一個數據庫webases,再在里面新建一個表admin,里面三個字段分別為id,name,password其中id為自動取值的主鍵(mysql具體的操作可以自己找資料,不是本文涉及范圍)。

            再回到myeclipse ,選中window->Open Perspective->Other…

            可以看到現在跳出一個名為Select Perspective的菜單,在里面選中MyEclipse Databases Exporler,可以看到現在到了下面的頁面。

            按以上圖示輸入相關字段后點擊Finish便建立了一個數據庫連接,在新出現的JDBC for Mysql上點右鍵,選擇Open connection…,確認用戶名和密碼正確后點OK,如果一切順利的話你會看到下面的畫面:

            這說明你已經和數據庫建立了正確的連接。現在我們再回到window->Open Perspective- >Other…里的MyEclipse,也就是我們剛進來的時候看到的畫面。

            右鍵點擊你剛建立的工程 test并選擇MyEclipse->Add struts Capabilities…在跳出的菜單里按照如下輸入并確定:

            好了,現在你已經為你的工程增加了struts,接下來和上面一樣在右鍵工程后選擇MyEclipse- >Add Hibernate Capabilities…一路確定下來為你的工程添加Hibernate。(為方便起見我們在選擇路徑時把HibernateSessionFactory.java放在了src/com下面,其實最好建立個單獨的目錄如 src/com/hibernate)

            為了更好的演示我們不建立通常的登陸頁面而是建立個注冊頁面。選擇 src目錄下的hibernate.cfg.xml文件。照如下填寫并保存。這樣hibernate就為你建立了數據庫的連接池。

            下面我們再選擇WebRoot/WEB-INF/struts-config.xml文件,在畫面中點擊右鍵選擇new- >Form, Action and JSP。如下填寫

            再選擇JSP選項,如下

            最后選擇Finish。

            再新建一個一個success.jsp的頁面,

            在剛才struts- config.xml文件里右鍵選擇addAdmin選擇Properties,在菜單里選擇Forwords,再點add,如下圖填寫

            最后你的struts-config.xml就是下面這個樣子:


            下面我們轉到hibernate。換到剛才我們建立數據庫的頁面,選擇你的admin的表點右鍵選擇Create Hibernate Mapping。選擇好打包路徑后選擇Finish。如圖:

            在你剛才選擇的路徑下(我為方便是src/com/yourcompanyname/)下新建立的文件 AdminDAOFactory.java文件并輸入以下內容:

          package com.yourcompanyname;

          import java.util.Iterator;

          import org.hibernate.HibernateException;
          import org.hibernate.Query;
          import org.hibernate.Session;
          import org.hibernate.Transaction;

          import com.hibernate.SessionFactory;

          public class AdminDAOFactory {
           Session session;
           Transaction tx;
           public void add(Admin admin) throws HibernateException {
            /**
             * Creation Date: 11-17-2005
             * TODO Add a new admin user.
             * @param An object of Admin
             * @return void
             * @author Coder Guo
             */
            try {
             session = SessionFactory.currentSession();
             tx = session.beginTransaction();
             //Add a new admin
             session.save(admin);
             tx.commit ();
            }catch(HibernateException e){
             throw e;
            }finally{
             if (tx!=null) {
              tx.rollback();
             }
             SessionFactory.closeSession();
            }
           }
          }

           再打開com.yourcompany.struts.action下的AddAdminAction.java添加(其中如果有錯誤選中好按ctrl+shift+o自動添加包)

          public class AddAdminAction extends Action {

           // --------------------------------------------------------- Instance Variables

           // --------------------------------------------------------- Methods

           /**
            * Method execute
            * @param mapping
            * @param form
            * @param request
            * @param response
            * @return ActionForward
            * @author Coder Guo
            */
           public ActionForward execute(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) {
            AddAdminForm addAdminForm = (AddAdminForm) form;
            
            // TODO Add a new admin
            Admin admin = new Admin();
            admin.setName(addAdminForm.getName ());
            admin.setPassword(addAdminForm.getPassword ());
            AdminDAOFactory adminDAO = new AdminDAOFactory ();
            adminDAO.add(admin);
            
            return mapping.findForward("success");
           }

          }

           再打開com.yourcompanyname.struts.form下的AddAdminForm.java,修改(如果有錯誤按照上面說的方法導入包)
           public ActionErrors validate(
            ActionMapping mapping,
            HttpServletRequest request) {

            // TODO Auto-generated method stub
            ActionErrors errors = new ActionErrors();
            
            Session session = SessionFactory.currentSession();
            Transaction tx = session.beginTransaction ();
            Query query = session.createQuery("select admin from Admin as admin where admin.name = '" + this.name + "'");
            Iterator it = query.iterate ();
            if (it.hasNext()){
             errors.add ("addAdmin.err.name",new ActionMessage("form.addAdmin.err.name"));
            }
            tx.commit();
            SessionFactory.closeSession ();
            return errors;
           }

           public void reset(ActionMapping mapping, HttpServletRequest request) {

            // TODO Auto-generated method stub
            this.name=null;
            this.password=null;
           }

            再打開com\yourcompanyname\struts下的ApplicationResource.properties在這里面添加錯誤信息:

          Form.addAdmin.err.name=err

            最后,(汗,好累啊-_-!)打開addAdmin.jsp修改成如下:

          <%@ page contentType="text/html; charset=utf-8"%>
          <%@ page language="java"%>
          <%@ taglib uri=" <%@ taglib uri="

          <script language = "javascript">
          <!--
          function check(){
           if (loginForm.userName.value == "" || loginForm.password.value == ""){
            alert("請輸入完整的信息!");
            loginForm.userName.focus();
            return false;
           }
          }
          //-->
          </script>
           
           <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html:html>
            <head>
              <html:base />
             
              <title>login.jsp</title>
              <link href="css/webcss.css" rel="stylesheet" type="text/css">
             
              <meta http-equiv="pragma" content="no- cache">
              <meta http-equiv="cache-control" content="no- cache">
              <meta http-equiv="expires" content="0">   
              <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
              <meta http- equiv="description" content="This is my page">
            </head>
           

            <body>
            <center>
             <p>&nbsp;</p>
             <p>&nbsp;</p>
             <table width="300" border="0" cellpadding="0" cellspacing="0">
             <html:form action="/addAdmin" focus="name" method="GET">
               <tr align="center" valign="middle">
                 <td colspan="2" class="typt_normal">新增管理員</td>
               </tr>
               <tr>
                 <td width="100" align="center" valign="middle" class="typt_normal">名稱: </td>
                 <td width="200" align="left"><html:text property="name" styleClass="text_s"/><html:errors property="addAdmin.err.name"/></td>
               </tr>
               <tr>
                 <td width="100" align="center" valign="middle" class="typt_normal">密碼: </td>
                 <td width="200" align="left"><html:password property="password" styleClass="text_s"/></td>
               </tr>
               <tr> 
                 <td colspan="2" align="center" valign="middle"><html:submit value="提交" onclick="return check ();"/><html:reset value="重置"></html:reset></td>
                 </tr>
           </html:form>
             </table>
           </center>
           </body>

          </html:html>

            其中可以看到如何在struts的標簽中使用javascript的方法。

            配置好myeclipse于tomcat的連接。在window->Preferences做如下設定:

            在項目文件點右鍵->“myeclipse”->“Add and remove project deployment”,如下圖:

            好了,我們的配置工作基本結束了,在myeclipse上開啟tomcat服務

            現在打開瀏覽器,輸入

            http://127.0.0.1:8080/test/addAdmin.jsp就可以看到你的jsp頁面了!

           

          posted @ 2008-04-28 23:17 caihaibo 閱讀(171) | 評論 (0)編輯 收藏
          僅列出標題
          共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
          主站蜘蛛池模板: 三亚市| 枣庄市| 朝阳区| 舞阳县| 南皮县| 河东区| 嘉峪关市| 沈阳市| 涪陵区| 泰州市| 五指山市| 衡水市| 高淳县| 平定县| 巴林右旗| 江陵县| 周宁县| 长子县| 乐至县| 永安市| 策勒县| 札达县| 诸暨市| 丹凤县| 宝应县| 娄烦县| 慈利县| 贺兰县| 额济纳旗| 信宜市| 井陉县| 平顶山市| 顺平县| 日照市| 灵台县| 南投市| 梅河口市| 崇阳县| 固始县| 始兴县| 昭觉县|