當前位置:首頁 » 操作系統 » java16forlinux

java16forlinux

發布時間: 2022-05-09 02:20:22

❶ 請問一下我在linux下面設置的java_home有什麼問題阿,怎麼允許tomcat還是提示找不到java_home呢

不要有中文路徑,改了之後如果在啟動不了你就在catalina.sh中添加javahome,這樣就可以啟動了。因為tomcat啟動時要用到catalina的!~

❷ c++和c#有什麼區別和聯系嗎

C#(讀做 "C sharp")是微軟公司在去年六月發布的一種新的編程語言,並定於在微軟職業開發者論壇(PDC)上登台亮相.C#是微軟公司研究員Anders Hejlsberg的最新成果.C#看起來與Java有著驚人的相似;它包括了諸如單一繼承,界面,與Java幾乎同樣的語法,和編譯成中間代碼再運行的過程.但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司.NET windows網路框架的主角.

微軟c#語言定義主要是從C和C++繼承而來的,而且語言中的許多元素也反映了這一點.C#在設計者從C++繼承的可選選項方面比Java要廣泛一些(比如說structs),它還增加了自己新的特點(比方說源代碼版本定義).但它還太不成熟,不可能擠垮Java.C#還需要進化成一種開發者能夠接受和採用的語言.而微軟當前為它的這種新語言大造聲勢也是值得注意的.目前大家的反應是:"這是對Java的反擊."
C#更象Java一些,雖然微軟在這個問題上保持沉默.這也是意料中的事情,我覺得,因為Java近來很成功而使用Java的公司都報告說它們在生產效率上比C++獲得了提高.

Java所帶來的巨大影響和大家對它的廣泛接受已經由工作於這種語言和平台之上的程序員數量明顯的說明了(估計世界范圍內共有兩百五十萬程序員使用Java).由這種語言寫成的應用程序的數量是令人驚訝的並已經滲透了每一個級別的計算,包括無線計算和行動電話(比如日本發明的Java電話).C#能夠在用戶領域獲得這樣的禮遇嗎?我們必須等待並觀望,就象已經由SSI公司的CEO和主席Kalpathi S. Suresh指出來的那樣,"我發現所有這些都是漸進的.如果C#不存在,我們總能回到Java或C和C++.這些都不完全是新技術;它們在更大的意義上來說只是大公司製造的市場噱頭.我們必須給他們時間安頓下來看看這些是不是真的對IT工業有什麼影響."
C++,這個詞在中國大陸的程序員圈子中通常被讀做「C加加」,而西方的程序員通常讀做「C plus plus」,它是一種使用非常廣泛的計算機編程語言。C++是一種靜態數據類型檢查的,支持多重編程範式的通用程序設計語言。它支持過程序程序設計、數據抽象、面向對象程序設計、泛型程序設計等多種程序設計風格。

貝爾實驗室的本賈尼·斯特勞斯特盧普(w:en:Bjarne Stroustrup)博士在20世紀80年代發明並實現了C++(最初這種語言被稱作「C with Classes」)。一開始C++是作為C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性。虛函數(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、名字空間(name space)逐漸被加入標准。1998年國際標准組織(ISO)頒布了C++程序設計語言的國際標准ISO/IEC 14882-1998。遺憾的是,由於C++語言過於復雜,以及他經歷了長年的演變,直到現在(2004年)只有少數幾個編譯器完全符合這個標准。

另外,就目前學習C++而言,可以認為他是一門獨立的語言;他並不依賴C語言,我們可以完全不學C語言,而直接學習C++。根據《C++編程思想》(Thinking in C++)一書所評述的,C++與C的效率往往相差在正負5%之間。所以有人認為在大多數場合C++ 完全可以取代C語言。

C++語言發展大概可以分為三個階段:第一階段從80年代到1995年。這一階段C++語言基本上是傳統類型上的面向對象語言,並且憑借著接近C語言的效率,在工業界使用的開發語言中占據了相當大份額;第二階段從1995年到2000年,這一階段由於標准模板庫(STL)和後來的Boost等程序庫的出現,泛型程序設計在C++中占據了越來越多的比重性。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的沖擊;第三階段從2000年至今,由於以Loki、MPL等程序庫為代表的產生式編程和模板元編程的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程序設計語言中最復雜的一員。
恩,大致就這些了。。。

❸ linux怎麼安裝java環境

安裝系統環境是: centos6.5 64位
一.安裝jdk
1.下載Java文件jdk-6u45-Linux-x64.bin

2.運行./jdk-6u45-linux-x64.bin

3.移動該文件到/usr/local/jdk目錄下
mv jdk-6u45-linux-x64 /usr/local/jdk

4.配置java環境變數,在文件/etc/profile最後添加以下內容:
#set java
JAVA_HOME=/usr/local/jdk;export JAVA_HOME
JRE_HOME=/usr/local/jdk/jre;export JRE_HOME
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin;export PATH
export CLASSPATH=$CLASSPATH:$PATH:$JAVA_HOME/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib:.
5.source /etc/profile (重新激活)
6.運行java -version查看是否成功
二.安裝tomcat
1.下載tomcat文件:apache-tomcat-7.0.47.tar.gz
2.解壓tar -zxvf apache-tomcat-7.0.47.tar.gz
3.移動該文件到/usr/local下,並命名為tomcat
mv apache-tomcat-7.0.47 /usr/local/tomcat
4.到tomcat/bin目錄下setclasspath.sh文件中設置java環境,加入以下兩行即可:
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
5.設置tomcat 服務啟動
把下面內容保存到/etc/init.d/目錄,文件名為tomcat
#!/bin/bash
# /etc/rc.d/init.d/tomcat
# init script for tomcat precesses
#
# processname: tomcat by ton
# description: tomcat is a j2se server
# chkconfig: 2345 86 16
# description: Start up the Tomcat servlet engine.
set -m (有時不加這個,secureFX會話失效時,會導致tomcat自動stop)
CATALINA_HOME="/usr/local/tomcat"
if [ -f /etc/init.d/functions ]; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
else
echo -e "/atomcat: unable to locate functions lib. Cannot continue."
exit -1
fi
# running tomcat services
RETVAL=$?
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];then
echo $"Starting Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];then
echo $"Stopping Tomcat"
$CATALINA_HOME/bin/shutdown.sh
fi
;;
restart)
if [ -f $CATALINA_HOME/bin/startup.sh ];then
echo $"Starting Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
sleep 5
if [ -f $CATALINA_HOME/bin/shutdown.sh ];then
echo $"Stopping Tomcat"
$CATALINA_HOME/bin/shutdown.sh
fi
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL

6.為該文件添加運行許可權
chmod +x /etc/init.d/tomcat
三.安裝Mysql
linux下主要是編譯安裝,需准備:cmake工具

1.yum install gcc gcc-c++ ncurses-devel perl (安裝編譯源碼所需的工具和庫)

2.下載cmake-3.0.1.tar.gz ,然後輸入命令:

tar -xzvf cmake-3.0.1.tar.gz
cd cmake-3.0.1
./bootstrap ; make ; make install

3.新增mysql用戶組和用戶命令:
groupadd mysql
useradd -r -g mysql mysql

4.新建mysql安裝目錄和存放數據目錄:
mkdir -p /usr/local/mysql
cd /usr/local/mysql
chown -R mysql:mysql . (分配許可權)

mkdir -p /var/mysqldata
cd /var/mysqldata
chown -R mysql:mysql . (分配許可權)

5.下載mysql-5.5.38.tar.gz ,解壓:
tar -zxvf mysql-5.5.38.tar.gz
cd mysql-5.5.38(先進入目錄下)

6.(先進入mysql-5.5.38目錄下)再執行cmake命令:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/var/mysqldata/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/var/mysqldata \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306

7.再編譯:
make
make install

8.復制配置文件,在/usr/local/mysql下執行:
cp support-files/my-medium.cnf /etc/my.cnf

9 初始化資料庫
執行前需賦給scripts/mysql_install_db文件執行許可權
chmod 755 scripts/mysql_install_db
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ \
--datadir=/var/mysqldata/

10. 設置mysqld的開機啟動
cp support-files/mysql.server /etc/init.d/mysql
chmod 755 /etc/init.d/mysql
chkconfig mysql on

11.MySQL配置環境變數
export PATH=/usr/local/mysql/bin:$PATH
alias mysql_start="mysqld_safe &"
alias mysql_stop="mysqladmin –u root -p shutdown"
source /etc/profile (重啟配置)

12.啟動mysql服務
/etc/init.d/mysql start

ps -ef |grep mysql (命令查看是否啟動)

13. 登陸mysql
# mysql -u root –p
14.修改MySQL用戶root的密碼
mysqladmin -u root password '123456' (更新密碼)

❹ linux怎麼安裝jstack工具

jstack用於列印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息。
如果是在64位機器上,需要指定選項"-J-d64",Windows的jstack使用方式只支持以下的這種方式:jstack [-l] pid

如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發生問題。

另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。

l 不同的 JAVA虛機的線程 DUMP的創建方法和文件格式是不一樣的,不同的 JVM版本, mp信息也有差別。

l 在實際運行中,往往一次 mp的信息,還不足以確認問題。建議產生三次 mp信息,如果每次 mp都指向同一個問題,我們才確定問題的典型性。

命令格式

$jstack [ option ] pid

$jstack [ option ] executable core

$jstack [ option ] [server-id@]remote-hostname-or-IP

pid: java應用程序的進程號,一般可以通過jps來獲得

executable:產生core mp的java可執行程序

core:列印出的core文件

remote-hostname-or-ip:遠程debug伺服器的名稱或IP

server-id: 唯一id,假如一台主機上多個遠程debug服務

❺ ubuntu10.04下搭建java開發環境

用mandrake或者redhat吧因為紅旗不遵守GNU約定,很無恥的何必支持一個無恥的新公司呢,中軟也是一樣的紅旗還沒有怎麼毛病就出來了,國產又怎麼樣國產不是買他的理由我選擇RHEL5的四個最重要的理由1)虛擬化管理確實每個廠商都有自己的虛擬化產品。Novell的SLES(SUSE Linux Enterprise Server) 10現在已經支持Xen虛擬化技術好幾個月了。KVM (kernel-based virtual machine for Linux)在最新的Linux內核產品2.6.20.OpenVZ中已經有了激動人心的新特性,而且SWSoft和Parallels(一個開源企業,並且現在兩家公司已經合並了)也取得了一些很好的進展。盡管如此紅帽還是在虛擬化管理方面領先一步。任何人都有能力或者嘗試自己來配置一個Linux上的虛擬機。但只有你真正的知道應該如何去應對出現的問題你才能成功的配置出自己的虛擬機。任何一個有此類經驗的系統管理員使用RHEL 5都可以配置很多虛擬機而沒有那麼多復雜的東西需要考慮。一旦設置完成這些虛擬機則會更加簡單易用與易於管理。這是非常重要的。我對IDC公司負責調查的副總裁Al Gillen談過這方面的話題,他告訴我,「爭取最大的競爭力和利潤就來自於管理,部署和跟蹤所有的分層[虛擬]軟體的整個周期。」紅帽在RHEL5時代已經為這場虛擬化的戰斗做好了准備。另一個被忽略的要素是,RHEL 5一體化的虛擬軟體和相應的管理軟體是打包在一起的,用戶不必為增加的虛擬軟體而付費。就像RHEL產品的總經理Scott Crenshaw最近說的一樣,「與操作系統整合的虛擬化技術,其好處是本質性的,並且我們能提供一個更加優惠的定價。」你不但能使用一個虛擬機做以前需要三到四個硬體伺服器做的工作而達到資金的節省,更能夠因為將虛擬機,虛擬機管理和操作系統捆綁在一個產品包中而省錢。如果我是一個CFO並且正在尋找減少IT成本的方法,那麼RHEL5聽起來真的對我非常有好處。2)可靠的存儲簡單的工作組或者部門級伺服器可以使用單個硬碟或者磁碟陣列的形式存儲數據,但是可靠的伺服器工作時需要可靠的存儲技術。使用Red Hat Cluster Suite(紅帽集群套件),Red Hat Global File System(紅帽全局文件系統)和Cluster Logical Volume Manager(集群邏輯管理軟體),紅帽向您提供了管理包括在本地伺服器,存儲區域網路(SAN)和交錯的集群上TB級存儲數據的工具。RHEL5同樣帶來了對iSCSI盤陣和帶有InfiniBand技術遠程直接內存存取(RDMA)的支持。對在一個文件系統中有大量存儲的客戶,RHEL 5的Ext3文件系統現在支持16TB文件系統了,這真是一個很大的數字。如果你正在使用Veritas軟體管理公司或者數據中心的存儲,不用擔心:你可以繼續使用它。賽門鐵克公司(Symantec Corp.)宣布3月14日他將會為使用RHEL 5的用戶提供核心的Veritas Storage Foundation,Veritas集群伺服器(Veritas Cluster Server)和Veritas NetBackup解決方案。賽門特克同樣發布了一個用於在Xen虛擬化中結合Storage Foundation和動態多路徑技術應用的Beta版程序。如果按計劃完成的話,那將會允許管理員集中管理存儲虛擬化技術和虛擬機的I/O多路徑。請再次注意「虛擬化」這個詞,通過聯合虛擬機和虛擬存儲,紅帽已經創建了一個由技術專家和精算師組成的系統。強大的技術支持和易於控制的成本-誰會不喜歡呢?3)安全性Linux 本身就是一個非常安全的操作系統。在RHEL5時代, 紅帽已經比早期的SELinux (security-enhanced Linux) 更加容易部署和易於維護。就像很多Linux系統管理員所知道的那樣,把SELinux配置完整是一件很痛苦的事情,這項工作令人厭惡到很多管理員乾脆就把它簡單的關掉了事。問題的根源來自於RHEL上應用軟體的預設定太少。你必須自己建立你自己的;並且這是一個安全專家才能做好的工作。現在預設的SELinux提供

❻ Linux伺服器tomcat部署運行後cpu升到最高一直不降。

這個跟Linux沒有任何關系。

是你的代碼寫的不好,重點檢查以下幾個方面:

  1. 有輸入輸出流操作的地方,資源是否正常釋放;

  2. 有遠程連接的地方,比如httpClient、Socket等,使用完是否正常關閉;

  3. 如果系統有開放介面,介面代碼是否健壯,是否經的起大並發訪問;是否會導致阻塞;出現異常後,異常處理機制是否健全;

❼ 編程高手來啊!!!!!急啊!!!!!

MD5的Java Bean實現
MD5簡介

MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的計算機科學實驗室和RSA Data Security Inc發明,經MD2、MD3和MD4發展而來。

Message-Digest泛指位元組串(Message)的Hash變換,就是把一個任意長度的位元組串變換成一定長的大整數。請注意我使用了「位元組串」而不是「字元串」這個詞,是因為這種變換只與位元組的值有關,與字元集或編碼方式無關。

MD5將任意長度的「位元組串」變換成一個128bit的大整數,並且它是一個不可逆的字元串變換演算法,換句話說就是,即使你看到源程序和演算法描述,也無法將一個MD5的值變換回原始的字元串,從數學原理上說,是因為原始的字元串有無窮多個,這有點象不存在反函數的數學函數。

MD5的典型應用是對一段Message(位元組串)產生fingerprint(指紋),以防止被「篡改」。舉個例子,你將一段話寫在一個叫readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的「抵賴」,這就是所謂的數字簽名應用。

MD5還廣泛用於加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它演算法)的方式保存的,用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然後再去和系統中保存的MD5值進行比較,而系統並不「知道」用戶的密碼是什麼。

一些黑客破獲這種密碼的方法是一種被稱為「跑字典」的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字元串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。

即使假設密碼的最大長度為8,同時密碼只能是字母和數字,共26+26+10=62個字元,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要TB級的磁碟組,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。

在很多電子商務和社區應用中,管理用戶的Account是一種最常用的基本功能,盡管很多Application Server提供了這些基本組件,但很多應用開發者為了管理的更大的靈活性還是喜歡採用關系資料庫來管理用戶,懶惰的做法是用戶的密碼往往使用明文或簡單的變換後直接保存在資料庫中,因此這些用戶的密碼對軟體開發者或系統管理員來說可以說毫無保密可言,本文的目的是介紹MD5的Java Bean的實現,同時給出用MD5來處理用戶的Account密碼的例子,這種方法使得管理員和程序設計者都無法看到用戶的密碼,盡管他們可以初始化它們。但重要的一點是對於用戶密碼設置習慣的保護。

有興趣的讀者可以從這里取得MD5也就是RFC 1321的文本。http://www.ietf.org/rfc/rfc1321.txt

實現策略

MD5的演算法在RFC1321中實際上已經提供了C的實現,我們其實馬上就能想到,至少有兩種用Java實現它的方法,第一種是,用Java語言重新寫整個演算法,或者再說簡單點就是把C程序改寫成Java程序。第二種是,用JNI(Java Native Interface)來實現,核心演算法仍然用這個C程序,用Java類給它包個殼。

但我個人認為,JNI應該是Java為了解決某類問題時的沒有辦法的辦法(比如與操作系統或I/O設備密切相關的應用),同時為了提供和其它語言的互操作性的一個手段。使用JNI帶來的最大問題是引入了平台的依賴性,打破了SUN所鼓吹的「一次編寫到處運行」的Java好處。因此,我決定採取第一種方法,一來和大家一起嘗試一下「一次編寫到處運行」的好處,二來檢驗一下Java 2現在對於比較密集的計算的效率問題。

實現過程

限於這篇文章的篇幅,同時也為了更多的讀者能夠真正專注於問題本身,我不想就某一種Java集成開發環境來介紹這個Java Bean的製作過程,介紹一個方法時我發現步驟和命令很清晰,我相信有任何一種Java集成環境三天以上經驗的讀者都會知道如何把這些代碼在集成環境中編譯和運行。用集成環境講述問題往往需要配很多屏幕截圖,這也是我一直對集成環境很頭疼的原因。我使用了一個普通的文本編輯器,同時使用了Sun公司標準的JDK 1.3.0 for Windows NT。

其實把C轉換成Java對於一個有一定C語言基礎的程序員並不困難,這兩個語言的基本語法幾乎完全一致.我大概花了一個小時的時間完成了代碼的轉換工作,我主要作了下面幾件事:

把必須使用的一些#define的宏定義變成Class中的final static,這樣保證在一個進程空間中的多個Instance共享這些數據
刪去了一些無用的#if define,因為我只關心MD5,這個推薦的C實現同時實現了MD2 MD3和 MD4,而且有些#if define還和C不同編譯器有關
將一些計算宏轉換成final static 成員函數。
所有的變數命名與原來C實現中保持一致,在大小寫上作一些符合Java習慣的變化,計算過程中的C函數變成了private方法(成員函數)。
關鍵變數的位長調整
定義了類和方法
需要注意的是,很多早期的C編譯器的int類型是16 bit的,MD5使用了unsigned long int,並認為它是32bit的無符號整數。而在Java中int是32 bit的,long是64 bit的。在MD5的C實現中,使用了大量的位操作。這里需要指出的一點是,盡管Java提供了位操作,由於Java沒有unsigned類型,對於右移位操作多提供了一個無符號右移:>>>,等價於C中的 >> 對於unsigned 數的處理。

因為Java不提供無符號數的運算,兩個大int數相加就會溢出得到一個負數或異常,因此我將一些關鍵變數在Java中改成了long類型(64bit)。我個人認為這比自己去重新定義一組無符號數的類同時重載那些運算符要方便,同時效率高很多並且代碼也易讀,OO(Object Oriented)的濫用反而會導致效率低下。

限於篇幅,這里不再給出原始的C代碼,有興趣對照的讀者朋友可以去看RFC 1321。MD5.java源代碼

測試

在RFC 1321中,給出了Test suite用來檢驗你的實現是否正確:

MD5 ("") =

MD5 ("a") =

MD5 ("abc") =

MD5 ("message digest") =

MD5 ("abcdefghijklmnopqrstuvwxyz") =

……

這些輸出結果的含義是指:空字元串」」的MD5值是,字元串」a」的MD5值是……
編譯並運行我們的程序:
javac –d . MD5.java
java beartool.MD5
為了將來不與別人的同名程序沖突,我在我的程序的第一行使用了package beartool;

因此編譯命令javac –d . MD5.java 命令在我們的工作目錄下自動建立了一個beartool目錄,目錄下放著編譯成功的 MD5.class

我們將得到和Test suite同樣的結果。當然還可以繼續測試你感興趣的其它MD5變換,例如:

java beartool.MD5 1234

將給出1234的MD5值。

可能是我的計算機知識是從Apple II和Z80單板機開始的,我對大寫十六進制代碼有偏好,如果您想使用小寫的Digest String只需要把byteHEX函數中的A、B、C、D、E、F改成a、b、 c、d、e、f就可以了。

MD5據稱是一種比較耗時的計算,我們的Java版MD5一閃就算出來了,沒遇到什麼障礙,而且用肉眼感覺不出來Java版的MD5比C版的慢。

為了測試它的兼容性,我把這個MD5.class文件拷貝到我的另一台Linux+IBM JDK 1.3的機器上,執行後得到同樣結果,確實是「一次編寫到處運行了」。

Java Bean簡述

現在,我們已經完成並簡單測試了這個Java Class,我們文章的標題是做一個Java Bean。

其實普通的Java Bean很簡單,並不是什麼全新的或偉大的概念,就是一個Java的Class,盡管 Sun規定了一些需要實現的方法,但並不是強制的。而EJB(Enterprise Java Bean)無非規定了一些必須實現(非常類似於響應事件)的方法,這些方法是供EJB Container使用(調用)的。

在一個Java Application或Applet里使用這個bean非常簡單,最簡單的方法是你要使用這個類的源碼工作目錄下建一個beartool目錄,把這個class文件拷貝進去,然後在你的程序中import beartool.MD5就可以了。最後打包成.jar或.war是保持這個相對的目錄關系就行了。

Java還有一個小小的好處是你並不需要摘除我們的MD5類中那個main方法,它已經是一個可以工作的Java Bean了。Java有一個非常大的優點是她允許很方便地讓多種運行形式在同一組代碼中共存,比如,你可以寫一個類,它即是一個控制台Application和GUI Application,同時又是一個Applet,同時還是一個Java Bean,這對於測試、維護和發布程序提供了極大的方便,這里的測試方法main還可以放到一個內部類中,有興趣的讀者可以參考:http://www.cn.ibm.com/developerWorks/java/jw-tips/tip106/index.shtml

這里講述了把測試和示例代碼放在一個內部靜態類的好處,是一種不錯的工程化技巧和途徑。

把Java Bean裝到JSP里

正如我們在本文開頭講述的那樣,我們對這個MD5 Bean的應用是基於一個用戶管理,這里我們假設了一個虛擬社區的用戶login過程,用戶的信息保存在資料庫的個名為users的表中。這個表有兩個欄位和我們的這個例子有關,userid :char(20)和pwdmd5 :char(32),userid是這個表的Primary Key,pwdmd5保存密碼的MD5串,MD5值是一個128bit的大整數,表示成16進制的ASCII需要32個字元。

這里給出兩個文件,login.html是用來接受用戶輸入的form,login.jsp用來模擬使用MD5 Bean的login過程。

為了使我們的測試環境簡單起見,我們在JSP中使用了JDK內置的JDBC-ODBC Bridge Driver,community是ODBC的DSN的名字,如果你使用其它的JDBC Driver,替換掉login.jsp中的
Connection con= DriverManager.getConnection("jdbc:odbc:community", "", "");
即可。

login.jsp的工作原理很簡單,通過post接收用戶輸入的UserID和Password,然後將Password變換成MD5串,然後在users表中尋找UserID和pwdmd5,因為UserID是users表的Primary Key,如果變換後的pwdmd5與表中的記錄不符,那麼SQL查詢會得到一個空的結果集。

這里需要簡單介紹的是,使用這個Bean只需要在你的JSP應用程序的WEB-INF/classes下建立一個beartool目錄,然後將MD5.class拷貝到那個目錄下就可以了。如果你使用一些集成開發環境,請參考它們的deploy工具的說明。在JSP使用一個java Bean關鍵的一句聲明是程序中的第2行:

<jsp:useBean id='oMD5' scope='request' class='beartool.MD5'/>
這是所有JSP規范要求JSP容器開發者必須提供的標准Tag。

id=實際上是指示JSP Container創建Bean的實例時用的實例變數名。在後面的<%和%>之間的Java程序中,你可以引用它。在程序中可以看到,通過 pwdmd5=oMD5.getMD5ofStr (password)引用了我們的MD5 Java Bean提供的唯一一個公共方法: getMD5ofStr。

Java Application Server執行.JSP的過程是先把它預編譯成.java(那些Tag在預編譯時會成為java語句),然後再編譯成.class。這些都是系統自動完成和維護的,那個.class也稱為Servlet。當然,如果你願意,你也可以幫助Java Application Server去干本該它乾的事情,自己直接去寫Servlet,但用Servlet去輸出HTML那簡直是回到了用C寫CGI程序的惡夢時代。

如果你的輸出是一個復雜的表格,比較方便的方法我想還是用一個你所熟悉的HTML編輯器編寫一個「模板」,然後在把JSP代碼「嵌入」進去。盡管這種JSP代碼被有些專家指責為「空心粉」,它的確有個缺點是代碼比較難管理和重復使用,但是程序設計永遠需要的就是這樣的權衡。我個人認為,對於中、小型項目,比較理想的結構是把數據表示(或不嚴格地稱作WEB界面相關)的部分用JSP寫,和界面不相關的放在Bean裡面,一般情況下是不需要直接寫Servlet的。

如果你覺得這種方法不是非常的OO(Object Oriented),你可以繼承(extends)它一把,再寫一個bean把用戶管理的功能包進去。

到底能不能兼容?

我測試了三種Java應用伺服器環境,Resin 1.2.3、Sun J2EE 1.2、IBM WebSphere 3.5,所幸的是這個Java Bean都沒有任何問題,原因其實是因為它僅僅是個計算程序,不涉及操作系統,I/O設備。其實用其它語言也能簡單地實現它的兼容性的,Java的唯一優點是,你只需提供一個形態的運行碼就可以了。請注意「形態」二字,現在很多計算結構和操作系統除了語言本身之外都定義了大量的代碼形態,很簡單的一段C語言核心代碼,轉換成不同形態要考慮很多問題,使用很多工具,同時受很多限制,有時候學習一種新的「形態」所花費的精力可能比解決問題本身還多。比如光Windows就有EXE、Service、的普通DLL、COM DLL以前還有OCX等等等等,在Unix上雖說要簡單一些,但要也要提供一個.h定義一大堆宏,還要考慮不同平台編譯器版本的位長度問題。我想這是Java對我來說的一個非常重要的魅力吧。

MD5演算法說明

一、補位
二、補數據長度
三、初始化MD5參數
四、處理位操作函數
五、主要變換過程
六、輸出結果

補位:
MD5演算法先對輸入的數據進行補位,使得數據位長度LEN對512求余的結果是448。即數據擴展至K*512+448位。即K*64+56個位元組,K為整數。
具體補位操作:補一個1,然後補0至滿足上述要求。
補數據長度:
用一個64位的數字表示數據的原始長度B,把B用兩個32位數表示。這時,數
據就被填補成長度為512位的倍數。
初始化MD5參數:
四個32位整數 (A,B,C,D) 用來計算信息摘要,初始化使用的是十六進製表
示的數字
A=0X01234567
B=0X89abcdef
C=0Xfedcba98
D=0X76543210

處理位操作函數:
X,Y,Z為32位整數。
F(X,Y,Z) = X&Y|NOT(X)&Z
G(X,Y,Z) = X&Z|Y?(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X|not(Z))

主要變換過程:
使用常數組T[1 ... 64], T[i]為32位整數用16進製表示,數據用16個32位
的整數數組M[]表示。
具體過程如下:

/* 處理數據原文 */
For i = 0 to N/16-1 do

/*每一次,把數據原文存放在16個元素的數組X中. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /結束對J的循環

/* Save A as AA, B as BB, C as CC, and D as DD.
*/
AA = A
BB = B
CC = C
DD = D

/* 第1輪*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */

/* Do the following 16 operations. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3
22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7
22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA
11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15]
[BCDA 15 22 16]

/* 第2輪* */
/* 以 [abcd k s i]表示如下操作
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA
0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23]
[BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA
8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA
12 20 32]

/* 第3輪*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35]
[BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA
10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43]
[BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47]
[BCDA 2 23 48]

/* 第4輪*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51]
[BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55]
[BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59]
[BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63]
[BCDA 9 21 64]

/* 然後進行如下操作 */
A = A + AA
B = B + BB
C = C + CC
D = D + DD

end /* 結束對I的循環*/

輸出結果。

❽ java.net.SocketException: Broken pipe問題

有可能是linux的線程機制會產生JVM出錯的問題,特別是在連接高峰期間經常出現這樣的問題,tomcat在linux下也出現類似情況。

解決辦法是在環境變數中設置:_JAVA_SR_SIGNUM=12 基本就可以解決。
sun的解釋:
--posted by: cooper
Below is a clipping from Sun on working around JVM crashes under high
thread counts in the JVM 1.3 for Linux

On Linux, use a larger signal number for hotspot thread
suspension/resumption handler. The signal number being used is
specified by environment variable _JAVA_SR_SIGNUM. Setting it to a
number larger than SIGSEGV (11) will solve the problem. A good number
to use is 12, which is SIGUSR2. Using signal 16 to work around the
problem might have potential problems. So on tcsh, "setenv
_JAVA_SR_SIGNUM 12" can solve the problem.

❾ Linux環境下,java怎麼調用R語言

1、下載wgethttp://mirror.bjtu.e.cn/cran/src/base/R-3/R-3.0.1.tar.gz2、解壓:tar-zxvfR-3.0.1.tar.gzcdR-3.0.13、安裝(當然也可以跳過)yuminstallreadline-develyuminstalllibXt-devel./configure4、配置環境並編譯安裝#如果使用rJava需要加上--enable-R-shlib(這個我不需要,所以加入到後面)#如果3沒安裝,那麼後面加上:--with-readline=no--with-x=no./configure--prefix=/usr/R-3.0.1make$$makeinstall5、配置環境變數並生效vi.bash_profileexportR_HOME=/usr/R-3.0.1exportPATH=.:$R_HOME/bin:$PATH#試環境變數生效source.bash_profile6、命令行測試[admin@JDsoftware]$RWARNING:ignoringenvironmentvalueofR_HOMERversion3.0.1(2013-05-16)--"GoodSport"Copyright(C):x86_64-unknown-linux-gnu(64-bit)R是自由軟體,不帶任何擔保。在某些條件下你可以將其自由散布。用'license()'或'licence()'來看散布的詳細條件。R是個合作計劃,有許多人為之做出了貢獻.用'contributors()'來看合作者的詳細情況用'citation()'會告訴你如何在出版物中正確地引用R或R程序包。用'demo()'來看一些示範程序,用'help()'來閱讀在線幫助文件,或用'help.start()'通過HTML瀏覽器來看幫助文件。用'q()'退出R.>q()7、創建腳本測試(t.R)cd/opt/script/Rvimt.R#!/path/to/Rscript#第一行x<-c(1,2,3)#R語言代碼y<-c(102,299,301)model<-lm(y~x)summary(model)8、測試:執行腳本RCMDBATCH--args/opt/script/R/t.Rmore/opt/script/R/t.Rout#查看執行的結果或者第二種方式Rscript/opt/script/R/test.R#結果直接輸出到終端

❿ 怎麼打開jdp格式文件

1、首先在電腦上雙擊打開格式工廠,進入主頁面。

熱點內容
2013年二級c語言真題 發布:2024-10-08 10:44:47 瀏覽:242
linux的locale 發布:2024-10-08 10:44:36 瀏覽:91
2rsa演算法 發布:2024-10-08 10:29:53 瀏覽:542
南京社保密碼多少 發布:2024-10-08 10:21:01 瀏覽:472
國內的少兒編程 發布:2024-10-08 10:21:00 瀏覽:520
vscode編譯調試閃退 發布:2024-10-08 10:19:27 瀏覽:671
oracle資料庫用戶許可權 發布:2024-10-08 09:46:00 瀏覽:708
立方的演算法口訣 發布:2024-10-08 09:44:30 瀏覽:820
python輸入到excel表格 發布:2024-10-08 09:36:31 瀏覽:285
腳本拒絕訪問閃退 發布:2024-10-08 09:34:55 瀏覽:939