久久精品亚洲视频,亚洲AV无码一区二区三区系列,亚洲黄色在线播放http://www.tkk7.com/seesea/Java初學習zh-cnSun, 11 May 2025 15:56:13 GMTSun, 11 May 2025 15:56:13 GMT60Struts2學習http://www.tkk7.com/seesea/archive/2014/07/16/415883.htmlSeesSeaSeesSeaWed, 16 Jul 2014 02:47:00 GMThttp://www.tkk7.com/seesea/archive/2014/07/16/415883.htmlhttp://www.tkk7.com/seesea/comments/415883.htmlhttp://www.tkk7.com/seesea/archive/2014/07/16/415883.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/415883.htmlhttp://www.tkk7.com/seesea/services/trackbacks/415883.html
環境沒敢用最新的,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


SeesSea 2014-07-16 10:47 發表評論
]]>
在ubuntu 8.04下安裝Oracle 11g方法http://www.tkk7.com/seesea/archive/2009/03/18/260400.htmlSeesSeaSeesSeaWed, 18 Mar 2009 02:52:00 GMThttp://www.tkk7.com/seesea/archive/2009/03/18/260400.htmlhttp://www.tkk7.com/seesea/comments/260400.htmlhttp://www.tkk7.com/seesea/archive/2009/03/18/260400.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/260400.htmlhttp://www.tkk7.com/seesea/services/trackbacks/260400.html項目要求使用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登陸了。不過界面為亂碼。呵呵??!解決方法自己在網上找吧??!

如果你看到了上面的結果,證明你的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.



 



SeesSea 2009-03-18 10:52 發表評論
]]>
Struts2 action 的 ;jsessionid=xxx 使找不到頁面 Bug 的解決 [轉帖]http://www.tkk7.com/seesea/archive/2008/08/12/221439.htmlSeesSeaSeesSeaTue, 12 Aug 2008 02:40:00 GMThttp://www.tkk7.com/seesea/archive/2008/08/12/221439.htmlhttp://www.tkk7.com/seesea/comments/221439.htmlhttp://www.tkk7.com/seesea/archive/2008/08/12/221439.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/221439.htmlhttp://www.tkk7.com/seesea/services/trackbacks/221439.html閱讀全文

SeesSea 2008-08-12 10:40 發表評論
]]>
Struts2設置http://www.tkk7.com/seesea/archive/2008/08/06/220459.htmlSeesSeaSeesSeaWed, 06 Aug 2008 08:27:00 GMThttp://www.tkk7.com/seesea/archive/2008/08/06/220459.htmlhttp://www.tkk7.com/seesea/comments/220459.htmlhttp://www.tkk7.com/seesea/archive/2008/08/06/220459.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/220459.htmlhttp://www.tkk7.com/seesea/services/trackbacks/220459.html 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" %>
暫時有事,回頭補充。



SeesSea 2008-08-06 16:27 發表評論
]]>
Ubuntu下的tomcat啟動http://www.tkk7.com/seesea/archive/2008/08/01/219275.htmlSeesSeaSeesSeaFri, 01 Aug 2008 03:27:00 GMThttp://www.tkk7.com/seesea/archive/2008/08/01/219275.htmlhttp://www.tkk7.com/seesea/comments/219275.htmlhttp://www.tkk7.com/seesea/archive/2008/08/01/219275.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/219275.htmlhttp://www.tkk7.com/seesea/services/trackbacks/219275.html     還是喜歡ubuntu下的調試環境,所以還想選擇在這個下面開發。
    先在原有eclipse上安裝了MyEclipse,這次比較順利,記得上次安裝比較費勁,總是啟動不了,或許是因為這臺機器是inter的CPU緣故?不得而知。
    安裝TomCat遇到一些問題,主要是TomCat總是隨系統啟動,每次開機都需要手動關閉服務,比較麻煩。由于對ubuntu不熟悉,找了下方法,感覺比較好的方法如下:
安裝sysv-rc-conf
方法:
sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf

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




SeesSea 2008-08-01 11:27 發表評論
]]>
Eclipse發布程序http://www.tkk7.com/seesea/archive/2008/07/24/217213.htmlSeesSeaSeesSeaThu, 24 Jul 2008 08:19:00 GMThttp://www.tkk7.com/seesea/archive/2008/07/24/217213.htmlhttp://www.tkk7.com/seesea/comments/217213.htmlhttp://www.tkk7.com/seesea/archive/2008/07/24/217213.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/217213.htmlhttp://www.tkk7.com/seesea/services/trackbacks/217213.html 不過導出后遇到一些問題,就是第三方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。



SeesSea 2008-07-24 16:19 發表評論
]]>
JAVA實現CRC16校驗http://www.tkk7.com/seesea/archive/2008/07/24/217149.htmlSeesSeaSeesSeaThu, 24 Jul 2008 04:11:00 GMThttp://www.tkk7.com/seesea/archive/2008/07/24/217149.htmlhttp://www.tkk7.com/seesea/comments/217149.htmlhttp://www.tkk7.com/seesea/archive/2008/07/24/217149.html#Feedback2http://www.tkk7.com/seesea/comments/commentRss/217149.htmlhttp://www.tkk7.com/seesea/services/trackbacks/217149.html要求:

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校驗方式。有待確認。



SeesSea 2008-07-24 12:11 發表評論
]]>
Ubuntu load/unload cycle count問題http://www.tkk7.com/seesea/archive/2008/07/22/216497.htmlSeesSeaSeesSeaMon, 21 Jul 2008 17:57:00 GMThttp://www.tkk7.com/seesea/archive/2008/07/22/216497.htmlhttp://www.tkk7.com/seesea/comments/216497.htmlhttp://www.tkk7.com/seesea/archive/2008/07/22/216497.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/216497.htmlhttp://www.tkk7.com/seesea/services/trackbacks/216497.html

安裝 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系統,等常用時候在關注吧。


SeesSea 2008-07-22 01:57 發表評論
]]>
JAVA基本數據類型與其他語言數據類型之間的轉換方法 (ZT)http://www.tkk7.com/seesea/archive/2008/07/20/216159.htmlSeesSeaSeesSeaSun, 20 Jul 2008 04:02:00 GMThttp://www.tkk7.com/seesea/archive/2008/07/20/216159.htmlhttp://www.tkk7.com/seesea/comments/216159.htmlhttp://www.tkk7.com/seesea/archive/2008/07/20/216159.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/216159.htmlhttp://www.tkk7.com/seesea/services/trackbacks/216159.html通信格式轉換
Java和一些windows編程語言如c、c++、delphi所寫的網絡程序進行通訊時,需要進行相應的轉換
高、低字節之間的轉換
windows的字節序為低字節開頭
linux,unix的字節序為高字節開頭
java則無論平臺變化,都是高字節開頭  閱讀全文

SeesSea 2008-07-20 12:02 發表評論
]]>
XML讀取http://www.tkk7.com/seesea/archive/2008/07/19/216105.htmlSeesSeaSeesSeaSat, 19 Jul 2008 15:09:00 GMThttp://www.tkk7.com/seesea/archive/2008/07/19/216105.htmlhttp://www.tkk7.com/seesea/comments/216105.htmlhttp://www.tkk7.com/seesea/archive/2008/07/19/216105.html#Feedback0http://www.tkk7.com/seesea/comments/commentRss/216105.htmlhttp://www.tkk7.com/seesea/services/trackbacks/216105.html今天需要在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

SeesSea 2008-07-19 23:09 發表評論
]]>
主站蜘蛛池模板: 亚洲人成人无码.www石榴 | 亚洲av中文无码乱人伦在线播放 | 精品国产麻豆免费网站| 无人影院手机版在线观看免费 | 中文字幕免费视频精品一| yellow视频免费在线观看| 一级免费黄色大片| 国产精品青草视频免费播放| 国产女高清在线看免费观看| 在线免费观看a级片| 免费看香港一级毛片| 日本不卡免费新一二三区| 久久免费观看国产精品| 久久99青青精品免费观看| 亚洲免费日韩无码系列| 成人精品视频99在线观看免费| 丁香花在线观看免费观看图片| 青柠影视在线观看免费| 久久久久久毛片免费播放| 伊人免费在线观看| 久久一区二区三区免费播放 | 精品国产污污免费网站入口| 日韩电影免费在线观看网站| 一区二区在线免费观看| 免费下载成人电影| 成人免费无码精品国产电影| 亚洲精品国产V片在线观看| 久久亚洲国产欧洲精品一| 亚洲精品在线免费看| 亚洲色偷偷综合亚洲AV伊人蜜桃| 久久精品国产亚洲77777| 精品亚洲一区二区| 亚洲视频免费一区| 亚洲人成自拍网站在线观看| 日本永久免费a∨在线视频| 四虎国产精品免费永久在线| 日本免费人成在线网站| 国产成人免费a在线视频色戒| 亚洲真人日本在线| 久久亚洲国产成人精品无码区| 亚洲国产精品自产在线播放|