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

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

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

    czmchen

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      17 隨筆 :: 0 文章 :: 24 評(píng)論 :: 0 Trackbacks

    置頂隨筆 #

    由于開(kāi)發(fā)的需要,要用到xfire,對(duì)于開(kāi)發(fā)我比較關(guān)心的是安全和速度!所以就找了xfire中的ws-security,利用它的安全證書(shū)和key,安全足夠了

    先到網(wǎng)上下載最新版的xfire,一般都去官方網(wǎng)站下載,了解下詳情!其官網(wǎng)為http://xfire.codehaus.org
    現(xiàn)在最新版為1.2.6,把xfire-all-1.2.6.jar xfire-distribution-1.2.6.zip下載

    準(zhǔn)備前,先看看ws-securitye的步驟,在http://xfire.codehaus.org/WS-Security里面可以看到,它提示我們installed Unlimited Strength Jurisdiction Policy Files,我就在http://java.sun.com/j2se/1.5.0/download.jsp里面下載兩個(gè)包,因?yàn)槲野惭b的是jdk1.6最新版,在http://java.sun.com/j2se/1.5.0/download.jsp最下面的Other Downloads的Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 5.0,點(diǎn)擊下載,下載下來(lái)后,按照里面的步驟,把這兩個(gè)jar放到
    Java/jre6/lib/security里面,修改java.security,把
    security.provider.6=com.sun.security.sasl.Provider改為
    security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
    其效果為
    security.provider.1=sun.security.provider.Sun
    security.provider.2=sun.security.rsa.SunRsaSign
    security.provider.3=com.sun.net.ssl.internal.ssl.Provider
    security.provider.4=com.sun.crypto.provider.SunJCE
    security.provider.5=sun.security.jgss.SunProvider
    security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
    #security.provider.6=com.sun.security.sasl.Provider
    security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
    security.provider.8=sun.security.smartcardio.SunPCSC
    security.provider.9=sun.security.mscapi.SunMSCAPI



    準(zhǔn)備工作做好后,解壓xfire-distribution-1.2.6.zip,然后你會(huì)看到xfire-1.2.6這個(gè)文件夾,進(jìn)去,你會(huì)看到有個(gè)examples文件夾,再進(jìn)去,你就發(fā)現(xiàn)很多demo啦,在這里就找到了ws-security的demo

    啟動(dòng)Myeclipse,看到里面的.classpath和.project文件,這個(gè)是eclipse的項(xiàng)目!用myeclipse打開(kāi),你發(fā)現(xiàn)都不正確,這些錯(cuò)誤我就不理!

    新建一個(gè)Web Progect項(xiàng)目,項(xiàng)目名隨你命名。設(shè)置下該項(xiàng)目,點(diǎn)擊該項(xiàng)目,右鍵,properties,找到Java Compiler,修改項(xiàng)目的jdk為1.5以上(里面用到的有注入)!解壓xfire-distribution-1.2.6.zip,進(jìn)入ws-security文件夾下,進(jìn)入src下,再進(jìn)入main的文件夾,把里面的文件全部都拷貝到你新建的項(xiàng)目的src下。點(diǎn)中該項(xiàng)目,右鍵,新建Source Folder,命名為test。后退,找到test的文件夾,把里面的文件全部拷貝到項(xiàng)目test的文件夾下。后退,再把web-inf里面的web.xml拷貝到項(xiàng)目里面,替換。最后在項(xiàng)目中加入jar,在xfire-1.2.6根文件夾下面有個(gè)lib,把這些lib全部放到項(xiàng)目的web-inf下的lib文件夾中,把xfire-all-1.2.6.jar也加入到項(xiàng)目中。整個(gè)項(xiàng)目的結(jié)構(gòu)為:



    生成key:在ws-security根目錄下有個(gè)keys的文件夾,雙擊進(jìn)去,運(yùn)行g(shù)enerateServerKey.bat,將默認(rèn)的key生成。里面的參數(shù)讓你們研究,很好用(上面我跳過(guò)不安裝j2se1.4就是因?yàn)橛羞@個(gè))!生成后,將serverKey.rsa和serverStore.jks扔到META-INF\xfire下,有個(gè)相同的那就替換,clientStore.jks同理

    修改服務(wù)器參數(shù):在org.codehaus.xfire.client下的BookClient.java,把變量SERVICE_NAMESPACE的值改為
    http://localhost:端口號(hào)/上下文路徑/BookService,下面的都同理。要修改到的文件META-INF\xfire下的services.xml。記得把http://xfire.codehaus.org修改為http://localhost:端口號(hào)/上下文路徑/BookService。因?yàn)閔ttp://xfire.codehaus.org不開(kāi)放那些接口


    修改完畢后,把項(xiàng)目部署到tomcat,啟動(dòng)服務(wù)器后,org.codehaus.xfire.client下運(yùn)行BookClientEnc.java
    。運(yùn)行后會(huì)報(bào)下面的錯(cuò)誤
    Running client : Encryption Client
    Looking 
    for isbn : 0123456789 .Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xml/utils/URI$MalformedURIException
        at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:
    407)
        at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:
    399)
        at org.apache.ws.security.message.WSSecEncrypt.encryptForInternalRef(WSSecEncrypt.java:
    306)
        at org.apache.ws.security.message.WSSecEncrypt.build(WSSecEncrypt.java:
    264)
        at org.apache.ws.security.action.EncryptionAction.execute(EncryptionAction.java:
    62)
        at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:
    192)
        at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:
    158)
        at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:
    131)
        at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:
    79)
        at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:
    114)
        at org.codehaus.xfire.client.Client.invoke(Client.java:
    336)
        at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:
    77)
        at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:
    57)
        at $Proxy0.findBook(Unknown Source)
        at org.codehaus.xfire.client.BookClient.executeClient(BookClient.java:
    63)
        at org.codehaus.xfire.client.BookClientEnc.main(BookClientEnc.java:
    23)
    Caused by: java.lang.ClassNotFoundException: org.apache.xml.utils.URI$MalformedURIException
        at java.net.URLClassLoader$
    1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
         
    16 more

    這是因?yàn)槟氵€沒(méi)把xalan.jar加入去,到http://www.apache.org/dyn/closer.cgi/xml/xalan-j 下載最新版
    ,現(xiàn)在最新去到2_7_1,找到xalan-j_2_7_1-bin.zip,把其下載后,添加xalan.jar到項(xiàng)目

    再運(yùn)行,如果出現(xiàn)下面的結(jié)果,那就正常啦
    Running client : Encryption Client
    Looking for isbn : 0123456789 ....Using XFire : Dan Diephouse


    我的做好的示例文件在http://www.tkk7.com/Files/czmchen/ws-security.rar可以下載,下載后要做的事情就是把jar按上面的方法加進(jìn)去,因?yàn)閖ar太大了,上傳不上!還有要改下tomcat的端口為8001,再部署項(xiàng)目

    posted @ 2010-01-15 09:51 陳周敏 閱讀(1574) | 評(píng)論 (0)編輯 收藏

    進(jìn)入weblogic后臺(tái)配置數(shù)據(jù)庫(kù)連接池。因?yàn)槲业捻?xiàng)目數(shù)據(jù)庫(kù)是ORACLE,那就以O(shè)racle的配置作為示例:

    我的示例weblogic是8.x,其他版本都同理,找到參數(shù)后即可

    進(jìn)入后臺(tái)后,單擊左邊的mydomain—>Services—>JDBC—>Connection Pools
    新建我就不說(shuō)了,在我的文章里面有weblogic的數(shù)據(jù)源連接create

    9.x的要解鎖,那就先解鎖。點(diǎn)擊你想設(shè)置的數(shù)據(jù)源的名稱進(jìn)去。進(jìn)去后點(diǎn)擊上面的菜單Connections

    看到參數(shù)設(shè)置了吧。

    Initial Capacity:100   (初始化容器的連接數(shù))
    Maximum Capacity:1000  (容器中最大的連接數(shù)1000,如果超過(guò)/還沒(méi)到1000就會(huì)報(bào)超出最大連接的錯(cuò)誤,原因你的Oracle安裝數(shù)據(jù)庫(kù)的時(shí)候其池沒(méi)設(shè)置大小,現(xiàn)在你也可以設(shè)置。設(shè)置方法:找到Oracle的init.ora文件這個(gè)文件一般在oracle/admin/數(shù)據(jù)庫(kù)SID/pfile里面。找到large_pool_size這一句,把這一句刪除,那就不受限制了。注意:沒(méi)受限制的情況下不要調(diào)這個(gè)參數(shù)太大了,35000就OK了,太大的時(shí)候數(shù)據(jù)庫(kù)會(huì)承受不起)
    Capacity Increment:15   (一次增加多少個(gè)connection)
    Statement Cache Size:50 (緩存大小)

    按下下面的Advanced Options "Show",設(shè)置詳細(xì)的配置
    下面是JNDI的自動(dòng)回收設(shè)置,比較重要,調(diào)幾個(gè)重要的參數(shù),其他的默認(rèn)
    Test Frequency:3600(測(cè)試頻率,這個(gè)會(huì)消耗資源。這個(gè)看你的項(xiàng)目需要,一般代碼寫(xiě)得比較好的可以設(shè)置長(zhǎng)點(diǎn)時(shí)間
    把下面三個(gè)都打上勾。通過(guò)測(cè)試,發(fā)現(xiàn)連接沒(méi)關(guān)的就會(huì)被回收(詳細(xì)說(shuō)明可以看下面的參數(shù)說(shuō)明)
    Test Reserved Connections
    Test Created Connections
    Test Released Connections

    Inactive Connection Timeout:60(無(wú)效連接超時(shí)!這個(gè)會(huì)在指定的時(shí)間內(nèi),回收無(wú)效連接)

    網(wǎng)上有些人說(shuō)設(shè)置這些參數(shù)后一定的時(shí)間會(huì)出現(xiàn)java.lang.OutOfMemoryError的錯(cuò)誤
    解決的方法就是調(diào)大JVM的內(nèi)存,在啟動(dòng)時(shí)對(duì)jvm設(shè)置內(nèi)存限度
    通過(guò)修改commom\bin\commEnv.cmd文件來(lái)增加內(nèi)存分配
    修改的部分如下:
    :bea
    if "%PRODUCTION_MODE%" == "true" goto bea_prod_mode
    set JAVA_VM=-jrockit
    set MEM_ARGS=-Xms768m -Xmx1024m
    set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
    goto continue
    :bea_prod_mode
    set JAVA_VM=-jrockit
    set MEM_ARGS=-Xms768m -Xmx1024m//這些看你內(nèi)存定1G的就設(shè)置=-Xms256m -Xmx512m
    goto continue

    :sun
    if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode
    set JAVA_VM=-client
    set MEM_ARGS=-Xms768m -Xmx1024m -XX:MaxPermSize=256m
    set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
    goto continue
    :sun_prod_mode
    set JAVA_VM=-server
    set MEM_ARGS=-Xms768m -Xmx1024m -XX:MaxPermSize=256m//這個(gè)就解決了java.lang.OutOfMemoryError的錯(cuò)誤
    goto continue
    將這里的內(nèi)存分配修改后見(jiàn)效。

    連接屬性參數(shù)說(shuō)明:

      * Initial Capacity:創(chuàng)建連接池時(shí)所創(chuàng)建的數(shù)據(jù)庫(kù)連接的數(shù)目。
      * Maximum Capacity: 連接池中連接的最大數(shù)目。
      * Capacity Increment: 連接池容量在最大容量限制范圍內(nèi)的增量。
      * LoginDelay: 在創(chuàng)建每個(gè)物理數(shù)據(jù)庫(kù)連接之前要延遲的秒數(shù)。
      * Allow Shrinking: 將該項(xiàng)設(shè)置為true時(shí),如果沒(méi)有使用額外的連接,則允許連接池把容量減小到InitialCapacity。
      * Shrink Frequency: 在減小連接池容量之前要等待的秒數(shù)。如果將Shrink Frequency設(shè)置為true,那么也必須將Allow Shrinking設(shè)置為true。
      * Test Frequency: 數(shù)據(jù)庫(kù)連接測(cè)試之間間隔的秒數(shù)。在每個(gè)Refresh Period時(shí)間間隔之后,如果設(shè)置了TestTableName,就會(huì)使用TestTableName測(cè)試未使用的數(shù)據(jù)庫(kù)連接。
      * Test Reserved Connections: 如果選擇了這個(gè)選項(xiàng),服務(wù)器會(huì)在把連接提供給客戶端之前對(duì)其進(jìn)行測(cè)試。
      * Test Created Connections: 如果選擇了這個(gè)選項(xiàng),就會(huì)在創(chuàng)建一個(gè)JDBC連接之后和在把它添加到JDBC連接池中的可用連接列表之前,對(duì)該JDBC連接進(jìn)行測(cè)試。
      * Test Released Connections: 如果選擇了這個(gè)選項(xiàng),服務(wù)器就會(huì)在把連接返回給連接池之前對(duì)其進(jìn)行測(cè)試。
      * Test Table Name: 用于JDBC連接測(cè)試的數(shù)據(jù)庫(kù)表名。如果指定了Test Frequency,并且選擇了Test Reserved Connections、Test Created Connections或Test Released Connections,則Table Name是必需的

    連接屬性參數(shù)說(shuō)明來(lái)源于網(wǎng)上,大家從你項(xiàng)目角度設(shè)置
    最后別忘記點(diǎn)最下面的APPLY按鈕
    posted @ 2010-01-08 17:22 陳周敏 閱讀(2372) | 評(píng)論 (0)編輯 收藏

    記錄dom的學(xué)習(xí)經(jīng)驗(yàn)。下次忘記的時(shí)候直接來(lái)拿

    <select id="typevalue" onChange="modifyType();">

    <option value="1" id="0">11</option>

    <option value="2" id="1">22</option>

    <option value="3" id="2">33</option>

    <option value="4" id="3">44</option>

    <option value="5" id="4">55</option>

    <option value="6" id="5">66</option>

    <option value="7" id="10">77</option>

    </select>



    獲取選中的option的text值
    var typevalue = document.getElementById("typevalue");
    var typevalueText = typevalue.options[typevalue.selectedIndex].text;

    獲取選中的option的ID值
    var typevalue = document.getElementById("typevalue");
    var typevalueId = typevalue.options[typevalue.selectedIndex].id;

    posted @ 2009-12-17 15:01 陳周敏 閱讀(874) | 評(píng)論 (0)編輯 收藏

    Tomcat是一個(gè)小巧玲瓏的好物,呵呵。一般開(kāi)發(fā)少不了它。
    Tomcat現(xiàn)在支持很多技術(shù),下面我把我的TOMCAT上配置的數(shù)據(jù)源經(jīng)驗(yàn)和大家分享

    配置前的準(zhǔn)備工作:先將你的連接數(shù)據(jù)庫(kù)的JAR COPY到服務(wù)器的LIB文件夾下,供服務(wù)器調(diào)用(如現(xiàn)在用的是TOMCAT,那就將該JAR COPY到TOMCAT下的LIB文件夾)

    打開(kāi)項(xiàng)目的META-INF文件夾下的context.xml的文件(沒(méi)有的新建一個(gè)context.xml文件)
    修改其中的配置,詳細(xì)的配置信息以下:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/TomcatDataSources" docBase="TomcatDataSources"
        debug="5" reloadable="true" crossContext="true">
            <Resource name="jdbc/czmds" auth="Container"
            type="javax.sql.DataSource" maxActive="100" maxIdle="30"
            maxWait="10000" username="root" password=""
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/czm?characterEncoding=utf-8"/>  
    </Context>

    說(shuō)明:context中的屬性path為你的項(xiàng)目的上下文路徑
          Resource中的屬性name為該數(shù)據(jù)源的別名,這個(gè)自己喜歡定義



    然后在web.xml下加上下面的配置
    <resource-ref>
            <description>DB Connection</description>
            <res-ref-name>jdbc/czmds</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
    </resource-ref>

    說(shuō)明:res-ref-name為你的數(shù)據(jù)源設(shè)定的別名

    最后一步:測(cè)試連接是否成功,記得在JSP頁(yè)面或Servlet上測(cè)試

    提示:數(shù)據(jù)源獲取連接的代碼以下:
    javax.naming.Context ctx = new javax.naming.InitialContext();
    javax.sql.DataSource ds = (javax.sql.DataSource) ctx
                        .lookup("java:/comp/env/jdbc/czmds");
    java.sql.Connection conn = ds.getConnection();  
    說(shuō)明:lookup是查找數(shù)據(jù)源的別名,這個(gè)就直接在java:/comp/env/后加別名,以上


    說(shuō)到最后,一定要記得關(guān)連接

    posted @ 2009-11-10 16:22 陳周敏 閱讀(1865) | 評(píng)論 (1)編輯 收藏

    連接池是負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而再不是重新建立一個(gè);釋放空閑時(shí)間超過(guò)最大空閑時(shí)間的數(shù)據(jù)庫(kù)連接來(lái)避免因?yàn)闆](méi)有釋放數(shù)據(jù)庫(kù)連接而引起的數(shù)據(jù)庫(kù)連接遺漏。這項(xiàng)技術(shù)能明顯提高對(duì)數(shù)據(jù)庫(kù)操作的性能


    所以一個(gè)項(xiàng)目訪問(wèn)數(shù)據(jù)庫(kù)比較頻繁的時(shí)候,就要用到連接池,一般連接池本人都覺(jué)得proxool比較好(這個(gè)網(wǎng)上的都是這樣說(shuō),呵呵),我以前一直都用C3P0連接池,發(fā)覺(jué)速度還不錯(cuò),不過(guò)不大穩(wěn)定!
    不說(shuō)那么多,淺談下我的proxool的經(jīng)驗(yàn)

    準(zhǔn)備前的工作:
    到proxool官網(wǎng)http://proxool.sourceforge.net/上下載JAR包和文檔
    然后解壓,把里面的proxool-0.9.1.jar和proxool-cglib.jar放到你的服務(wù)器的lib下面(好像我用的是TOMCAT,就放到TOMCAT的lib里面,供TOMCAT調(diào)用)

    先在WEB-INF下建立以個(gè)proxool.xml的文件
    詳細(xì)的配置以下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
        Document   : proxool.xml
        Created on : 2009年11月9日, 下午3:15
        Author     : Administrator
        Description:
            Purpose of the document follows.
    -->
    <something-else-entirely>
        <proxool>
            <alias>mypool</alias>

            <driver-url>jdbc:mysql://localhost/czm?characterEncoding=utf-8</driver-url>
            <driver-class>com.mysql.jdbc.Driver</driver-class>

            <driver-properties>
                <property name="user" value="root"/>
                <property name="password" value=""/>
            </driver-properties>

            <!-- proxool自動(dòng)偵察各個(gè)連接狀態(tài)的時(shí)間間隔(毫秒),偵察到空閑的連接就馬上回收,超時(shí)的銷毀-->
            <house-keeping-sleep-time>300000</house-keeping-sleep-time>

            <!--最大的等待請(qǐng)求數(shù),即因沒(méi)有空閑連接可以分配而在隊(duì)列中等候的最大請(qǐng)求數(shù),超過(guò)這個(gè)請(qǐng)求數(shù)的用戶連接就不會(huì)被接受-->
            <proxool.simultaneous-build-throttle>200</proxool.simultaneous-build-throttle>

            <!-- maximum-new-connections>50</maximum-new-connections-->

             <!-- 最少保持的空閑連接數(shù)-->
            <prototype-count>5</prototype-count>
            <!-- 允許最大連接數(shù),超過(guò)了這個(gè)連接,再有請(qǐng)求時(shí),就排在隊(duì)列中等候,最大的等待請(qǐng)求數(shù)由maximum-new-connections決定-->
            <maximum-connection-count>100</maximum-connection-count>

             <!-- 最小連接數(shù)-->
            <minimum-connection-count>25</minimum-connection-count>      

            <maximum-active-time>300000</maximum-active-time>
            <maximum-connection-lifetime>3600000</maximum-connection-lifetime>


            <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>

        </proxool>
    </something-else-entirely>



    接著在web.xml下做個(gè)插件
    詳細(xì)配置以下:

    <servlet>
            <servlet-name>ServletConfigurator</servlet-name>
            <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
            <init-param>
                <param-name>xmlFile</param-name>
                <param-value>WEB-INF/proxool.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>Admin</servlet-name>
            <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Admin</servlet-name>
            <url-pattern>/proxool</url-pattern><!--這個(gè)設(shè)置是你的項(xiàng)目的上下文路徑-->
        </servlet-mapping>

    web.xml配置完后,剩下的就是寫(xiě)個(gè)測(cè)試連接類
    新建一個(gè)jsp頁(yè)面,頁(yè)面內(nèi)容以下:

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <%
            java.sql.Connection conn = java.sql.DriverManager.getConnection("proxool.myself");
            System.out.println("conn:" + conn);
            out.print("conn:" + conn);
            conn.close();
            %>
        </body>
    </html>


    OK.運(yùn)行該頁(yè)面看看是否成功?
    以前我就是在類中測(cè)試,發(fā)覺(jué)它連接不上,報(bào)
    java.sql.SQLException: No suitable driver found for proxool.myself
    的錯(cuò)誤。
    所以一定要用JSP或servlet來(lái)測(cè)試,因?yàn)樗{(diào)用到服務(wù)器


    posted @ 2009-11-10 15:47 陳周敏 閱讀(2984) | 評(píng)論 (1)編輯 收藏

    我對(duì)異常拋出的情況作啦一個(gè)總結(jié),下面的是我在做項(xiàng)目的時(shí)候,處理拋出來(lái)的經(jīng)典異常。

    嚴(yán)重: action: null
    java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
            at org.apache.struts.util.RequestUtils.applicationClass(RequestUtils.java:124)
            at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:172)
            at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:147)
            at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:842)
            at org.apache.struts.action.ActionServlet.init(ActionServlet.java:359)
            at javax.servlet.GenericServlet.init(GenericServlet.java:212)
            at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
            at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
            at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
            at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
            at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627)
            at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:511)
            at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1231)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
            at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
            at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
            at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1471)
            at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:824)
            at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:350)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
            at java.lang.Thread.run(Thread.java:619)
    2009-6-13 19:47:25 org.apache.catalina.core.ApplicationContext log


    這個(gè)異常我看不少人都遇到吧,看著這個(gè)異常,你覺(jué)得是不是很郁悶,剛開(kāi)始看到這個(gè)action: null就想:“是Struts里出啦問(wèn)題,肯定是參數(shù)不對(duì)應(yīng)ActionForm造成的吧!”然后就拼命地在頁(yè)面和ActionForm來(lái)作對(duì)照,對(duì)來(lái)對(duì)去都是一樣啊!怎么還是有錯(cuò)呢?剛剛開(kāi)始我也是這樣想的,可是做啦一大堆的無(wú)用功后,就發(fā)現(xiàn)我這種想法是錯(cuò)的!每次部署后還是這個(gè)錯(cuò),你再細(xì)心地看下面的那個(gè)錯(cuò)誤“java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn”,這個(gè)org.springframework.web.struts.ContextLoaderPlugIn這個(gè)東西是不是很熟悉呢?仔細(xì)找下看,發(fā)現(xiàn)你的Struts-config.xml里面是不是也有這樣一段話:
        <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
            <set-property property="contextConfigLocation"
       value="/WEB-INF/applicationContext.xml"/>
        </plug-in>
    問(wèn)題就出在這里啦!不過(guò)有些人找到問(wèn)題所在后,也不會(huì)認(rèn)為這里有問(wèn)題,就算這里有問(wèn)題,最多就是Spring的配置文件不對(duì)應(yīng)!然后就去修改一下配置文件,可是還是于是無(wú)補(bǔ)!

    我經(jīng)過(guò)一段時(shí)間的思考后,就想啦一下,這個(gè)既然是Spring的配置文件,那一定和它的插件有關(guān),是不是Spring和Struts整合不好呢?然后就查了一下庫(kù)文件,發(fā)現(xiàn)Spring庫(kù)文件導(dǎo)入的是很少!上網(wǎng)查下資料,發(fā)現(xiàn)對(duì)于這個(gè)問(wèn)題的很少有答案,有人提出的可是找不到問(wèn)題所在!我就去啦Spring的官網(wǎng)下載它的庫(kù)文件和一些相應(yīng)的資料來(lái),在找資料的過(guò)程中,我也下載啦一個(gè)叫spring-struts.jar的庫(kù)文件,這個(gè)文件看起來(lái)好象是Spring整合Struts的庫(kù)文件!有啦這幾個(gè)東西,我就開(kāi)始開(kāi)工測(cè)試
    我就先按我的猜想,先導(dǎo)入spring-struts.jar這文件,部署后,發(fā)現(xiàn)沒(méi)錯(cuò)誤,運(yùn)行也沒(méi)錯(cuò)!果然證實(shí)我的想法沒(méi)錯(cuò)
    然后我還把下載來(lái)的Spring官網(wǎng)的最新的庫(kù)文件,發(fā)現(xiàn)找不到spring-struts.jar這個(gè)庫(kù)文件。然后我一個(gè)個(gè)測(cè)試后,原來(lái)這個(gè)庫(kù)文件是集成在spring-web.jar里面啦!
    我把spring-struts.jar去掉后,導(dǎo)入Spring官方的最新的相關(guān)庫(kù)文件后(不能全部導(dǎo),全部導(dǎo)入也會(huì)有錯(cuò)誤,用到的才能導(dǎo)!),程序也沒(méi)發(fā)生任何錯(cuò)誤

    以下的是我用到的庫(kù)文件,本人測(cè)試過(guò)沒(méi)問(wèn)題
    http://www.tkk7.com/Files/czmchen/ssh中Spring的庫(kù)文件.rar
    http://www.tkk7.com/Files/czmchen/spring-struts.jar.zip
    posted @ 2009-06-13 20:20 陳周敏 閱讀(1553) | 評(píng)論 (6)編輯 收藏

    僅列出標(biāo)題  下一頁(yè)
    主站蜘蛛池模板: 韩国免费A级毛片久久| 青青草免费在线视频| 日本不卡在线观看免费v| 亚洲va中文字幕无码久久 | 久久亚洲国产成人亚| 青青青亚洲精品国产| 国产人成免费视频网站| 亚洲人精品午夜射精日韩| 亚洲AV日韩AV一区二区三曲| 8090在线观看免费观看| 337p日本欧洲亚洲大胆裸体艺术| 久久久久亚洲精品无码网址色欲| 人与禽交免费网站视频| 亚洲VA中文字幕不卡无码| 日韩毛片一区视频免费| 成年私人影院免费视频网站| 亚洲视频免费播放| a级毛片免费完整视频| 亚洲AV无码成H人在线观看| 亚洲熟女乱色一区二区三区| 97在线视频免费播放| 国精无码欧精品亚洲一区| 日本一区二区三区免费高清在线 | 亚洲色欲久久久综合网| 国产精品成人亚洲| 毛片免费全部免费观看| 亚洲国产成人在线视频| 三年片在线观看免费大全电影 | 亚洲美女aⅴ久久久91| a级毛片视频免费观看| 亚洲真人日本在线| 国产精品观看在线亚洲人成网| 免费黄网在线观看| 亚洲人成7777影视在线观看| 中文字幕视频免费| 无码专区—VA亚洲V天堂| 嫩草在线视频www免费观看| 亚洲精品午夜无码专区| 国产日韩久久免费影院| 中文字幕久久亚洲一区| 免费无码专区毛片高潮喷水|