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

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

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

    2014年7月16日

    Struts2學習

    幾年前學習了一陣子Struts2,也開發了些小項目,后來工作變動,幾年沒動技術,這兩天又想撿起來,發現一些配置有了變化,重新學習,記錄些內容,供自己查詢。

    環境沒敢用最新的,MyEclipse用的是8.5的版本,Tomcat最終選擇了6,JDK也是用的7,Struts2的版本2.3.16.3。通常的配置沒什么要記錄的,主要記錄下出問題的地方:
    1、Tomcat
    從MyEclipse啟動Tomcat一直報錯,后來下載了一個tcnative-1.dll文件才解決,版本要求比較嚴格,對于Tomcat6.0.41而言,這個動態鏈接庫版本要求是1.1.30,1.1.3都不行,不知道有什么區別,將文件拷貝到jre/bin下即可。
    2、web.xml文件內容
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app id="WebApp_9" 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">
     3 
     4     <display-name>Struts Test</display-name>
     5 
     6     <filter>
     7         <filter-name>struts2</filter-name>
     8         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     9     </filter>
    10 
    11     <filter-mapping>
    12         <filter-name>struts2</filter-name>
    13         <url-pattern>/*</url-pattern>
    14     </filter-mapping>
    15 
    16     <welcome-file-list>
    17         <welcome-file>index.html</welcome-file>
    18     </welcome-file-list>
    19 
    20 </web-app>
    21 
    3、struts.xml文件內容
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 
     6 <struts>
     7 
     8    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
     9     <constant name="struts.devMode" value="true" />
    10 
    11     <package name="default" namespace="/" extends="struts-default">
    12 
    13         <default-action-ref name="index" />
    14 
    15         <global-results>
    16             <result name="error">/error.jsp</result>
    17         </global-results>
    18 
    19         <global-exception-mappings>
    20             <exception-mapping exception="java.lang.Exception" result="error"/>
    21         </global-exception-mappings>
    22         
    23         <action name="action名" class="java包名及類名">
    24         <result name="success">/調用的jsp頁面文件p</result>
    25         </action>
    26     </package>
    27 
    28     <include file="example.xml"/>
    29 
    30     <!-- Add packages here -->
    31 
    32 </struts>
    33 
    4、調用時發現action名定義了大小寫后,地址欄也要輸入相應的大小寫,否則報錯。這個問題困擾了好久。。。。。


    By SeeSea

    posted @ 2014-07-16 10:47 SeesSea 閱讀(196) | 評論 (0)編輯 收藏

    2009年3月18日

    在ubuntu 8.04下安裝Oracle 11g方法

    項目要求使用Oracle,據說安裝方式比較繁復,網上搜到兩篇文章,先備著,準備日后按圖索驥。
    第一篇
    地址:http://forum.ubuntu.org.cn/viewtopic.php?f=44&t=136860

    在ubuntu 8.04下安裝Oracle 11g
    本文是參考了:http://hi.baidu.com/wuxicn/blog/item/0cfdc24ac5ae372609f7ef94.html"文章,是翻譯下面的這篇文章的。我主要參考的是中文的,我只是在實際操作中做了一點小小的修改,在此表示感謝!紫色為我的注釋。
    原文是英文,地址是:
    http://www.pythian.com/blogs/968/instal ... ardy-heron,(轉載注明出處,謝謝??! )
    共9步:

    Step 1
    下載和安裝 Ubuntu 8.04 Hardy Heron (x86-32位) 版。略。

    Step 2
    下載Oracle 11g: Download Oracle 11g for Linux (x86, 32-bit).
    現不要急著解壓,一會我會告訴你解壓在哪的。

    Step 3
    修改X server 的默認設置,點菜單的System -> Administration -> Login Window(系統->管理->登錄窗口),選擇“Security(安全)”選項卡,取消“Deny TCP connections to the Xserver(拒絕TCP連接到X服務器)”的勾,重啟Xserver(或者重啟系統)。然后在終端輸入:
    user@hardy:~$ xhost +127.0.0.1
    127.0.0.1 being added to access control list
    Step 4
    打開終端,轉換為超級用戶:(注意,這里用sudo su -而不是sudo -s是有原因的:sudo su - 將用戶轉換為超級用戶,并新起一個會話(空的會話),而不是像sudo -s那樣將當前會話傳遞個新的超級用戶,減少環境變量可能造成的影響和危害。
    user@hardy:~$ sudo su -
    [sudo] password for user:
    root@hardy:~# apt-get update
    ...
    root@hardy:~# apt-get dist-upgrade
    ...
    root@hardy:~# reboot
    Step 5
    用apt安裝一些必要的工具:

    user@hardy:~$ sudo su -
    [sudo] password for user:
    root@hardy:~# apt-get install build-essential libaio1 gawk ksh libmotif3 alien libtool lsb-rpm
    ...
    root@hardy:~#
    Step 6
    在裝完那些工具以后,我們需要做的就是修改一些Ubuntu的/bin/sh的默認連接,千萬不要略過這一步,否則安裝的時候會出現很多錯誤。
    root@hardy:~# cd /bin
    root@hardy:/bin# ls -l /bin/sh
    lrwxrwxrwx 1 root root 4 2008-04-28 19:59 /bin/sh -> dash
    root@hardy:/bin# ln -sf bash /bin/sh
    root@hardy:/bin# ls -l /bin/sh
    lrwxrwxrwx 1 root root 4 2008-05-01 22:51 /bin/sh -> bash
    如果你想知道為什么Ubuntu用dash作為默認的shell,看這個:a detailed explanation of why dash is the default system shell 。
    Step 7
    增加用戶和組,并修改一些配置。這一步很重要!如果不是很有把握,不要隨便改。(為了便于解釋,增加了行號):
    01 root@hardy:/bin# cd
    02 root@hardy:~# pwd
    /root
    04 root@hardy:~# addgroup oinstall
    Adding group `oinstall' (GID 1001) ...
    Done.
    07 root@hardy:~# addgroup dba
    Adding group `dba' (GID 1002) ...
    Done.
    10 root@hardy:~# addgroup nobody
    Adding group `nobody' (GID 1003) ...
    Done.
    13 root@hardy:~# usermod -g nobody nobody
    14 root@hardy:~# useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oracle
    15 root@hardy:~# mkdir /home/oracle
    16 root@hardy:~# chown -R oracle:dba /home/oracle
    17 root@hardy:~# ln -s /usr/bin/awk /bin/awk
    18 root@hardy:~# ln -s /usr/bin/rpm /bin/rpm
    19 root@hardy:~# ln -s /usr/bin/basename /bin/basename
    20 root@hardy:~# mkdir /etc/rc.d
    21 root@hardy:~# for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done
    22 root@hardy:~# mkdir -p /u01/app/oracle
    23 root@hardy:~# chown -R oracle:dba /u01
    24 root@hardy:~#
    Lines 04-12: 增加我們需要的用戶和組
    Line 13: 讓nobody用戶的組變為nobody,這樣Oracle的安裝程序不會出問題。Ubuntu默認nobody的組是nogroup。
    Lines 14-18: 創建一個oracle用戶。注意,oracle用戶的HOME目錄不要與ORACLE_HOME相同。
    Lines 19-23: 創建一些Oracle安裝程序需要的工具的連接。因為Oracle安裝程序是為Red Hat準備的,所以有些工具的位置和Ubuntu不一樣。
    Finally, on lines 24-25 創建ORACLE_BASE目錄。
    Step 8
    修改一些系統默認值。這些修改將會增加系統文件描述符的數量、增加共享內存大小和修改一些網絡子系統參數。這些修改是否會對你的系統帶來影響我就不得而知了。將下面這些增加到/etc/sysctl.conf文件的末尾:
    fs.file-max = 65535
    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 1024 65535
    net.core.rmem_default = 1048576
    net.core.rmem_max = 1048576
    net.core.wmem_default = 262144
    net.core.wmem_max = 262144
    再增加下面這些到/etc/security/limits.conf文件末尾:

    oracle soft nproc 2047
    oracle hard nproc 16383
    oracle soft nofile 1023
    oracle hard nofile 65535
    為了強制使用剛才我們增加的東西,我們再增加下面這些到/etc/pam.d/login文件末尾:

    session required /lib/security/pam_limits.so
    session required pam_limits.so
    然后通過命令:sysctl -p 讓剛才增加的東西生效:

    root@hardy:~# sysctl -p
    kernel.printk = 4 4 1 7
    kernel.maps_protect = 1
    fs.inotify.max_user_watches = 524288
    vm.mmap_min_addr = 65536
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.all.rp_filter = 1
    fs.file-max = 65535
    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 1024 65535
    net.core.rmem_default = 1048576
    net.core.rmem_max = 1048576
    net.core.wmem_default = 262144
    net.core.wmem_max = 262144
    root@hardy:~#
    Step 9
    現在我們將剛才下載的oracle11g的安裝包解壓到/home/oracle/install/目錄下。然后進入目錄,設置DISPLAY參數,開始安裝:

    root@hardy:~# cd /home/oracle
    root@hardy:/home/oracle# chown -R oracle:dba install

    用oracle用戶登陸,(不然會出安裝界面出不來)
    oracle@hardy:~$ export DISPLAY=127.0.0.1:0.0
    oracle@hardy:~$ pwd
    /home/oracle
    oracle@hardy:~$ ls -l
    total 4
    drwxr-xr-x 6 oracle dba 4096 2007-09-18 18:50 install
    oracle@hardy:~$ cd install
    oracle@hardy:~/install$ ls -l
    total 28
    drwxr-xr-x 11 oracle dba 4096 2007-08-06 16:02 doc
    drwxr-xr-x 5 oracle dba 4096 2007-08-03 13:28 install
    drwxr-xr-x 2 oracle dba 4096 2007-09-18 18:52 response
    -rwxr-xr-x 1 oracle dba 2911 2007-08-03 13:28 runInstaller
    drwxr-xr-x 14 oracle dba 4096 2007-08-03 13:27 stage
    -rw-r--r-- 1 oracle dba 4835 2007-08-06 18:19 welcome.html
    oracle@hardy:~/install$ ./runInstaller -ignoreSysPrereqs
    輸入完上面命令后,就進入了Oracle 的同一安裝程序了(OUI),不要急,繼續按照本文一步一步的通過安裝:
    注意:OUI安裝完后,并不是真正完全安裝完成,還需要就行最后的收尾工作(在最后有),而且這是必須做的工作!


    點(Next)下一步。


    修改“Specify Operating System group name:”為:"dba",然后點"Next".


    按照上圖設置,點下一步。


    選擇"Enterprise Edition",然后下一步。


    安圖設置,下一步。


    繼續下一步。


    等待系統檢查,不要擔心有錯誤和警告。


    將檢查到的所有非“Succeeded”的都打上勾,下一步。


    ,下一步。在這一步選"Create a Database"來安裝數據庫。([color=red]原文是通過netca建立監聽,dbca建庫,我第一次也是這樣做的,dbca建庫時會報錯,因為ubutunbu 不支持RPM包)。[/color]

    將所有組都設為:dba,下一步。

    現在可以點“Install”了:)時間比較長。


    到了這一步不要記著點“OK”,需要做下面操作:(另起一個終端,用sudo su - 轉為超級用戶)

    root@hardy:~# /u01/app/oraInventory/orainstRoot.sh
    Changing permissions of /u01/app/oraInventory to 770.
    Changing groupname of /u01/app/oraInventory to dba.
    The execution of the script is complete
    root@hardy:~# /u01/app/oracle/product/11.1.0/db_1/root.sh
    Running Oracle 11g root.sh script...

    The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME= /u01/app/oracle/product/11.1.0/db_1

    Enter the full pathname of the local bin directory: [/usr/local/bin]:
    Copying dbhome to /usr/local/bin ...
    Copying oraenv to /usr/local/bin ...
    Copying coraenv to /usr/local/bin ...

    Creating /etc/oratab file...
    Entries will be added to the /etc/oratab file as needed by
    Database Configuration Assistant when a database is created
    Finished running generic part of root.sh script.
    Now product-specific root actions will be performed.
    Finished product-specific root actions.
    root@hardy:~#
    好了,這個完成后可以點“OK”了。
    安后點“Exit”退出OUI,現在可以祝賀你,OUI安裝完成了:)但是還是不要急,記住咱們還有收尾工作需要做。
    在/etc/profile文件中加入下面幾句:

    export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
    export PATH=$PATH:/u01/app/oracle/product/11.1.0/db_1/bin
    創建一個Oracle 11g數據庫的啟動腳本,名字可以叫做:oracledb,在/u01/app/oracle/product/11.1.0/db_1/bin下建立文件:oracledb,內容:

    #!/bin/bash
    #
    # /etc/init.d/oracledb
    #
    # Run-level Startup script for the Oracle Listener and Instances
    # It relies on the information on /etc/oratab

    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
    export ORACLE_OWNR=oracle
    export PATH=$PATH:$ORACLE_HOME/bin

    if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
    then
    echo "Oracle startup: cannot start"
    exit 1
    fi

    case "$1" in
    start)
    # Oracle listener and instance startup
    echo -n "Starting Oracle: "
    su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl start"
    su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
    touch /var/lock/oracle
    echo "OK"
    ;;
    stop)
    # Oracle listener and instance shutdown
    echo -n "Shutdown Oracle: "
    su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl stop"
    su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
    rm -f /var/lock/oracle
    echo "OK"
    ;;
    reload|restart)
    $0 stop
    $0 start
    ;;
    *)
    echo "Usage: `basename $0` start|stop|restart|reload"
    exit 1
    esac

    exit 0
    修改腳本為可執行的:

    root@hardy:~# chmod a+x /u01/app/oracle/product/11.1.0/db_1/bin/oracledb
    如果你希望開機自動啟動Oracle 11g數據庫,那么就作下面的工作:

    root@hardy:~# ln -s /u01/app/oracle/product/11.1.0/db_1/bin/oracledb /etc/init.d/oracledb
    root@hardy:~# sudo sysv-rc-conf --level 2345 oracledb on

    如果沒有sysv-rc-conf命令,就apt-get一個。
    最后,增加你自己的用戶名到dba組:

    root@hardy:~# usermod -G dba -a user
    好了,至此,Oracle 11g就安裝完了。重新登錄后,你就可以使用oracle的命令了。
    (ORACLE_SID=orcl 是你安裝時候設置的值)

    oracle@hardy:~$ export ORACLE_SID=orcl
    oracle@hardy:~$ sqlplus '/as sysdba'

    SQL*Plus: Release 11.1.0.6.0 - Production on Mon May 5 02:39:27 2008

    Copyright (c) 1982, 2007, Oracle. All rights reserved.

    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options

    SQL>connect /as sysdba
    Connected to an idle instance.

    SQL>startup 啟動數據庫命令。
    .
    ORACLE instance started.



    Total System Global Area 418484224 bytes

    Fixed Size 1300324 bytes

    Variable Size 281020572 bytes

    Database Buffers 130023424 bytes

    Redo Buffers 6139904 bytes

    Database mounted.

    Database opened.

    oracle@hardy:~$ export ORACLE_SID=orcl
    oracle@hardy:~$ emctl start dbconsole 啟動EM,地址為https://yourip:1158/em/console.這樣你就可以通過IE登陸了。不過界面為亂碼。呵呵?。〗鉀Q方法自己在網上找吧??!

    如果你看到了上面的結果,證明你的oracle安裝成功了。

    第二篇
    地址:http://www.linuxidc.com/Linux/2008-06/13855.htm

    花了半天時間,在Ubuntu 8.04 LTS上順利安裝Oracle 11G.下面說說大概的步驟.

    1.確保安裝了以下程序:

    sudo apt-get install build-essential libaio1 gawk ksh libmotif3 alien libtool lsb-rpm

    2.

    cd /bin
    ln -sf bash /bin/sh

     

    3.增加用戶和組

    addgroup oinstall
    addgroup dba
    addgroup nobody
    useradd -g oinstall -G dba -p passwd -d /home/oracle -s /bin/bash oracle
    usermod -g nobody nobody

    4.
    mkdir /home/oracle
    chown -R oracle:dba /home/oracle

    ln -s /usr/bin/awk /bin/awk
    ln -s /usr/bin/rpm /bin/rpm
    ln -s /usr/bin/basename /bin/basename

    5.
    mkdir /etc/rc.d
    for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done

    mkdir -p /opt/ora11
    chown -R oracle:dba /opt

    6.編輯/etc/sysctl.conf,增加以下內容:

    fs.file-max = 65535
    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 1024 65535
    net.core.rmem_default = 1048576
    net.core.rmem_max = 1048576
    net.core.wmem_default = 262144
    net.core.wmem_max = 262144

    7.編輯/etc/security/limits.conf,增加以下內容:

    oracle soft nproc 2047
    oracle hard nproc 16383
    oracle soft nofile 1023
    oracle hard nofile 65535

    8.編輯/etc/pam.d/login,增加以下內容:

    session required /lib/security/pam_limits.so
    session required pam_limits.so

    9.執行:

    sysctl -p

    10.

    su - oracle

    以上命令需以root用戶執行,接下來切換至oracle用戶.

    11.切換至安裝目錄,開始安裝.我選擇了英語作為安裝時顯示的語言.

    export LANG=en_CN
    ./runInstaller

    12.安裝過程中提示運行以下兩個腳本:

    orainstRoot.sh
    root.sh

    12.安裝過程中檢測到系統未裝有GLIBC環境,忽略后,未發現對安裝和運行有多大影響.

    13.切記,安裝時選擇自定義,并且選擇數據庫的字符集為 ZHS16GBK!

    因為忘記了這個選項,我只好刪掉數據庫,重新建了一個,浪費了半個小時的時間.

    PS.ORACLE 11g好像不支持更改數據庫的字符集了...或是我沒有找到正確的方法

    14.安裝完成后,數據庫的連接和查詢異常之慢,GOOGLE之,然后嘗試著把網絡的DNS服務器全給刪了,解決.

    15.兩個常用的工具:dbca和netca.



     

    posted @ 2009-03-18 10:52 SeesSea 閱讀(539) | 評論 (0)編輯 收藏

    2008年8月12日

    Struts2 action 的 ;jsessionid=xxx 使找不到頁面 Bug 的解決 [轉帖]

         摘要: 原文地址 自己留個地址,遇到這個問題可以考慮使用。不過要重新編譯struts2的jar包確實比較。。。 剛剛又找到一個解決辦法: 在用Struts的時候發現這樣一個問題,不管我們的程序中是否創建了一個新的session,從頁面提交表單到action類,再跳轉到頁面的時候url中總是出現了;jsessionid這樣的一長串內容,這是由于新建的session導致容器產生的。 經過深入研究s...  閱讀全文

    posted @ 2008-08-12 10:40 SeesSea 閱讀(3782) | 評論 (0)編輯 收藏

    2008年8月6日

    Struts2設置

    這幾天總有其他事情在忙,現在有一點點時間了,嘗試學習Struts2,灑家屬于超級新人,一步一步記錄吧。
    1、下載Struts2的jar包。下載地址:
    http://struts.apache.org/2.0.9/index.html
    2、解壓縮必要文件到項目中WebRoot\WEB-INF\lib下。灑家最開始引用的為:
    commons-logging-1.0.4.jar
    ognl-2.6.11.jar
    xwork-2.0.4.jar
    freemarker-2.3.8.jar
    struts2-core-2.0.11.1.jar
    3、修改項目中WebRoot\WEB-INF\web.xml文檔,增加如下內容
    <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> 
    4、在項目中WebRoot/WEB-INF/classes下建立struts.xml文件。如果在MyEclipse中,可以直接建立在項目的src目錄中,MyEclipse將自動將其拷貝到發布目錄的相關位置。文件內容如下:
    <?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>
        
    <package name="struts2" extends="struts-default">
        
    <!--
        此處加入不同的action
        
    -->
        
    </package>
        
    </struts>
       
    5、建立jsp文件
    如果使用struts的標簽,則需要在jsp文件的第一行后插入:
    <%@ taglib prefix="s" uri="/struts-tags" %>
    暫時有事,回頭補充。

    posted @ 2008-08-06 16:27 SeesSea 閱讀(255) | 評論 (0)編輯 收藏

    2008年8月1日

    Ubuntu下的tomcat啟動

        上一個項目由于奧運的關系不能調試,只能先放下了。新的任務是一個b/s項目,徹底陌生的領域。以前做過的的項目全部都是C#.net下的東東。這次用jsp。又一次痛苦的學習歷程。
        還是喜歡ubuntu下的調試環境,所以還想選擇在這個下面開發。
        先在原有eclipse上安裝了MyEclipse,這次比較順利,記得上次安裝比較費勁,總是啟動不了,或許是因為這臺機器是inter的CPU緣故?不得而知。
        安裝TomCat遇到一些問題,主要是TomCat總是隨系統啟動,每次開機都需要手動關閉服務,比較麻煩。由于對ubuntu不熟悉,找了下方法,感覺比較好的方法如下:
    安裝sysv-rc-conf
    方法:
    sudo apt-get install sysv-rc-conf
    sudo sysv-rc-conf

    這個工具可以調整啟動項目,比較方便。


    posted @ 2008-08-01 11:27 SeesSea 閱讀(2317) | 評論 (0)編輯 收藏

    2008年7月24日

    Eclipse發布程序

    辛辛苦苦在Eclipse里面寫好東西,不會發布,網絡上搜到的大多都是關于MyEclipse發布web方式。不過也難怪人家不寫,因為是在比較簡單。只要直接導出Jar文件就可以了,是在沒什么可以寫的,都怪灑家太笨了。
    不過導出后遇到一些問題,就是第三方jar文件錯誤,這個找了一下,同樣在BlogJava上有人發表了方法,他推薦的是第一種方法,灑家用的是第二種。原文見http://www.tkk7.com/mimi-van/archive/2007/11/28/163597.html。
    為了自己閱讀方便,也粘貼一份吧。失敬,失敬!

    我存檔的一篇java資料,里面對 -jar 情況下的classpath 有了比較詳細的闡述。

    當用java -jar yourJarExe.jar來運行一個經過打包的應用程序的時候,你會發現如何設置-classpath參數應用程序都找不到相應的第三方類,報 ClassNotFound錯誤。實際上這是由于當使用-jar參數運行的時候,java VM會屏蔽所有的外部classpath,而只以本身yourJarExe.jar的內部class作為類的尋找范圍。

    **解決方案**

    一 BootStrap class擴展方案

    Java 命令行提供了如何擴展bootStrap 級別class的簡單方法.
    -Xbootclasspath:     完全取代基本核心的Java class 搜索路徑.
                                       不常用,否則要重新寫所有Java 核心class
    -Xbootclasspath/a: 后綴在核心class搜索路徑后面.常用!!
    -Xbootclasspath/p: 前綴在核心class搜索路徑前面.不常用,避免
                                       引起不必要的沖突.

    語法如下:
     (分隔符與classpath參數類似,unix使用:號,windows使用;號,這里以unix為例)
     java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar

    二 extend class 擴展方案

    Java exten class 存放在{Java_home}"jre"lib"ext目錄下.當調用Java時,對擴展class路徑的搜索是自動的.總會搜索的.這樣,解決的方案就很簡單了,將所有要使用的第三方的jar包都復制到ext 目錄下.

    三 User class擴展方案

    當使用-jar執行可執行Jar包時,JVM將Jar包所在目錄設置為codebase目錄,所有的class搜索都在這個目錄下開始.所以如果使用了其他第三方的jar包,一個比較可以接受的可配置方案,就是利用jar包的Manifest擴展機制.
    步驟如下:

     1.將需要的第三方的jar包,復制在同可執行jar所在的目錄或某個子目錄下. 比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包復制到/usrhome目錄下或/usrhome/lib 等類似的子目錄下.

     2.修改Manifest 文件

     在Manifest.mf文件里加入如下行

     Class-Path:classes12.jar lib/thirdlib.jar

     Class-Path 是可執行jar包運行依賴的關鍵詞.詳細內容可以參考 http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html 。 要注意的是 Class-Path 只是作為你本地機器的CLASSPATH環境變量的一個縮寫,也就是說用這個前綴表示在你的jar包執行機器上所有的CLASSPATH目錄下尋找相應的 第三方類/類庫。你并不能通過 Class-Path 來加載位于你本身的jar包里面(或者網絡上)的jar文件。因為從理論上來講,你的jar發布包不應該再去包含其他的第三方類庫(而應該通過使用說明來 提醒用戶去獲取相應的支持類庫)。如果由于特殊需要必須把其他的第三方類庫(jar, zip, class等)直接打包在你自己的jar包里面一起發布,你就必須通過實現自定義的ClassLoader來按照自己的意圖加載這些第三方類庫。


    以上三種方法推薦第一種,擴展性好,操作起來也最方便.
    另外編寫自己的ClassLoader,來動態載入class,是更加復雜和高級技術.限于篇幅,不贅述.有興趣了解可以去google一下custom classloader,或者參考我的另一篇日志:讓classpath參數走開。

    Java的安全機制隨不同的JDK版本有不同的變化,會影響很多核心CLASS,比如Thread,所以很多大型商業軟件,要求JDK的版本很嚴格.部分原因也在此.這也要求在發布自己編寫的應用時候,不管大小,都要說明開發和測試的JDK版本.


    本文所述方法測試基于j2sdk 1.4.2_04-b05

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

    附:背景知識

    自JDK 1.2以后,JVM采用了委托(delegate)模式來載入class.采用這種設計的原因可以參考http://java.sun.com/docs/books/tutorial/ext/basics/load.html

    歸納來講:是基于JVM sandbox(沙盒)安裝模型上提供應用層的可定制的安全機制.


    Java虛擬機(JVM)尋找Class的順序

    1. Bootstrap classes

    屬于Java 平臺核心的class,比如java.lang.String等.及rt.jar等重要的核心級別的class.這是由JVM Bootstrap class loader來載入的.一般是放置在{java_home}"jre"lib目錄下

    2. Extension classes

    基于Java擴展機制,用來擴展Java核心功能模塊.比如Java串口通訊模塊comm.jar.一般放置在{Java_home}"jre"lib"ext目錄下

    3. User classes

    開發人員或其他第三方開發的Java程序包.通過命令行的-classpath或-cp,或者通過設置 CLASSPATH環境變量來引用.JVM通過放置在{java_home}"lib"tools.jar來尋找和調用用戶級的class.常用的 javac也是通過調用tools.jar來尋找用戶指定的路徑來編譯Java源程序.這樣就引出了User class路徑搜索的順序或優先級別的問題.

     3.1 缺省值:調用Java或javawa的當前路徑(.),是開發的class所存在的當前目錄
     3.2 CLASSPATH環境變量設置的路徑.如果設置了CLASSPATH,則CLASSPATH的值會覆蓋缺省值
     3.3 執行Java的命令行-classpath或-cp的值,如果制定了這兩個命令行參數之一,它的值會覆蓋環境變量CLASSPATH的值
     3.4 -jar 選項:如果通過java -jar 來運行一個可執行的jar包,這當前jar包會覆蓋上面所有的值.換句話說,-jar 后面所跟的jar包的優先級別最高,如果指定了-jar選項,所有環境變量和命令行制定的搜索路徑都將被忽略.JVM APPClassloader將只會以jar包為搜索范圍.
    有關可執行jar有許多相關的安全方面的描述,可以參考http://java.sun.com/docs/books/tutorial/jar/ 來全面了解.

    這也是為什么應用程序打包成可執行的jar包后,不管你怎么設置classpath都不能引用到第三方jar包的東西了

    關于 什么是 jar文件可以參看以下鏈接:

    http://www-128.ibm.com/developerworks/cn/java/j-jar/index.html


    灑家測試的環境是:Ubuntu8.04+jdk 1.6+Eclipse 3.2。

    posted @ 2008-07-24 16:19 SeesSea 閱讀(2844) | 評論 (0)編輯 收藏

    JAVA實現CRC16校驗

    要求:

    CRC循環冗余錯誤校驗計算方法

    CRC-16C(循環冗余錯誤校驗)生成CRC-16校驗字節的步聚如下:

    (1)裝入一個16位寄存器,所有數位均為1。

    (2)16位寄存器的高位字節與開始8位字節進行“異或”運算。運算結果放入這個16位寄存器。

    (3)把這個16位寄存器向右移1位。

    (4a)若向右(標記位)移出的數位是1,則生成多項式1010000000000001和這個寄存器進行“異或”運算。

    (4b)若向右移出的數位是0,則返回(3)。

    (5)重處處(3)(4),直至移出8位。

    (6)另外8位與該16位寄存器進行“異或”運算。

    (7)重處處(3)-(6),直至該報文所有字節均與16位寄存器進行“異或”運算,并移位8次。

    (8)這個16位寄存器的內容即2字節CRC錯誤校驗。

    public class CRC {
        
    private byte[] CRC=new byte[2];
        
        
    byte data;
        
    byte[] reg=new byte[2];
        
    byte[] ploy=new byte[2];
        
    byte Op;
        
        
    public CRC(byte[] source){
            
    //初始化多項式
            int temp=0xA001;
            ploy
    =InttoByteArray(temp,2);
            
    //初始化寄存器
            temp=0xFFFF;
            reg
    =InttoByteArray(temp,2);
            
            
    for(int i=0;i<source.length;i++){
                
    //獲取數據
                data=source[i];
                
    //與寄存器中數據進行異或操作
                reg[1]=(byte) (reg[1]^data);
                
    //移動數據
                for(int j=0;j<8;j++){
                    
    //獲取數據的最后一位,即被移動出的數據判斷是否與多項式異或
                    Op=reg[0];
                    
    //右移一位
                    reg=InttoByteArray(ByteArraytoInt(reg)>>1,2);
                    
    //如果移出數據為1
                    if((Op&0x01)==1){
                        
    //與多項式進行異或操作
                        reg[0]=(byte) (reg[0]^ploy[0]);
                        reg[
    1]=(byte) (reg[1]^ploy[1]);
                    }                
                }
            }
            CRC
    =reg;        
        }

        
    public byte[] getCRC() {
            
    return CRC;
        }
    //格式化輔助函數
        private static byte[] InttoByteArray(int iSource, int iArrayLen) {
            
    byte[] bLocalArr = new byte[iArrayLen];
            
    for ( int i = 0; (i < 4&& (i < iArrayLen); i++) {
                bLocalArr[i] 
    = (byte)( iSource>>8*& 0xFF );          
            }
            
    return bLocalArr;
        }
        
        
    private static int ByteArraytoInt(byte[] bRefArr) {
            
    int iOutcome = 0;
            
    byte bLoop;
            
            
    for ( int i =0; i<bRefArr.length ; i++) {
                bLoop 
    = bRefArr[i];
                iOutcome
    += (bLoop & 0xFF<< (8 * i);
              
            }         
            
    return iOutcome;
        }    
    }

    開始把高低位搞混了,以為reg[0]是高位,調整了半天。郁悶!
    另外,好像CRC算法也有好多種,我就沒在網上找到用戶要求的這種算法。貌似這個算法是Modbus協議中的CRC校驗方式。有待確認。

    posted @ 2008-07-24 12:11 SeesSea 閱讀(8740) | 評論 (2)編輯 收藏

    2008年7月22日

    Ubuntu load/unload cycle count問題

    開始使用T61后就安裝了Ubuntu。當時就看到說Ubuntu電源管理有缺陷,會損傷硬盤,沒有太在意,只是查詢了一下當時的load/unload cycle count的值,大約3000+的樣子。使用了半個月的今天,再次查詢此值著實讓人吃驚,已經到了驚人的近20000,按照這個速度,硬盤設計的600000次估計也就能維持10個月。找來解決方案如下,不知是否有效,試一段時間再說吧。畢竟硬盤熱或者費電比起數據丟失都是太微不足道了。


    安裝 laptop-mode,手動編輯 /etc/laptop-mode/laptop-mode.conf,大概 216 行左右,按如下修改:

    #
    # Should laptop mode tools control the hard drive power management settings?
    #
    CONTROL_HD_POWERMGMT=1


    #
    # Power management for HD (hdparm -B values)
    #
    BATT_HD_POWERMGMT=192
    LM_AC_HD_POWERMGMT=254
    NOLM_AC_HD_POWERMGMT=254


    第 一項是為了讓對硬盤參數的設置納入 laptop-mode 管理(默認不開)。后面三個就是指定各種模式下的硬盤參數了。默認情況下是 1/255/255。1 這個值太激進(估計 3 分鐘 1 次就是它干的),我改成了 192(電池模式下畢竟還是要省電的,雖然這個值在不同品牌的硬盤可能表現差異很大,但是根據我搜索的結果,設置成 192 的時候硬盤已經很難有機會自行 unload 了)。后兩個默認值 255 是可以不改的,但是 255 是直接關閉 APM(高級電源管理),據說某些硬盤可能會忽略 255 這個極端值,所以改成 254(我的出發點其實還是不想舍棄 APM)。

    然后是修改 /etc/default/acpi-support 這個文件。文件末尾兩個參數,按如下設置:

    # Switch to laptop-mode on battery power - off by default as it causes odd
    # hangs on some machines
    ENABLE_LAPTOP_MODE=true

    # Spindown time on battery
    SPINDOWN_TIME=60


    第一項是開啟 laptop-mode,第二項似乎是控制用來控制硬盤空閑多長時間自動斷電的,可根據自己喜好修改(默認值是 12)。

    經幾天觀察,基本上這個 Load Cycle Count 只在關機的時候才會增加了。

    附:監測 Load Cycle Count 的方法

    sudo smartctl -a /dev/sda


    設備可能是 /dev/hda(IDE 硬盤)或 /dev/sdb(第二塊硬盤)等等。如果覺得輸出太多,可以加上 grep 193。


    sudo smartctl -a /dev/sda | grep 193

    補充:
    2008年07月24日
    試運行了幾天,至少從開機到關機,Ubuntu中的這個值不再變化。不過好像是硬盤比以前熱一些了,或許是心里作用。但是在Vista中這個數據還在增加,具體值沒有算過,最近項目是Linux里的,不怎么用Win系統,等常用時候在關注吧。

    posted @ 2008-07-22 01:57 SeesSea 閱讀(675) | 評論 (0)編輯 收藏

    2008年7月20日

    JAVA基本數據類型與其他語言數據類型之間的轉換方法 (ZT)

         摘要: 在寫網絡通信程序的時候非常非常有用
    通信格式轉換
    Java和一些windows編程語言如c、c++、delphi所寫的網絡程序進行通訊時,需要進行相應的轉換
    高、低字節之間的轉換
    windows的字節序為低字節開頭
    linux,unix的字節序為高字節開頭
    java則無論平臺變化,都是高字節開頭  閱讀全文

    posted @ 2008-07-20 12:02 SeesSea 閱讀(323) | 評論 (0)編輯 收藏

    2008年7月19日

    XML讀取

    今天需要在C#下讀取XML,查了N多文章,都寫的太復雜。灑家只要讀取一些基本信息做系統初始化用。沒法子,只好翻出以前代碼。留在這里一份,以備后查。
    另,前幾天找JAVA的讀取XML,網上很多也是比較繁復。費了點力氣才搞定,回頭另開一篇粘進去。

     XmlTextReader xmlReader = new XmlTextReader("path/filename.xml");
     while (xmlReader.Read())
     {
         if (xmlReader.Name == "XXX")
         {
             if (xmlReader.Read() && xmlReader.NodeType == XmlNodeType.Text)
             {
                 xxx = xmlReader.Value;
              }

          }

     }

    By SeeSea

    posted @ 2008-07-19 23:09 SeesSea 閱讀(280) | 評論 (0)編輯 收藏

    僅列出標題  
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩在线观看免费| 成人免费视频77777| 亚洲成人福利在线| 日韩高清在线高清免费| 亚洲国产一级在线观看| A片在线免费观看| 亚洲精品中文字幕乱码三区| 久久WWW免费人成一看片| 亚洲中字慕日产2021| 无码人妻一区二区三区免费手机| 男女超爽视频免费播放| 国产免费爽爽视频免费可以看| 亚洲hairy多毛pics大全| 国产猛烈高潮尖叫视频免费| 免费看一级一级人妻片| 久久亚洲私人国产精品| 日本最新免费网站| 五月天婷婷免费视频| 亚洲伦理一二三四| 亚洲精品乱码久久久久久中文字幕| 欧洲乱码伦视频免费| 中文字幕免费人成乱码中国| 久久亚洲AV午夜福利精品一区| 好男人视频在线观看免费看片| 久久久久久AV无码免费网站| 麻豆va在线精品免费播放| 亚洲av乱码一区二区三区| 亚洲av中文无码乱人伦在线r▽| 99爱免费观看视频在线| 免费夜色污私人影院网站| 亚洲熟妇无码av另类vr影视| 亚洲日本中文字幕| AV在线播放日韩亚洲欧| 在线观看91精品国产不卡免费| 国产国产人免费视频成69堂| 国产日韩AV免费无码一区二区| 国产午夜亚洲精品不卡电影| 在线观看日本亚洲一区| 亚洲一区中文字幕在线电影网| 亚洲第一福利网站| 亚洲成av人在线视|