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

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

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

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

    #

    結構

    javac [ options ] [ sourcefiles ] [ @files ]
    

    參數可按任意次序排列。

    options
    命令行選項。
    sourcefiles
    一個或多個要編譯的源文件(例如 MyClass.java)。
    @files
    一個或多個對源文件進行列表的文件。

    說明

    javac

    有兩種方法可將源代碼文件名傳遞給 javac:

    • 如果源文件數量少,在命令行上列出文件名即可。
    • 如果源文件數量多,則將源文件名列在一個文件中,名稱間用空格或回車行來進行分隔。然后在 javac 命令行中使用該列表文件名,文件名前冠以 @ 字符。

    源代碼文件名稱必須含有 .java 后綴,類文件名稱必須含有 .class 后綴,源文件和類文件都必須有識別該類的根名。例如,名為 MyClass 的類將寫在名為 MyClass.java的源文件中,并被編譯為字節碼類文件 MyClass.class

    內部類定義產生附加的類文件。這些類文件的名稱將內部類和外部類的名稱結合在一起,例如MyClass$MyInnerClass.class

    應當將源文件安排在反映其包樹結構的目錄樹中。例如,如果將所有的源文件放在 /workspace 中,那么 com.mysoft.mypack.MyClass 的代碼應該在 \workspace\com\mysoft\mypack\MyClass.java 中。

    缺省情況下,編譯器將每個類文件與其源文件放在同一目錄中。可用 -d 選項(請參閱后面的選項)指定其它目標目錄。

    工具讀取用 Java 編程語言編寫的類和接口定義,并將它們編譯成字節碼類文件。

    查找類型

    當編譯源文件時,編譯器常常需要它還沒有識別出的類型的有關信息。對于源文件中使用、擴展或實現的每個類或接口,編譯器都需要其類型信息。這包括在源文件中沒有明確提及、但通過繼承提供信息的類和接口。

    例如,當擴展 java.applet.Applet 時還要用到 Applet 的祖先類:java.awt.Panel 、java.awt.Container、 java.awt.Component 和 java.awt.Object

    當編譯器需要類型信息時,它將查找定義類型的源文件或類文件。編譯器先在自舉類及擴展類中查找,然后在用戶類路徑中查找。用戶類路徑通過兩種途徑來定義:通過設置 CLASSPATH 環境變量或使用 -classpath 命令行選項。(有關詳細資料,請參閱設置類路徑)。如果使用 -sourcepath 選項,則編譯器在 sourcepath 指定的路徑中查找源文件;否則,編譯器將在用戶類路徑中查找類文件和源文件。可用-bootclasspath 和 -extdirs 選項來指定不同的自舉類或擴展類;參閱下面的聯編選項。

    成功的類型搜索可能生成類文件、源文件或兩者兼有。以下是 javac 對各種情形所進行的處理:

    • 搜索結果只生成類文件而沒有源文件: javac 使用類文件。
    • 搜索結果只生成源文件而沒有類文件: javac 編譯源文件并使用由此生成的類文件。
    • 搜索結果既生成源文件又生成類文件: 確定類文件是否過時。若類文件已過時,則 javac重新編譯源文件并使用更新后的類文件。否則, javac 直接使用類文件。

      缺省情況下,只要類文件比源文件舊, javac 就認為它已過時。( -Xdepend 選項指定相對來說較慢但卻比較可靠的過程。)

      javac

    注意: javac 可以隱式編譯一些沒有在命令行中提及的源文件。用 -verbose 選項可跟蹤自動編譯。

    文件列表

    為縮短或簡化 javac 命令,可以指定一個或多個每行含有一個文件名的文件。在命令行中,采用 '@' 字符加上文件名的方法將它指定為文件列表。當 javac 遇到以 `@' 字符開頭的參數時,它對那個文件中所含文件名的操作跟對命令行中文件名的操作是一樣的。這使得 Windows 命令行長度不再受限制。

    例如,可以在名為 sourcefiles 的文件中列出所有源文件的名稱。該文件可能形如:

         MyClass1.java
    MyClass2.java
    MyClass3.java
    

    然后可用下列命令運行編譯器:

         C:> javac @sourcefiles
    

    選項

    編譯器有一批標準選項,目前的開發環境支持這些標準選項,將來的版本也將支持它。還有一批附加的非標準選項是目前的虛擬機實現所特有的,將來可能要有變化。非標準選項以 -X 打頭。

    標準選項

    -classpath 類路徑
    設置用戶類路徑,它將覆蓋 CLASSPATH 環境變量中的用戶類路徑。若既未指定CLASSPATH 又未指定 -classpath,則用戶類路徑由當前目錄構成。有關詳細信息,請參閱設置類路徑。

    若未指定 -sourcepath 選項,則將在用戶類路徑中查找類文件和源文件。

    -d 目錄
    設置類文件的目標目錄。如果某個類是一個包的組成部分,則 javac 將把該類文件放入反映包名的子目錄中,必要時創建目錄。例如,如果指定 -d c:\myclasses 并且該類名叫com.mypackage.MyClass,那么類文件就叫作c:\myclasses\com\mypackage\MyClass.class

    若未指定 -d 選項,則 javac 將把類文件放到與源文件相同的目錄中。

    注意: -d 選項指定的目錄不會被自動添加到用戶類路徑中。

    -deprecation
    顯示每種不鼓勵使用的成員或類的使用或覆蓋的說明。沒有給出 -deprecation 選項的話, javac 將顯示這類源文件的名稱:這些源文件使用或覆蓋不鼓勵使用的成員或類。
    -encoding
    設置源文件編碼名稱,例如 EUCJIS/SJIS。若未指定 -encoding 選項,則使用平臺缺省的轉換器。
    -g
    生成所有的調試信息,包括局部變量。缺省情況下,只生成行號和源文件信息。
    -g:none
    不生成任何調試信息。
    -g:{關鍵字列表}
    只生成某些類型的調試信息,這些類型由逗號分隔的關鍵字列表所指定。有效的關鍵字有:
    source
    源文件調試信息
    lines
    行號調試信息
    vars
    局部變量調試信息
    -nowarn
    禁用警告信息。
    -O
    優化代碼以縮短執行時間。使用 -O 選項可能使編譯速度下降、生成更大的類文件并使程序難以調試。

    在 JDK 1.2 以前的版本中,javac 的 -g 選項和 -O 選項不能一起使用。在 JDK 1.2 中,可以將 -g 和 -O 選項結合起來,但可能會得到意想不到的結果,如丟失變量或重新定位代碼或丟失代碼。-O 選項不再自動打開 -depend 或關閉 -g 選項。同樣, -O 選項也不再允許進行跨類內嵌。

    -sourcepath 源路徑
    指定用以查找類或接口定義的源代碼路徑。與用戶類路徑一樣,源路徑項用分號 (;) 進行分隔,它們可以是目錄、JAR 歸檔文件或 ZIP 歸檔文件。如果使用包,那么目錄或歸檔文件中的本地路徑名必須反映包名。

    注意:通過類路徑查找的類,如果找到了其源文件,則可能會自動被重新編譯。

    -verbose
    冗長輸出。它包括了每個所加載的類和每個所編譯的源文件的有關信息。

    聯編選項

    缺省情況下,類是根據與 javac 一起發行的 JDK 自舉類和擴展類來編譯。但 javac 也支持聯編,在聯編中,類是根據其它 Java平臺實現的自舉類和擴展類來進行編譯的。聯編時, -bootclasspath 和 -extdirs 的使用很重要;請參閱下面的聯編程序示例。

    -target 版本
    生成將在指定版本的虛擬機上運行的類文件。缺省情況下生成與 1.1 和 1.2 版本的虛擬機都兼容的類文件。JDK 1.2 中的 javac 所支持的版本有:
    1.1
    保證所產生的類文件與 1.1 和 1.2 版的虛擬機兼容。這是缺省狀態。
    1.2
    生成的類文件可在 1.2 版的虛擬機上運行,但不能在 1.1 版的虛擬機上運行。
    -bootclasspath 自舉類路徑
    根據指定的自舉類集進行聯編。和用戶類路徑一樣,自舉類路徑項用分號 (;) 進行分隔,它們可以是目錄、JAR 歸檔文件或 ZIP 歸檔文件。
    -extdirs 目錄
    根據指定的擴展目錄進行聯編。目錄是以分號分隔的目錄列表。在指定目錄的每個 JAR 歸檔文件中查找類文件。

    非標準選項

    -X
    顯示非標準選項的有關信息并退出。
    -Xdepend
    遞歸地搜索所有可獲得的類,以尋找要重編譯的最新源文件。該選項將更可靠地查找需要編譯的類,但會使編譯進程的速度大為減慢。
    -Xstdout
    將編譯器信息送到System.out 中。缺省情況下,編譯器信息送到 System.err 中。
    -Xverbosepath
    說明如何搜索路徑和標準擴展以查找源文件和類文件。
    -J選項
    選項傳給 javac 調用的 java 啟動器。例如, -J-Xms48m 將啟動內存設為 48 兆字節。雖然它不以 -X 開頭,但它并不是 javac 的‘標準選項’。用 -J 將選項傳給執行用 Java 編寫的應用程序的虛擬機是一種公共約定。

    注意: CLASSPATH 、 -classpath 、 -bootclasspath 和 -extdirs 并  指定用于運行 javac 的類。如此濫用編譯器的實現通常沒有任何意義而且總是很危險的。如果確實需要這樣做,可用 -J 選項將選項傳給基本的 java 啟動器。

    程序示例

    編譯簡單程序

    一個源文件 Hello.java ,它定義了一個名叫 greetings.Hello 的類。greetings 目錄是源文件和類文件兩者的包目錄,且它不是當前目錄。這讓我們可以使用缺省的用戶類路徑。它也使我們沒必要用 -d 選項指定單獨的目標目錄。

    C:> dir
    greetings/
    C:> dir greetings
    Hello.java
    C:> cat greetings\Hello.java
    package greetings;
    public class Hello {
    public static void main(String[] args) {
    for (int i=0; i < args.length; i++) {
    System.out.println("Hello " + args[i]);
    }
    }
    }
    C:> javac greetings\Hello.java
    C:> dir greetings
    Hello.class   Hello.java
    C:> java greetings.Hello World Universe Everyone
    Hello World
    Hello Universe
    Hello Everyone
    

    編譯多個源文件

    該示例編譯 greetings 包中的所有源文件。

    C:> dir
    greetings\
    C:> dir greetings
    Aloha.java         GutenTag.java      Hello.java         Hi.java
    C:> javac greetings\*.java
    C:> dir greetings
    Aloha.class         GutenTag.class      Hello.class         Hi.class
    Aloha.java          GutenTag.java       Hello.java          Hi.java
    

    指定用戶類路徑

    對前面示例中的某個源文件進行更改后,重新編譯它:

    C:> cd
    \examples
    C:> javac greetings\Hi.java
    

    由于 greetings.Hi 引用了 greetings 包中其它的類,編譯器需要找到這些其它的類。上面的示例能運行是因為缺省的用戶類路徑剛好是含有包目錄的目錄。但是,假設我們想重新編譯該文件并且不關心我們在哪個目錄中的話, 我們需要將 \examples 添加到用戶類路徑中。可以通過設置CLASSPATH 達到此目的,但這里我們將使用 -classpath 選項來完成。

    C:>javac -classpath \examples \examples\greetings\Hi.java
    

    如果再次將 greetings.Hi 改為使用標題實用程序,該實用程序也需要通過用戶類路徑來進行訪問:

    C:>javac -classpath \examples:\lib\Banners.jar \
    \examples\greetings\Hi.java
    

    要執行 greetings 中的類,需要訪問 greetings 和它所使用的類。

    C:>java -classpath \examples:\lib\Banners.jar greetings.Hi
    

    將源文件和類文件分開

    將源文件和類文件置于不同的目錄下經常是很有意義的,特別是在大型的項目中。我們用 -d 選項來指明單獨的類文件目標位置。由于源文件不在用戶類路徑中,所以用 -sourcepath 選項來協助編譯器查找它們。

    C:> dir
    classes\  lib\      src\
    C:> dir src
    farewells\
    C:> dir src\farewells
    Base.java      GoodBye.java
    C:> dir lib
    Banners.jar
    C:> dir classes
    C:> javac -sourcepath src -classpath classes:lib\Banners.jar \
    src\farewells\GoodBye.java -d classes
    C:> dir classes
    farewells\
    C:> dir classes\farewells
    Base.class      GoodBye.class
    

    注意:編譯器也編譯了 src\farewells\Base.java,雖然我們沒有在命令行中指定它。要跟蹤自動編譯,可使用 -verbose 選項。

    聯編程序示例

    這里我們用 JDK 1.2 的 javac 來編譯將在 1.1 版的虛擬機上運行的代碼。

    C:> javac -target 1.1 -bootclasspath jdk1.1.7\lib\classes.zip \
    -extdirs "" OldCode.java
    

    -target 1.1

    JDK 1.2 javac 在缺省狀態下也將根據 1.2 版的自舉類來進行編譯,因此我們需要告訴javac 讓它根據 JDK 1.1 自舉類來進行編譯。可用 -bootclasspath 和 -extdirs 選項來達到此目的。不這樣做的話,可能會使編譯器根據 1.2 版的 API 來進行編譯。由于 1.1 版的虛擬機上可能沒有該 1.2 版的 API,因此運行時將出錯。

    選項可確保生成的類文件與 1.1 版的虛擬機兼容。在 JDK1.2 中, 缺省情況下 javac 編譯生成的文件是與 1.1 版的虛擬機兼容的,因此并非嚴格地需要該選項。然而,由于別的編譯器可能采用其它的缺省設置,所以提供這一選項將不失為是個好習慣。
    posted @ 2010-10-19 22:31 小菜毛毛 閱讀(1800) | 評論 (0)編輯 收藏

    下面的討論以Windows平臺的Sun MicroSystem實現的java5虛擬機為藍本,其他操作系統或其他公司實現的虛擬機參數會有部分不同,但大部分含義都和Windows上的類似。Java5與以前版本相比,虛擬機參數大部分保持了向前兼容,同時也增加了一些新的參數,本文將對這些參數的作用作詳細描述,使虛擬機能更符合運行環境的需要,獲得更好的性能和穩定性。

    Java在運行已編譯完成的類時,是通過java虛擬機來裝載和執行的,java虛擬機通過操作系統命令JAVA_HOME\bin\java –option 來啟動,-option為虛擬機參數,JAVA_HOME為JDK安裝路徑,通過這些參數可對虛擬機的運行狀態進行調整,掌握參數的含義可對虛擬機的運行模式有更深入理解。


    虛擬機參數分為基本和擴展兩類,在命令行中輸入JAVA_HOME\bin\java 就可得到基本參數列表,

    在命令行輸入JAVA_HOME\bin\java –X 就可得到擴展參數列表。

    基本參數說明:


    -client,-server

    這兩個參數用于設置虛擬機使用何種運行模式,client模式啟動比較快,但運行時性能和內存管理效率不如server模式,通常用于客戶端應用程序。相反,server模式啟動比client慢,但可獲得更高的運行性能。

    在windows上,缺省的虛擬機類型為client模式,如果要使用server模式,就需要在啟動虛擬機時加-server參數,以獲得更高性能,對服務器端應用,推薦采用server模式,尤其是多個CPU的系統。在Linux,Solaris上缺省采用server模式。


    -hotspot

    含義與client相同,jdk1.4以前使用的參數,jdk1.4開始不再使用,代之以client。


    -classpath,-cp

    虛擬機在運行一個類時,需要將其裝入內存,虛擬機搜索類的方式和順序如下:

    Bootstrap classes,Extension classes,User classes。

    Bootstrap 中的路徑是虛擬機自帶的jar或zip文件,虛擬機首先搜索這些包文件,用System.getProperty("sun.boot.class.path")可得到虛擬機搜索的包名。


    Extension是位于jre\lib\ext目錄下的jar文件,虛擬機在搜索完Bootstrap后就搜索該目錄下的jar文件。用System. getProperty("java.ext.dirs”)可得到虛擬機使用Extension搜索路徑。

    User classes搜索順序為當前目錄、環境變量 CLASSPATH、-classpath。

    -classpath告知虛擬機搜索目錄名、jar文檔名、zip文檔名,之間用分號;分隔。

    例如當你自己開發了公共類并包裝成一個common.jar包,在使用common.jar中的類時,就需要用-classpath common.jar 告訴虛擬機從common.jar中查找該類,否則虛擬機就會拋出java.lang.NoClassDefFoundError異常,表明未找到類定義。

    在運行時可用System.getProperty(“java.class.path”)得到虛擬機查找類的路徑。


    使用-classpath后虛擬機將不再使用CLASSPATH中的類搜索路徑,如果-classpath和CLASSPATH都沒有設置,則虛擬機使用當前路徑(.)作為類搜索路徑。


    推薦使用-classpath來定義虛擬機要搜索的類路徑,而不要使用環境變量CLASSPATH的搜索路徑,以減少多個項目同時使用CLASSPATH時存在的潛在沖突。例如應用1要使用a1.0.jar中的類G,應用2要使用a2.0.jar中的類G,a2.0.jar是a1.0.jar的升級包,當a1.0.jar,a2.0.jar都在CLASSPATH中,虛擬機搜索到第一個包中的類G時就停止搜索,如果應用1應用2的虛擬機都從CLASSPATH中搜索,就會有一個應用得不到正確版本的類G。



    -D<propertyName>=value

    在虛擬機的系統屬性中設置屬性名/值對,運行在此虛擬機之上的應用程序可用System.getProperty(“propertyName”)得到value的值。

    如果value中有空格,則需要用雙引號將該值括起來,如-Dname=”space string”。

    該參數通常用于設置系統級全局變量值,如配置文件路徑,應為該屬性在程序中任何地方都可訪問。


    -verbose[:class|gc|jni]

    在輸出設備上顯示虛擬機運行信息。

    verbose和verbose:class含義相同,輸出虛擬機裝入的類的信息,顯示的信息格式如下:

    [Loaded java.io.FilePermission$1 from shared objects file]

    當虛擬機報告類找不到或類沖突時可用此參數來診斷來查看虛擬機從裝入類的情況。


    -verbose:gc在虛擬機發生內存回收時在輸出設備顯示信息,格式如下:

    [Full GC 268K->168K(1984K), 0.0187390 secs]

    該參數用來監視虛擬機內存回收的情況。


    -verbose:jni在虛擬機調用native方法時輸出設備顯示信息,格式如下:

    [Dynamic-linking native method HelloNative.sum ... JNI]

    該參數用來監視虛擬機調用本地方法的情況,在發生jni錯誤時可為診斷提供便利。



    -version

    顯示可運行的虛擬機版本信息然后退出。一臺機器上裝有不同版本的JDK時



    -showversion

    顯示版本信息以及幫助信息。



    -ea[:<packagename>...|:<classname>]

    -enableassertions[:<packagename>...|:<classname>]

    從JDK1.4開始,java可支持斷言機制,用于診斷運行時問題。通常在測試階段使斷言有效,在正式運行時不需要運行斷言。斷言后的表達式的值是一個邏輯值,為true時斷言不運行,為false時斷言運行,拋出java.lang.AssertionError錯誤。

    上述參數就用來設置虛擬機是否啟動斷言機制,缺省時虛擬機關閉斷言機制,用-ea可打開斷言機制,不加<packagename>和classname時運行所有包和類中的斷言,如果希望只運行某些包或類中的斷言,可將包名或類名加到-ea之后。例如要啟動包com.foo.util中的斷言,可用命令 –ea:com.foo.util 。


    -da[:<packagename>...|:<classname>]

    -disableassertions[:<packagename>...|:<classname>]

    用來設置虛擬機關閉斷言處理,packagename和classname的使用方法和-ea相同。



    -esa | -enablesystemassertions

    設置虛擬機顯示系統類的斷言。


    -dsa | -disablesystemassertions

    設置虛擬機關閉系統類的斷言。


    -agentlib:<libname>[=<options>]

    該參數是JDK5新引入的,用于虛擬機裝載本地代理庫。

    Libname為本地代理庫文件名,虛擬機的搜索路徑為環境變量PATH中的路徑,options為傳給本地庫啟動時的參數,多個參數之間用逗號分隔。在Windows平臺上虛擬機搜索本地庫名為libname.dll的文件,在Unix上虛擬機搜索本地庫名為libname.so的文件,搜索路徑環境變量在不同系統上有所不同,Linux、SunOS、IRIX上為LD_LIBRARY_PATH,AIX上為LIBPATH,HP-UX上為SHLIB_PATH。


    例如可使用-agentlib:hprof來獲取虛擬機的運行情況,包括CPU、內存、線程等的運行數據,并可輸出到指定文件中,可用-agentlib:hprof=help來得到使用幫助列表。在jre\bin目錄下可發現hprof.dll文件。


    -agentpath:<pathname>[=<options>]

    設置虛擬機按全路徑裝載本地庫,不再搜索PATH中的路徑。其他功能和agentlib相同。



    -javaagent:<jarpath>[=<options>]

    虛擬機啟動時裝入java語言設備代理。Jarpath文件中的mainfest文件必須有Agent-Class屬性。代理類要實現public static void premain(String agentArgs, Instrumentation inst)方法。當虛擬機初始化時,將按代理類的說明順序調用premain方法。

    參見:java.lang.instrument



    擴展參數說明


    -Xmixed

    設置-client模式虛擬機對使用頻率高的方式進行Just-In-Time編譯和執行,對其他方法使用解釋方式執行。該方式是虛擬機缺省模式。



    -Xint

    設置-client模式下運行的虛擬機以解釋方式執行類的字節碼,不將字節碼編譯為本機碼。


    -Xbootclasspath:path

    -Xbootclasspath/a:path

    -Xbootclasspath/p:path

    改變虛擬機裝載缺省系統運行包rt.jar而從-Xbootclasspath中設定的搜索路徑中裝載系統運行類。除非你自己能寫一個運行時,否則不會用到該參數。

    /a:將在缺省搜索路徑后加上path 中的搜索路徑。

    /p:在缺省搜索路徑前先搜索path中的搜索路徑。


    -Xnoclassgc

    關閉虛擬機對class的垃圾回收功能。


    -Xincgc

    啟動增量垃圾收集器,缺省是關閉的。增量垃圾收集器能減少偶然發生的長時間的垃圾回收造成的暫停時間。但增量垃圾收集器和應用程序并發執行,因此會占用部分CPU在應用程序上的功能。


    -Xloggc:<file>

    將虛擬機每次垃圾回收的信息寫到日志文件中,文件名由file指定,文件格式是平文件,內容和-verbose:gc輸出內容相同。




    -Xbatch

    虛擬機的缺省運行方式是在后臺編譯類代碼,然后在前臺執行代碼,使用-Xbatch參數將關閉虛擬機后臺編譯,在前臺編譯完成后再執行。



    -Xms<size>

    設置虛擬機可用內存堆的初始大小,缺省單位為字節,該大小為1024的整數倍并且要大于1MB,可用k(K)或m(M)為單位來設置較大的內存數。初始堆大小為2MB。

    例如:-Xms6400K,-Xms256M



    -Xmx<size>

    設置虛擬機內存堆的最大可用大小,缺省單位為字節。該值必須為1024整數倍,并且要大于2MB。可用k(K)或m(M)為單位來設置較大的內存數。缺省堆最大值為64MB。

    例如:-Xmx81920K,-Xmx80M

    當應用程序申請了大內存運行時虛擬機拋出java.lang.OutOfMemoryError: Java heap space錯誤,就需要使用-Xmx設置較大的可用內存堆。


    -Xss<size>

    設置線程棧的大小,缺省單位為字節。與-Xmx類似,也可用K或M來設置較大的值。通常操作系統分配給線程棧的缺省大小為1MB。

    另外也可在java中創建線程對象時設置棧的大小,構造函數原型為Thread(ThreadGroup group, Runnable target, String name, long stackSize)。



    -Xprof

    輸出CPU運行時的診斷信息。



    -Xfuture

    對類文件進行嚴格格式檢查,以保證類代碼符合類代碼規范。為保持向后兼容,虛擬機缺省不進行嚴格的格式檢查。


    -Xrs

    減少虛擬機中操作系統的信號(singals)的使用。該參數通常用在虛擬機以后臺服務方式運行時使用(如Servlet)。



    -Xcheck:jni

    調用JNI函數時進行附加的檢查,特別地虛擬機將校驗傳遞給JNI函數參數的合法性,在本地代碼中遇到非法數據時,虛擬機將報一個致命錯誤而終止。使用該參數后將造成性能下降。

    posted @ 2010-10-19 17:07 小菜毛毛 閱讀(425) | 評論 (0)編輯 收藏

    Sitman PC復讀機7月24日發布了最新的2.3版(官方網站:http://www.sitmansoft.com/),但安裝程序中附帶了“百度”等垃圾,最近官方又發布了綠色版,其中祛除了垃圾軟件,下載地址:


    復讀機下載地址:http://www.sitmansoft.com/down/SitMan23.zip

    以前版本的注冊碼在2.3版下不好用!
    注冊方法:
    方法一:
    在sitman目錄中config.ini文件中加入以下一項。
    [RegInfo]
    RegisterCode=8ac1000323ulgyeq5x
    UserName=學英語

    方法二:
    打開Sitman→單擊“幫助”菜單→單擊“關于Sitman”→雙擊左下角的“軟件授權”→然后在注冊窗口填上:用戶名:學英語 注冊碼:8ac1000323ulgyeq5x→最后點“注冊”按鈕,OK注冊成功。(我覺得這個方法好,我用的就是這個,裝好了)

    posted @ 2010-10-14 13:20 小菜毛毛 閱讀(1548) | 評論 (0)編輯 收藏

    轉載  axis2 java.lang.reflect.InvocationTargetException 收藏

    http://loshamo.javaeye.com/blog/627020

    [i][/i]在使用codegen1.3插件來從WSDL生成代碼,到了最后一步竟然出然 了"An error occurred while completing process -java.lang.reflect.InvocationTargetException"的錯誤
    產生這種錯誤的原因一般有2種:首先關閉eclipse。
    1.jar包缺失
    從AXIS2的LIB庫中復制"geronimo-stax-api_1.0_spec-1.0.1.jar"和"backport-util-concurrent-3.1.jar"文件到Codegen的lib目錄中,同時修改plugin.xml文件,添加

    <library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
    <export name="*"/>
    </library>
    <library name="lib/backport-util-concurrent-3.1.jar">
    <export name="*"/>
    </library>
    2.版本問題
    F:\Program Files\MyEclipse 6.0\eclipse\plugins\Axis2_Codegen_Wizard_1.3.0\plugin.xml中
    <plugin
       id="Axis2_Codegen_Wizard"
       name="Axis2 Codegen Wizard Plug-in"
       version="1.3.0"
       provider-name="Apache Software Foundation"
       class="org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin"& gt;看看自己下載的axis2版本是否和這個配置一致,像我的是axis2-1.5.1則需修改上面的配置為<plugin
       id="Axis2_Codegen_Wizard"
       name="Axis2 Codegen Wizard Plug-in"
       version="1.5.1"         //對應的版本號
       provider-name="Apache Software Foundation"
       class="org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin">
    然后再將文件夾的名字Axis2_Codegen_Wizard_1.3.0改為Axis2_Codegen_Wizard_1.5.1
    修改完以上2步重新啟動eclipse即可。
    posted @ 2010-10-11 17:29 小菜毛毛 閱讀(3920) | 評論 (2)編輯 收藏

         摘要: 使用Axis編寫WebService比較簡單,就我的理解,WebService的實現代碼和編寫Java代碼其實沒有什么區別,主要是將哪些Java類發布為WebService。下面是一個從編寫測試例子到發布WebService,以及編寫測試代碼的過程介紹。       本例子的WebService提供了兩個方法,分別是sayHello和sayHelloTo...  閱讀全文
    posted @ 2010-10-09 17:41 小菜毛毛 閱讀(13404) | 評論 (2)編輯 收藏

    最近在研究openmeetings,使用的是mysql5,但在切換簡體中文的時候老出問題,后來發現庫中不存在中文的配置文件,找到簡體中文利用提供的語言導入功能,發現中文無法寫入,導入英文的配置文件完全沒有問題。

    在網上查到的方法:

      找到“my.ini”這個文件,就在MYSQL的安裝目錄下,如果找不到的話,用搜索也行!

      用記事本打開,找到下面這一行文本

      sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

      注意,可能不太一樣,但前面肯定是 sql-mode 只有這么一行。

      在它的前面加上一個“#”號,即

      #sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

      保存文件,最后是重新啟動一下MYSQL服務。

    試完后中文還是無法保存,后來發現字段屬性的字符集是latin1,改成utf8后就好了.

    posted @ 2010-10-06 15:53 小菜毛毛 閱讀(1953) | 評論 (0)編輯 收藏

    http://blog.csdn.net/wjp553650958/archive/2009/08/30/4499540.aspx
    讀取容器配置參數---context-param和init-param區別

    web.xml里面可以定義兩種參數:
    (1)application范圍內的參數,存放在servletcontext中,在web.xml中配置如下:  <context-param>
               <param-name>context/param</param-name>
               <param-value>avalible during application</param-value>

               <param-name>name1</param-name>
               <param-value>value1</param-value>
      </context-param>


    (2)servlet范圍內的參數,只能在servlet的init()方法中取得,在web.xml中配置如下:

     <servlet>
        <servlet-name>MainServlet</servlet-name>
        <servlet-class>com.wes.controller.MainServlet</servlet-class>
        <init-param>
           <param-name>param1</param-name>
           <param-value>avalible in servlet init()</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
     </servlet>


    在servlet中可以通過代碼分別取用:

    package com.wes.controller;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;

    public class MainServlet extends HttpServlet ...{

        public MainServlet() ...{
            super();
         }
        public void init() throws ServletException ...{
             System.out.println("下面的兩個參數param1是在servlet中存放的");
             System.out.println(this.getInitParameter("param1"));
             System.out.println("下面的參數是存放在servletcontext中的");
             System.out.println(getServletContext().getInitParameter("context/param"));
          }
    }

    第 一種參數在servlet里面可以通過getServletContext().getInitParameter("context/param")得 到?(在servlet的init()方法中通過this.getInitParameter("param1")取得)


    第二種參數只能在servlet的init()方法中通過this.getInitParameter("param1")取得

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


    ServletContextListener實現讀取web.xml中context-param信息      2009年03月27日 星期五 22:37
      用部署文件來存儲配置參數在Java中是一種很流行的做法。

    配置參數一般存放在context-param元素中,每一個context-param元素代表了一個鍵值對。

    我 們可以通過實現ServletContextListener接口讀取該鍵值對中的值,在web應用程序初始化的時候,調用 ServletContextListener的contextInitialized()方法,所以我們我們可以重寫該方法,實現讀取操作。可以這樣實 現:

    public class AppListener implements ServletContextListener {


    public void contextInitialized(ServletContextEvent sce) {
       try {
              
                MyConfig config = new MyConfig();//存放配置信息,用Map實現
                Enumeration parameters =  sce.getServletContext().getInitParameterNames();
               
                while(parameters.hasMoreElements()){
                   String name =  (String) parameters.nextElement();
                   config.addKeyTValue(name, sce.getServletContext().getInitParameter(name));
                } 

            //相應的鍵值對存到map中
              config.addKeyValue(parameter, sc.getInitParameter(parameter));
        }
       } catch(Exception e) {
        System.out.println("com.shou error:" + e.getMessage());
       }
    }

    public void contextDestroyed(ServletContextEvent arg0) {

    }
    }

     MyConfig類:(Singleton Config)
    package com.myapp;

    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;

    /**
     *
     * @author Administrator
     */

    public class MyConfig{
        public static MyConfig myconfig;
       
        public static HashMap config = new HashMap();

        public static HashMap getConfig() {
            return config;
        }
       
        public static MyConfig getInstance(){
            if(myconfig==null){
                myconfig = new MyConfig();
               
            }
            return myconfig;
        }
        public static void setConfig(HashMap config) {
           
            MyConfig.config = config;
        }

         public HashMap addKeyTValue(String name,String value){
               this.config.put(name, value);
               return this.config;
              
         }
    }

    接著,必須在web.xml中配置相應的監聽類,才能在初始化的時候,自動調用該方法。如:

    <listener>
    <listener-class>com.myapp.MyListener</listener-class>
    </listener>

    這樣就可以在任何一個JSP頁面,通過EL表達式或JSTL讀到context-param中的內容。

    有的網友說在web.xml內定義<listener>元素時得注意下列兩點:
    <listener>元素必須出現在任何Context起始參數(由<context-param>元素所定義)之后。
    <listener>元素必須出現在任何Servlet實體(由<servlet>元素所定義)之前。

    但是我在TOMCAT5.5 + J2EE 5下配置web.xml并沒有按照上述的嚴格限制也能成功讀取信息。

    難道是版本的問題嗎。

    在Struts 1.X下,通過一個自定義的Singleton Config類,可以讓web.xml中的配置參數在整個應用程序里都能被共享。


    posted @ 2010-09-30 16:38 小菜毛毛 閱讀(4053) | 評論 (0)編輯 收藏

    http://zhxing.javaeye.com/blog/399668
    在項目中總會遇到一些關于加載的優先級問題,近期也同樣遇到過類似的,所以自己查找資料總結了下,下面有些是轉載其他人的,畢竟人家寫的不錯,自己也就不重復造輪子了,只是略加點了自己的修飾。

            首先可以肯定的是,加載順序與它們在 web.xml 文件中的先后順序無關。即不會因為 filter 寫在 listener 的前面而會先加載 filter。最終得出的結論是:listener -> filter -> servlet

            同時還存在著這樣一種配置節:context-param,它用于向 ServletContext 提供鍵值對,即應用程序上下文信息。我們的 listener, filter 等在初始化時會用到這些上下文中的信息,那么 context-param 配置節是不是應該寫在 listener 配置節前呢?實際上 context-param 配置節可寫在任意位置,因此真正的加載順序為:context-param -> listener -> filter -> servlet

            對于某類配置節而言,與它們出現的順序是有關的。以 filter 為例,web.xml 中當然可以定義多個 filter,與 filter 相關的一個配置節是 filter-mapping,這里一定要注意,對于擁有相同 filter-name 的 filter 和 filter-mapping 配置節而言,filter-mapping 必須出現在 filter 之后,否則當解析到 filter-mapping 時,它所對應的 filter-name 還未定義。web 容器啟動時初始化每個 filter 時,是按照 filter 配置節出現的順序來初始化的,當請求資源匹配多個 filter-mapping 時,filter 攔截資源是按照 filter-mapping 配置節出現的順序來依次調用 doFilter() 方法的。

            servlet 同 filter 類似,此處不再贅述。

           由此,可以看出,web.xml 的加載順序是:context-param -> listener -> filter -> servlet ,而同個類型之間的實際程序調用的時候的順序是根據對應的 mapping 的順序進行調用的。

    web.xml文件詳解

    Xml代碼
    1. Web.xml常用元素   
    2. <web-app>   
    3. <display-name></display-name>定義了WEB應用的名字   
    4. <description></description> 聲明WEB應用的描述信息   
    5.   
    6. <context-param></context-param> context-param元素聲明應用范圍內的初始化參數。   
    7. <filter></filter> 過濾器元素將一個名字與一個實現javax.servlet.Filter接口的類相關聯。   
    8. <filter-mapping></filter-mapping> 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。   
    9. <listener></listener>servlet API的版本2.3增加了對事件監聽程序的支持,事件監聽程序在建立、修改和刪除會話或servlet環境時得到通知。   
    10.                      Listener元素指出事件監聽程序類。   
    11. <servlet></servlet> 在向servlet或JSP頁面制定初始化參數或定制URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務的。   
    12. <servlet-mapping></servlet-mapping> 服務器一般為servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName。   
    13.               但是,常常會更改這個URL,以便servlet可以訪問初始化參數或更容易地處理相對URL。在更改缺省URL時,使用servlet-mapping元素。   
    14.   
    15. <session-config></session-config> 如果某個會話在一定時間內未被訪問,服務器可以拋棄它以節省內存。   
    16.           可通過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。   
    17.   
    18. <mime-mapping></mime-mapping>如果Web應用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。   
    19. <welcome-file-list></welcome-file-list> 指示服務器在收到引用一個目錄名而不是文件名的URL時,使用哪個文件。   
    20. <error-page></error-page> 在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面。   
    21. <taglib></taglib> 對標記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置,   
    22.                   而不用編輯使用這些文件的JSP頁面。   
    23. <resource-env-ref></resource-env-ref>聲明與資源相關的一個管理對象。   
    24. <resource-ref></resource-ref> 聲明一個資源工廠使用的外部資源。   
    25. <security-constraint></security-constraint> 制定應該保護的URL。它與login-config元素聯合使用   
    26. <login-config></login-config> 指定服務器應該怎樣給試圖訪問受保護頁面的用戶授權。它與sercurity-constraint元素聯合使用。   
    27. <security-role></security-role>給出安全角色的一個列表,這些角色將出現在servlet元素內的security-role-ref元素   
    28.                    的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更為容易。   
    29. <env-entry></env-entry>聲明Web應用的環境項。   
    30. <ejb-ref></ejb-ref>聲明一個EJB的主目錄的引用。   
    31. < ejb-local-ref></ ejb-local-ref>聲明一個EJB的本地主目錄的應用。   
    32. </web-app>   
    33.   
    34.   
    35. 相應元素配置   
    36.   
    37. 1、Web應用圖標:指出IDE和GUI工具用來表示Web應用的大圖標和小圖標   
    38. <icon>   
    39. <small-icon>/images/app_small.gif</small-icon>   
    40. <large-icon>/images/app_large.gif</large-icon>   
    41. </icon>   
    42. 2、Web 應用名稱:提供GUI工具可能會用來標記這個特定的Web應用的一個名稱   
    43. <display-name>Tomcat Example</display-name>   
    44. 3、Web 應用描述: 給出于此相關的說明性文本   
    45. <disciption>Tomcat Example servlets and JSP pages.</disciption>   
    46. 4、上下文參數:聲明應用范圍內的初始化參數。   
    47.   <context-param>   
    48.     <param-name>ContextParameter</para-name>   
    49.     <param-value>test</param-value>   
    50.     <description>It is a test parameter.</description>   
    51.   </context-param>   
    52.   在servlet里面可以通過getServletContext().getInitParameter("context/param")得到   
    53.   
    54. 5、過濾器配置:將一個名字與一個實現javaxs.servlet.Filter接口的類相關聯。   
    55.   <filter>   
    56.         <filter-name>setCharacterEncoding</filter-name>   
    57.         <filter-class>com.myTest.setCharacterEncodingFilter</filter-class>   
    58.         <init-param>   
    59.             <param-name>encoding</param-name>   
    60.             <param-value>GB2312</param-value>   
    61.         </init-param>   
    62.   </filter>   
    63.   <filter-mapping>   
    64.         <filter-name>setCharacterEncoding</filter-name>   
    65.         <url-pattern>/*</url-pattern>   
    66.   </filter-mapping>   
    67. 6、監聽器配置   
    68.   <listener>   
    69.       <listerner-class>listener.SessionListener</listener-class>   
    70.   </listener>   
    71. 7、Servlet配置   
    72.    基本配置   
    73.    <servlet>   
    74.       <servlet-name>snoop</servlet-name>   
    75.       <servlet-class>SnoopServlet</servlet-class>   
    76.    </servlet>   
    77.    <servlet-mapping>   
    78.       <servlet-name>snoop</servlet-name>   
    79.       <url-pattern>/snoop</url-pattern>   
    80.    </servlet-mapping>   
    81.    高級配置   
    82.    <servlet>   
    83.       <servlet-name>snoop</servlet-name>   
    84.       <servlet-class>SnoopServlet</servlet-class>   
    85.       <init-param>   
    86.          <param-name>foo</param-name>   
    87.          <param-value>bar</param-value>   
    88.       </init-param>   
    89.       <run-as>   
    90.          <description>Security role for anonymous access</description>   
    91.          <role-name>tomcat</role-name>   
    92.       </run-as>   
    93.    </servlet>   
    94.    <servlet-mapping>   
    95.       <servlet-name>snoop</servlet-name>   
    96.       <url-pattern>/snoop</url-pattern>   
    97.    </servlet-mapping>   
    98.    元素說明   
    99.      <servlet></servlet> 用來聲明一個servlet的數據,主要有以下子元素:   
    100.      <servlet-name></servlet-name> 指定servlet的名稱   
    101.      <servlet-class></servlet-class> 指定servlet的類名稱   
    102.      <jsp-file></jsp-file> 指定web站臺中的某個JSP網頁的完整路徑   
    103.      <init-param></init-param> 用來定義參數,可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數   
    104.      <load-on-startup></load-on-startup>指定當Web應用啟動時,裝載Servlet的次序。   
    105.                                  當值為正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet.   
    106.                                  當值為負或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它   
    107.      <servlet-mapping></servlet-mapping> 用來定義servlet所對應的URL,包含兩個子元素   
    108.        <servlet-name></servlet-name> 指定servlet的名稱   
    109.        <url-pattern></url-pattern> 指定servlet所對應的URL   
    110. 8、會話超時配置(單位為分鐘)   
    111.    <session-config>   
    112.       <session-timeout>120</session-timeout>   
    113.    </session-config>   
    114. 9、MIME類型配置   
    115.    <mime-mapping>   
    116.       <extension>htm</extension>   
    117.       <mime-type>text/html</mime-type>   
    118.    </mime-mapping>   
    119. 10、指定歡迎文件頁配置   
    120.    <welcome-file-list>   
    121.       <welcome-file>index.jsp</welcome-file>   
    122.       <welcome-file>index.html</welcome-file>   
    123.       <welcome-file>index.htm</welcome-file>   
    124.    </welcome-file-list>   
    125. 11、配置錯誤頁面   
    126.   一、 通過錯誤碼來配置error-page   
    127.    <error-page>   
    128.       <error-code>404</error-code>   
    129.       <location>/NotFound.jsp</location>   
    130.    </error-page>   
    131.   上面配置了當系統發生404錯誤時,跳轉到錯誤處理頁面NotFound.jsp。   
    132. 二、通過異常的類型配置error-page   
    133.    <error-page>   
    134.        <exception-type>java.lang.NullException</exception-type>   
    135.        <location>/error.jsp</location>   
    136.    </error-page>   
    137.   上面配置了當系統發生java.lang.NullException(即空指針異常)時,跳轉到錯誤處理頁面error.jsp   
    138. 12、TLD配置   
    139.    <taglib>   
    140.        <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri>   
    141.        <taglib-location>/WEB-INF/jsp/debug-taglib.tld</taglib-location>   
    142.    </taglib>   
    143.    如果MyEclipse一直在報錯,應該把<taglib> 放到 <jsp-config>中   
    144.    <jsp-config>   
    145.       <taglib>   
    146.           <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri>   
    147.           <taglib-location>/WEB-INF/pager-taglib.tld</taglib-location>   
    148.       </taglib>   
    149.    </jsp-config>   
    150. 13、資源管理對象配置   
    151.    <resource-env-ref>   
    152.        <resource-env-ref-name>jms/StockQueue</resource-env-ref-name>   
    153.    </resource-env-ref>   
    154. 14、資源工廠配置   
    155.    <resource-ref>   
    156.        <res-ref-name>mail/Session</res-ref-name>   
    157.        <res-type>javax.mail.Session</res-type>   
    158.        <res-auth>Container</res-auth>   
    159.    </resource-ref>   
    160.    配置數據庫連接池就可在此配置:   
    161.    <resource-ref>   
    162.        <description>JNDI JDBC DataSource of shop</description>   
    163.        <res-ref-name>jdbc/sample_db</res-ref-name>   
    164.        <res-type>javax.sql.DataSource</res-type>   
    165.        <res-auth>Container</res-auth>   
    166.    </resource-ref>   
    167. 15、安全限制配置   
    168.    <security-constraint>   
    169.       <display-name>Example Security Constraint</display-name>   
    170.       <web-resource-collection>   
    171.          <web-resource-name>Protected Area</web-resource-name>   
    172.          <url-pattern>/jsp/security/protected/*</url-pattern>   
    173.          <http-method>DELETE</http-method>   
    174.          <http-method>GET</http-method>   
    175.          <http-method>POST</http-method>   
    176.          <http-method>PUT</http-method>   
    177.       </web-resource-collection>   
    178.       <auth-constraint>   
    179.         <role-name>tomcat</role-name>   
    180.         <role-name>role1</role-name>   
    181.       </auth-constraint>   
    182.    </security-constraint>   
    183. 16、登陸驗證配置   
    184.    <login-config>   
    185.      <auth-method>FORM</auth-method>   
    186.      <realm-name>Example-Based Authentiation Area</realm-name>   
    187.      <form-login-config>   
    188.         <form-login-page>/jsp/security/protected/login.jsp</form-login-page>   
    189.         <form-error-page>/jsp/security/protected/error.jsp</form-error-page>   
    190.      </form-login-config>   
    191.    </login-config>   
    192. 17、安全角色:security-role元素給出安全角色的一個列表,這些角色將出現在servlet元素內的security-role-ref元素的role-name子元素中。   
    193.     分別地聲明角色可使高級IDE處理安全信息更為容易。   
    194.   <security-role>   
    195.      <role-name>tomcat</role-name>   
    196.   </security-role>   
    197. 18、Web環境參數:env-entry元素聲明Web應用的環境項   
    198.   <env-entry>   
    199.      <env-entry-name>minExemptions</env-entry-name>   
    200.      <env-entry-value>1</env-entry-value>   
    201.      <env-entry-type>java.lang.Integer</env-entry-type>   
    202.   </env-entry>   
    203. 19、EJB 聲明   
    204.   <ejb-ref>   
    205.      <description>Example EJB reference</decription>   
    206.      <ejb-ref-name>ejb/Account</ejb-ref-name>   
    207.      <ejb-ref-type>Entity</ejb-ref-type>   
    208.      <home>com.mycompany.mypackage.AccountHome</home>   
    209.      <remote>com.mycompany.mypackage.Account</remote>   
    210.   </ejb-ref>   
    211. 20、本地EJB聲明   
    212.   <ejb-local-ref>   
    213.      <description>Example Loacal EJB reference</decription>   
    214.      <ejb-ref-name>ejb/ProcessOrder</ejb-ref-name>   
    215.      <ejb-ref-type>Session</ejb-ref-type>   
    216.      <local-home>com.mycompany.mypackage.ProcessOrderHome</local-home>   
    217.      <local>com.mycompany.mypackage.ProcessOrder</local>   
    218.   </ejb-local-ref>   
    219. 21、配置DWR   
    220.   <servlet>   
    221.       <servlet-name>dwr-invoker</servlet-name>   
    222.       <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>   
    223.   </servlet>   
    224.   <servlet-mapping>   
    225.       <servlet-name>dwr-invoker</servlet-name>   
    226.       <url-pattern>/dwr/*</url-pattern>   
    227.   </servlet-mapping>   
    228. 22、配置Struts   
    229.     <display-name>Struts Blank Application</display-name>   
    230.     <servlet>   
    231.         <servlet-name>action</servlet-name>   
    232.         <servlet-class>   
    233.             org.apache.struts.action.ActionServlet   
    234.         </servlet-class>   
    235.         <init-param>   
    236.             <param-name>detail</param-name>   
    237.             <param-value>2</param-value>   
    238.         </init-param>   
    239.         <init-param>   
    240.             <param-name>debug</param-name>   
    241.             <param-value>2</param-value>   
    242.         </init-param>   
    243.         <init-param>   
    244.             <param-name>config</param-name>   
    245.             <param-value>/WEB-INF/struts-config.xml</param-value>   
    246.         </init-param>   
    247.         <init-param>   
    248.             <param-name>application</param-name>   
    249.             <param-value>ApplicationResources</param-value>   
    250.         </init-param>   
    251.         <load-on-startup>2</load-on-startup>   
    252.     </servlet>   
    253.     <servlet-mapping>   
    254.         <servlet-name>action</servlet-name>   
    255.         <url-pattern>*.do</url-pattern>   
    256.     </servlet-mapping>   
    257.     <welcome-file-list>   
    258.         <welcome-file>index.jsp</welcome-file>   
    259.     </welcome-file-list>   
    260.   
    261.     <!-- Struts Tag Library Descriptors -->   
    262.     <taglib>   
    263.         <taglib-uri>struts-bean</taglib-uri>   
    264.         <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>   
    265.     </taglib>   
    266.     <taglib>   
    267.         <taglib-uri>struts-html</taglib-uri>   
    268.         <taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>   
    269.     </taglib>   
    270.     <taglib>   
    271.     <taglib-uri>struts-nested</taglib-uri>   
    272.     <taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>   
    273.     </taglib>   
    274.     <taglib>   
    275.         <taglib-uri>struts-logic</taglib-uri>   
    276.         <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>   
    277.     </taglib>   
    278.     <taglib>   
    279.         <taglib-uri>struts-tiles</taglib-uri>   
    280.         <taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>   
    281.     </taglib>   
    282. 23、配置Spring(基本上都是在Struts中配置的)   
    283.   
    284.    <!-- 指定spring配置文件位置 -->   
    285.    <context-param>   
    286.       <param-name>contextConfigLocation</param-name>   
    287.       <param-value>   
    288.        <!--加載多個spring配置文件 -->   
    289.         /WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml   
    290.       </param-value>   
    291.    </context-param>   
    292.   
    293.    <!-- 定義SPRING監聽器,加載spring -->   
    294.   
    295.   <listener>   
    296.      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   
    297.   </listener>   
    298.   
    299.   <listener>   
    300.      <listener-class>   
    301.        org.springframework.web.context.request.RequestContextListener   
    302.      </listener-class>   
    303.   </listener>   

    posted @ 2010-09-30 16:33 小菜毛毛 閱讀(1646) | 評論 (0)編輯 收藏

    Tomcat中web.xml文件的詳細說明
    <?xml version="1.0" encoding="GB2312"?> <!--
    Web.xml依次定議了如下元素:
    <web-app>
    <display-name></display-name> 定義了WEB應用的名字
    <description></description> 聲明WEB應用的描述信息
    <filter></filter>
    <filter-mapping></filter-mapping>
    <servlet></servlet>
    <servlet-mapping></servlet-mapping>
    <session-config></session-config>
    <welcome-file-list></welcome-file-list>
    <taglib></taglib>
    <resource-ref></resource-ref>
    <security-constraint></security-constraint>
    <login-config></login-config>
    </web-app>
    在web.xml中元素定義的先后順序不能顛倒,否則Tomcat服務器可能會拋出SAXParseException.
    -->
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" " <web-app>

    <display-name>Sample Application</display-name>

    <description>
    This is a Sample Application
    </description>

    <!--
    filter 配置Servlet過濾器
    filter-name 定義過濾器的名字。當有多個過濾器時,不能同名
    filter-class 指定實現這一過濾的類,這個類負責具體的過濾事務
    -->
    <filter>
    <filter-name>SampleFilter</filter-name>
    <filter-class>mypack.SampleFilter</filter-class>
    </filter>

    <!--
    filter-mapping 設定過濾器負責過濾的URL
    filter-name 過濾器名。這里的名字一定要和filter中的過濾器名匹配
    url-pattern 指定過濾器負責過濾的URL
    -->
    <filter-mapping>
    <filter-name>SampleFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

    <!--
    servlet 配置Servlet.
    servlet-name 定義Servlet的名字
    servlet-class 指定實現這個servlet的類
    init-param 定義Servlet的初始化參數和參數值,可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數
    load-on-startup 指定當Web應用啟動時,裝載Servlet的次序。
    當值為正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet.
    當值為負或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它
    -->
    <servlet>
    <servlet-name>SampleServlet</servlet-name>
    <servlet-class>mypack.SampleServlet</servlet-class>
    <init-param>
    <param-name>initParam1</param-name>
    <param-value>2</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>

    <!--
    配置servlet映射(下面代碼為SampleServlet指定的相對URL為"/sample":
    servlet-name 指定servlet的名字,這里的名字應該和<Servlet>元素中定義的名字匹配。
    url-pattern 指定訪問這個servlet的URL。只需給出相對路徑。
    -->
    <servlet-mapping>
    <servlet-name>SampleServlet</servlet-name>
    <url-pattern>/sample</url-pattern>
    </servlet-mapping>

    <!--配置session session用來設定HttpSession的生命周期。單位(秒)-->
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>

    <!--配置Wel0come0文件清單-->
    <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    </welcome-file-list>

    <!--
    配置Tag Library
    taglib-uri 設定Tag Library的唯一標識符,在Web應用中將根據這一標識符來引用Tag Library
    taglib-location 指定和Tag Library對應的TLD文件的位置
    -->
    <taglib>
    <taglib-uri>/mytaglib</taglib-uri>
    <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
    </taglib>

    <!--
    配置資源引用
    description 對所引用的資源的說明
    res-ref-name 指定所引用資源的JNDI名字
    res-type 指定所引用資源的類名字
    res-auth 指定管理所引用資源的Manager,它有兩個可選值:
    Container:由容器來創建和管理resource
    Application:同WEB應用來創建和管理Resource
    -->
    <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/sampleDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

    <!--
    配置安全約束(以下代碼指定當用戶訪問該WEB應用下的所有資源時,必須具備guest角色)
    web-resource-collection 聲明受保護的WEB資源
    auth-constraint 聲明可以訪問受保護資源的角色,可以包含多個<role-name>子元素

    web-resource-name 標識受保護的WEB資源
    url-pattern 指定受保護的URL路徑
    -->
    <Security-constraint>
    <web-resource-collection>
    <web-resource-name>sample appliction</web-resource-name>
    <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
    <role-name>guest</role-name>
    </auth-constraint>
    </Security-constraint>


    <!--
    配置安全驗證登錄界面:指定當WEB客戶訪問受保護的WEB資源時,系統彈出的登錄對話框的類型。
    auth-method 指定驗證方法,它有三個可選值:BASIC(基本驗證)、DIGEST(摘要驗證)、FORM(表單驗證)
    realm-name 設定安全域的名稱
    form-login-config 當驗證方法為FORM時,配置驗證網頁和出錯網頁
    form-login-page 當驗證方法為FORM時,設定驗證網頁
    form-error-page 當驗證方法為FORM時,設定出錯網頁
    -->
    <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>
    Tomcat Server Configuration form-Based Authentication Area
    </realm-name>
    <form-login-config>
    <form-login-page>/login.jsp</form-login-page>
    <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
    </login-config>

    <!--配置對安全驗證角色的引用-->
    <security-role>
    <description>
    The role that is required to log into the sample application
    </description>
    <role-name>guest</role-name>
    </security-role>
    </web-app>

    posted @ 2010-09-30 16:06 小菜毛毛 閱讀(4192) | 評論 (0)編輯 收藏

    http://wangguorui89.javaeye.com/blog/428345

    Java定時器在Web中的應用

    關鍵字: java, 定時器, timertask

    在web中,定時器的啟動一般隨web server的啟動而啟動,一般有兩種方法.

    方法一:在web.xml里配置一個Servlet,并設置其隨web server的啟動而啟動。然后在該Servlet的init()方法里啟動定時器,在destory()方法里銷毀定時器。
    方法二:在web.xml里配置一個Listener,然后在該Listener的初始化方法里啟動定時器,在其銷毀的方法朝左銷毀定時器。

    在servlet中啟動定時器
    java 代碼
    1. import java.io.IOException;   
    2. import java.util.Timer;   
    3. import javax.servlet.RequestDispatcher;   
    4. import javax.servlet.ServletContext;   
    5. import javax.servlet.ServletException;   
    6. import javax.servlet.http.HttpServlet;   
    7. import javax.servlet.http.HttpServletRequest;   
    8. import javax.servlet.http.HttpServletResponse;   
    9.   
    10. import org.apache.commons.lang.StringUtils;   
    11.   
    12. public class ConvergeDataServlet extends HttpServlet {   
    13.   
    14.     private static final long serialVersionUID = 1L;   
    15.   
    16.     private Timer timer1 = null;   
    17.        
    18.     private Task task1;   
    19.        
    20.     /**  
    21.      * Constructor of the object.  
    22.      */  
    23.     public ConvergeDataServlet() {   
    24.         super();   
    25.     }   
    26.   
    27.     /**  
    28.      * Destruction of the servlet. 
       
    29.      */  
    30.     public void destroy() {   
    31.         super.destroy();    
    32.         if(timer1!=null){   
    33.             timer1.cancel();   
    34.         }   
    35.     }   
    36.   
    37.        
    38.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
    39.             throws ServletException, IOException {   
    40.            
    41.     }   
    42.   
    43.        
    44.     public void doPost(HttpServletRequest request, HttpServletResponse response)   
    45.             throws ServletException, IOException {   
    46.         doGet(request, response);          
    47.     }   
    48.   
    49.     // init方法啟動定時器   
    50.     public void init() throws ServletException {   
    51.            
    52.         ServletContext context = getServletContext();   
    53.            
    54.         // (true為用定時間刷新緩存)   
    55.         String startTask = getInitParameter("startTask");   
    56.                    
    57.         // 定時刷新時間(分鐘)   
    58.         Long delay = Long.parseLong(getInitParameter("delay"));   
    59.            
    60.         // 啟動定時器   
    61.         if(startTask.equals("true")){   
    62.             timer1 = new Timer(true);   
    63.             task1 = new Task(context);   
    64.             timer1.schedule(task1, delay * 60 * 1000, delay * 60 * 1000);   
    65.         }   
    66.     }   
    67. }   

     定時執行操作

    java 代碼
    1.   
    2. /**  
    3.  *   
    4.  * @author callan  
    5.  */  
    6. import java.util.TimerTask;   
    7.   
    8. import javax.servlet.ServletContext;   
    9.   
    10. public class Task extends TimerTask{   
    11.   
    12.     private ServletContext context;   
    13.        
    14.     private static boolean isRunning = true;   
    15.        
    16.     public Task(ServletContext context){   
    17.         this.context = context;   
    18.     }   
    19.        
    20.            
    21.     @Override  
    22.     public void run() {   
    23.         if(isRunning){   
    24.              
    25.         }   
    26.     }   
    27.   
    28. }   

    在web.xml配置這個servlet為服務啟動時就調用servlet

    <servlet></servlet>
      < servlet >
         < servlet-name >taskservlet< / servlet-name >
        < servlet-class >com.task< /servlet-class >
        < init-param >
         < param-name >startTask< /param-name >
         < param-value >true< /param-value >
        < /init-param >
        < init-param >
         < param-name >intervalTime< /param-name >
         < param-value >1< /param-value >
        < /init-param >
        < load-on-startup >300< /load-on-startup >
      < /servlet >

    <servlet></servlet>


    posted @ 2010-09-30 14:56 小菜毛毛 閱讀(1397) | 評論 (0)編輯 收藏

    僅列出標題
    共17頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
    主站蜘蛛池模板: 亚洲精品偷拍视频免费观看| 国产av无码专区亚洲国产精品| 成在线人直播免费视频| 亚洲另类图片另类电影| 亚洲码国产精品高潮在线| 免费人成在线观看播放国产| 美女视频黄a视频全免费| A级毛片高清免费视频在线播放| 在线观看亚洲视频| 亚洲深深色噜噜狠狠网站| 亚洲视频小说图片| 亚洲av无码专区国产乱码在线观看| 亚洲高清无码专区视频| 国产成人精品免费视频大全五级| 国产乱码免费卡1卡二卡3卡| 最近高清中文字幕免费| 13小箩利洗澡无码视频网站免费| 新最免费影视大全在线播放| 国产精品亚洲二区在线| 亚洲s码欧洲m码吹潮| 亚洲私人无码综合久久网| 亚洲国产日产无码精品| 亚洲视频一区在线播放| 亚洲一区二区在线免费观看| 久久99国产亚洲精品观看| 中文字幕在线亚洲精品| 在线观看亚洲精品福利片| 久久亚洲精品无码播放| 国产亚洲成人在线播放va| 国产成人亚洲综合无码| 国产性爱在线观看亚洲黄色一级片| 久久久久亚洲AV无码专区网站 | 亚洲视频一区网站| 亚洲综合一区二区精品久久| 亚洲女人18毛片水真多| 亚洲午夜精品在线| 亚洲综合丁香婷婷六月香| 国产亚洲中文日本不卡二区 | 免费在线观看你懂的| 国产一区二区视频免费| 亚洲成?Ⅴ人在线观看无码|