導航:首頁 > 編程語言 > javaeai

javaeai

發布時間:2022-12-20 01:17:30

㈠ 用java來實現單點登錄大概有哪些種方法

1 什麼是單點登陸
單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
較大的企業內部,一般都有很多的業務支持系統為其提供相應的管理和IT服 務。例如財務系統為財務人員提供財務的管理、計算和報表服務;人事系統為人事部門提供全公司人員的維護服務;各種業務系統為公司內部不同的業務提供不同的 服務等等。這些系統的目的都是讓計算機來進行復雜繁瑣的計算工作,來替代人力的手工勞動,提高工作效率和質量。這些不同的系統往往是在不同的時期建設起來 的,運行在不同的平台上;也許是由不同廠商開發,使用了各種不同的技術和標准。如果舉例說國內一著名的IT公司(名字隱去),內部共有60多個業務系統,這些系統包括兩個不同版本的SAP的ERP系統,12個不同類型和版本的資料庫系統,8個不同類型和版本的操作系統,以及使用了3種不同的防火牆技術,還有數十種互相不能兼容的協議和標准,你相信嗎?不要懷疑,這種情況其實非常普遍。每一個應用系統在運行了數年以後,都會成為不可替換的企業IT架構的一部分,如下圖所示。

隨 著企業的發展,業務系統的數量在不斷的增加,老的系統卻不能輕易的替換,這會帶來很多的開銷。其一是管理上的開銷,需要維護的系統越來越多。很多系統的數 據是相互冗餘和重復的,數據的不一致性會給管理工作帶來很大的壓力。業務和業務之間的相關性也越來越大,例如公司的計費系統和財務系統,財務系統和人事系 統之間都不可避免的有著密切的關系。
為了降低管理的消耗,最大限度的重用已有投資的系統,很多企業都在進行著企業應用集成(EAI)。 企業應用集成可以在不同層面上進行:例如在數據存儲層面上的「數據大集中」,在傳輸層面上的「通用數據交換平台」,在應用層面上的「業務流程整合」,和用 戶界面上的「通用企業門戶」等等。事實上,還用一個層面上的集成變得越來越重要,那就是「身份認證」的整合,也就是「單點登錄」。
通常來說,每個單獨的系統都會有自己的安全體系和身份認證系統。整合以前,進入每個系統都需要進行登錄,這樣的局面不僅給管理上帶來了很大的困難,在安全方面也埋下了重大的隱患。下面是一些著名的調查公司顯示的統計數據:
用戶每天平均 16 分鍾花在身份驗證任務上 - 資料來源: IDS
頻繁的 IT 用戶平均有 21 個密碼 - 資料來源: NTA Monitor Password Survey
49% 的人寫下了其密碼,而 67% 的人很少改變它們
每 79 秒出現一起身份被竊事件 - 資料來源:National Small Business Travel Assoc
全球欺騙損失每年約 12B - 資料來源:Comm Fraud Control Assoc
到 2007 年,身份管理市場將成倍增長至 $4.5B - 資料來源:IDS

使用「單點登錄」整合後,只需要登錄一次就可以進入多個系統,而不需要重新登錄,這不僅僅帶來了更好的用戶體驗,更重要的是降低了安全的風險和管理的消耗。請看下面的統計數據:
提高 IT 效率:對於每 1000 個受管用戶,每用戶可節省$70K
幫助台呼叫減少至少1/3,對於 10K 員工的公司,每年可以節省每用戶 $75,或者合計 $648K
生產力提高:每個新員工可節省 $1K,每個老員工可節省 $350 �資料來源:Giga
ROI 回報:7.5 到 13 個月 �資料來源:Gartner

另外,使用「單點登錄」還是SOA時代的需求之一。在面向服務的架構中,服務和服務之間,程序和程序之間的通訊大量存在,服務之間的安全認證是SOA應用的難點之一,應此建立「單點登錄」的系統體系能夠大大簡化SOA的安全問題,提高服務之間的合作效率。
2 單點登陸的技術實現機制
隨著SSO技術的流行,SSO的產品也是滿天飛揚。所有著名的軟體廠商都提供了相應的解決方案。在這里我並不想介紹自己公司(Sun Microsystems)的產品,而是對SSO技術本身進行解析,並且提供自己開發這一類產品的方法和簡單演示。有關我寫這篇文章的目的,請參考我的博客(http://yuwang881.blog.sohu.com/3184816.html)。
單 點登錄的機制其實是比較簡單的,用一個現實中的例子做比較。頤和園是北京著名的旅遊景點,也是我常去的地方。在頤和園內部有許多獨立的景點,例如「蘇州 街」、「佛香閣」和「德和園」,都可以在各個景點門口單獨買票。很多遊客需要遊玩所有德景點,這種買票方式很不方便,需要在每個景點門口排隊買票,錢包拿 進拿出的,容易丟失,很不安全。於是絕大多數遊客選擇在大門口買一張通票(也叫套票),就可以玩遍所有的景點而不需要重新再買票。他們只需要在每個景點門 口出示一下剛才買的套票就能夠被允許進入每個獨立的景點。
單點登錄的機制也一樣,如下圖所示,當用戶第一次訪問應用系統1的時候,因為還沒有登錄,會被引導到認證系統中進行登錄(1);根據用戶提供的登錄信息,認證系統進行身份效驗,如果通過效驗,應該返回給用戶一個認證的憑據--ticket(2);用戶再訪問別的應用的時候(3,5)就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之後會把ticket送到認證系統進行效驗,檢查ticket的合法性(4,6)。如果通過效驗,用戶就可以在不用再次登錄的情況下訪問應用系統2和應用系統3了。

從上面的視圖可以看出,要實現SSO,需要以下主要的功能:
所有應用系統共享一個身份認證系統。
統一的認證系統是SSO的前提之一。認證系統的主要功能是將用戶的登錄信息和用戶信息庫相比較,對用戶進行登錄認證;認證成功後,認證系統應該生成統一的認證標志(ticket),返還給用戶。另外,認證系統還應該對ticket進行效驗,判斷其有效性。
所有應用系統能夠識別和提取ticket信息
要實現SSO的功能,讓用戶只登錄一次,就必須讓應用系統能夠識別已經登錄過的用戶。應用系統應該能對ticket進行識別和提取,通過與認證系統的通訊,能自動判斷當前用戶是否登錄過,從而完成單點登錄的功能。

上面的功能只是一個非常簡單的SSO架構,在現實情況下的SSO有著更加復雜的結構。有兩點需要指出的是:
單一的用戶信息資料庫並不是必須的,有許多系統不能將所有的用戶信息都集中存儲,應該允許用戶信息放置在不同的存儲中,如下圖所示。事實上,只要統一認證系統,統一ticket的產生和效驗,無論用戶信息存儲在什麼地方,都能實現單點登錄。

統一的認證系統並不是說只有單個的認證伺服器,如下圖所示,整個系統可以存在兩個以上的認證伺服器,這些伺服器甚至可以是不同的產品。認證伺服器之間要通過標準的通訊協議,互相交換認證信息,就能完成更高級別的單點登錄。如下圖,當用戶在訪問應用系統1時,由第一個認證伺服器進行認證後,得到由此伺服器產生的ticket。當他訪問應用系統4的時候,認證伺服器2能夠識別此ticket是由第一個伺服器產生的,通過認證伺服器之間標準的通訊協議(例如SAML)來交換認證信息,仍然能夠完成SSO的功能。

3 WEB-SSO的實現
隨著互聯網的高速發展,WEB應用幾乎統治了絕大部分的軟體應用系統,因此WEB-SSO是SSO應用當中最為流行。WEB-SSO有其自身的特點和優勢,實現起來比較簡單易用。很多商業軟體和開源軟體都有對WEB-SSO的實現。其中值得一提的是OpenSSO (https://opensso.dev.java.net),為用Java實現WEB-SSO提供架構指南和服務指南,為用戶自己來實現WEB-SSO提供了理論的依據和實現的方法。
為什麼說WEB-SSO比較容易實現呢?這是有WEB應用自身的特點決定的。
眾所周知,Web協議(也就是HTTP)是一個無狀態的協議。一個Web應用由很多個Web頁面組成,每個頁面都有唯一的URL來定義。用戶在瀏覽器的地址欄輸入頁面的URL,瀏覽器就會向Web Server去發送請求。如下圖,瀏覽器向Web伺服器發送了兩個請求,申請了兩個頁面。這兩個頁面的請求是分別使用了兩個單獨的HTTP連接。所謂無狀態的協議也就是表現在這里,瀏覽器和Web伺服器會在第一個請求完成以後關閉連接通道,在第二個請求的時候重新建立連接。Web伺服器並不區分哪個請求來自哪個客戶端,對所有的請求都一視同仁,都是單獨的連接。這樣的方式大大區別於傳統的(Client/Server)C/S結構,在那樣的應用中,客戶端和伺服器端會建立一個長時間的專用的連接通道。正是因為有了無狀態的特性,每個連接資源能夠很快被其他客戶端所重用,一台Web伺服器才能夠同時服務於成千上萬的客戶端。

但是我們通常的應用是有狀態的。先不用提不同應用之間的SSO,在同一個應用中也需要保存用戶的登錄身份信息。例如用戶在訪問頁面1的時候進行了登錄,但是剛才也提到,客戶端的每個請求都是單獨的連接,當客戶再次訪問頁面2的時候,如何才能告訴Web伺服器,客戶剛才已經登錄過了呢?瀏覽器和伺服器之間有約定:通過使用cookie技術來維護應用的狀態。Cookie是可以被Web伺服器設置的字元串,並且可以保存在瀏覽器中。如下圖所示,當瀏覽器訪問了頁面1時,web伺服器設置了一個cookie,並將這個cookie和頁面1一起返回給瀏覽器,瀏覽器接到cookie之後,就會保存起來,在它訪問頁面2的時候會把這個cookie也帶上,Web伺服器接到請求時也能讀出cookie的值,根據cookie值的內容就可以判斷和恢復一些用戶的信息狀態。

Web-SSO完全可以利用Cookie結束來完成用戶登錄信息的保存,將瀏覽器中的Cookie和上文中的Ticket結合起來,完成SSO的功能。

為了完成一個簡單的SSO的功能,需要兩個部分的合作:
統一的身份認證服務。
修改Web應用,使得每個應用都通過這個統一的認證服務來進行身份效驗。
3.1 Web SSO 的樣例
根據上面的原理,我用J2EE的技術(JSP和Servlet)完成了一個具有Web-SSO的簡單樣例。樣例包含一個身份認證的伺服器和兩個簡單的Web應用,使得這兩個 Web應用通過統一的身份認證服務來完成Web-SSO的功能。此樣例所有的源代碼和二進制代碼都可以從網站地址http://gceclub.sun.com.cn/wangyu/ 下載。

樣例下載、安裝部署和運行指南:
Web-SSO的樣例是由三個標准Web應用組成,壓縮成三個zip文件,從http://gceclub.sun.com.cn/wangyu/web-sso/中下載。其中SSOAuth(http://gceclub.sun.com.cn/wangyu/web-sso/SSOAuth.zip)是身份認證服務;SSOWebDemo1(http://gceclub.sun.com.cn/wangyu/web-sso/SSOWebDemo1.zip)和SSOWebDemo2(http://gceclub.sun.com.cn/wangyu/web-sso/SSOWebDemo2.zip)是兩個用來演示單點登錄的Web應用。這三個Web應用之所以沒有打成war包,是因為它們不能直接部署,根據讀者的部署環境需要作出小小的修改。樣例部署和運行的環境有一定的要求,需要符合Servlet2.3以上標準的J2EE容器才能運行(例如Tomcat5,Sun Application Server 8, Jboss 4等)。另外,身份認證服務需要JDK1.5的運行環境。之所以要用JDK1.5是因為筆者使用了一個線程安全的高性能的Java集合類「ConcurrentMap」,只有在JDK1.5中才有。
這三個Web應用完全可以單獨部署,它們可以分別部署在不同的機器,不同的操作系統和不同的J2EE的產品上,它們完全是標準的和平台無關的應用。但是有一個限制,那兩台部署應用(demo1、demo2)的機器的域名需要相同,這在後面的章節中會解釋到cookie和domain的關系以及如何製作跨域的WEB-SSO
解壓縮SSOAuth.zip文件,在/WEB-INF/下的web.xml中請修改「domainname」的屬性以反映實際的應用部署情況,domainname需要設置為兩個單點登錄的應用(demo1和demo2)所屬的域名。這個domainname和當前SSOAuth服務部署的機器的域名沒有關系。我預設設置的是「.sun.com」。如果你部署demo1和demo2的機器沒有域名,請輸入IP地址或主機名(如localhost),但是如果使用IP地址或主機名也就意味著demo1和demo2需要部署到一台機器上了。設置完後,根據你所選擇的J2EE容器,可能需要將SSOAuth這個目錄壓縮打包成war文件。用「jar -cvf SSOAuth.war SSOAuth/」就可以完成這個功能。
解壓縮SSOWebDemo1和SSOWebDemo2文件,分別在它們/WEB-INF/下找到web.xml文件,請修改其中的幾個初始化參數
<init-param>
<param-name>SSOServiceURL</param-name>
<param-value>http://wangyu.prc.sun.com:8080/SSOAuth/SSOAuth</param-value>
</init-param>
<init-param>
<param-name>SSOLoginPage</param-name>
<param-value>http://wangyu.prc.sun.com:8080/SSOAuth/login.jsp</param-value>
</init-param>
將其中的SSOServiceURL和SSOLoginPage修改成部署SSOAuth應用的機器名、埠號以及根路徑(預設是SSOAuth)以反映實際的部署情況。設置完後,根據你所選擇的J2EE容器,可能需要將SSOWebDemo1和SSOWebDemo2這兩個目錄壓縮打包成兩個war文件。用「jar -cvf SSOWebDemo1.war SSOWebDemo1/」就可以完成這個功能。
請輸入第一個web應用的測試URL(test.jsp),例如http://wangyu.prc.sun.com:8080/ SSOWebDemo1/test.jsp,如果是第一次訪問,便會自動跳轉到登錄界面,如下圖

使用系統自帶的三個帳號之一登錄(例如,用戶名:wangyu,密碼:wangyu),便能成功的看到test.jsp的內容:顯示當前用戶名和歡迎信息。

請接著在同一個瀏覽器中輸入第二個web應用的測試URL(test.jsp),例如http://wangyu.prc.sun.com:8080/ SSOWebDemo2/test.jsp。你會發現,不需要再次登錄就能看到test.jsp的內容,同樣是顯示當前用戶名和歡迎信息,而且歡迎信息中明確的顯示當前的應用名稱(demo2)。

3.2 WEB-SSO代碼講解
3.2.1身份認證服務代碼解析
Web-SSO的源代碼可以從網站地址http://gceclub.sun.com.cn/wangyu/web-sso/websso_src.zip下載。身份認證服務是一個標準的web應用,包括一個名為SSOAuth的Servlet,一個login.jsp文件和一個failed.html。身份認證的所有服務幾乎都由SSOAuth的Servlet來實現了;login.jsp用來顯示登錄的頁面(如果發現用戶還沒有登錄過);failed.html是用來顯示登錄失敗的信息(如果用戶的用戶名和密碼與信息資料庫中的不一樣)。
SSOAuth的代碼如下面的列表顯示,結構非常簡單,先看看這個Servlet的主體部分:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

package DesktopSSO;

import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class SSOAuth extends HttpServlet {

static private ConcurrentMap accounts;
static private ConcurrentMap SSOIDs;
String cookiename="WangYuDesktopSSOID";
String domainname;

public void init(ServletConfig config) throws ServletException {
super.init(config);
domainname= config.getInitParameter("domainname");
cookiename = config.getInitParameter("cookiename");
SSOIDs = new ConcurrentHashMap();
accounts=new ConcurrentHashMap();
accounts.put("wangyu", "wangyu");
accounts.put("paul", "paul");
accounts.put("carol", "carol");
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
String action = request.getParameter("action");
String result="failed";
if (action==null) {
handlerFromLogin(request,response);
} else if (action.equals("authcookie")){
String myCookie = request.getParameter("cookiename");
if (myCookie != null) result = authCookie(myCookie);
out.print(result);
out.close();
} else if (action.equals("authuser")) {
result=authNameAndPasswd(request,response);
out.print(result);
out.close();
} else if (action.equals("logout")) {
String myCookie = request.getParameter("cookiename");
logout(myCookie);
out.close();
}
}

.....

}

從代碼很容易看出,SSOAuth就是一個簡單的Servlet。其中有兩個靜態成員變數:accounts和SSOIDs,這兩個成員變數都使用了JDK1.5中線程安全的MAP類: ConcurrentMap,所以這個樣例一定要JDK1.5才能運行。Accounts用來存放用戶的用戶名和密碼,在init()的方法中可以看到我給系統添加了三個合法的用戶。在實際應用中,accounts應該是去資料庫中或LDAP中獲得,為了簡單起見,在本樣例中我使用了ConcurrentMap在內存中用程序創建了三個用戶。而SSOIDs保存了在用戶成功的登錄後所產生的cookie和用戶名的對應關系。它的功能顯而易見:當用戶成功登錄以後,再次訪問別的系統,為了鑒別這個用戶請求所帶的cookie的有效性,需要到SSOIDs中檢查這樣的映射關系是否存在。

在主要的請求處理方法processRequest()中,可以很清楚的看到SSOAuth的所有功能
如果用戶還沒有登錄過,是第一次登錄本系統,會被跳轉到login.jsp頁面(在後面會解釋如何跳轉)。用戶在提供了用戶名和密碼以後,就會用handlerFromLogin()這個方法來驗證。
如果用戶已經登錄過本系統,再訪問別的應用的時候,是不需要再次登錄的。因為瀏覽器會將第一次登錄時產生的cookie和請求一起發送。效驗cookie的有效性是SSOAuth的主要功能之一。
SSOAuth還能直接效驗非login.jsp頁面過來的用戶名和密碼的效驗請求。這個功能是用於非web應用的SSO,這在後面的桌面SSO中會用到。
SSOAuth還提供logout服務。

㈡ 用java如何做用友U8的eai二次開發

EAI二次開發可分為兩種模式:
1)直接利用EAI管理工具:
在開始菜單中選擇企業應用集成工具,登錄企業應用集成主界面。在這里可以將U8數據以標准XML文件的形式導出U8資料庫或將標准XML數據文件導入U8系統。二次開發程序員只需編寫一個工具將標准XML數據文件進行適當轉換寫入外部系統或取出外部系統數據寫成標准XML數據文件。
提示:EAI安裝目錄\xml\Samples\下為所有按EAI標准模版生成的實例文件。
2)利用EAI提供的組件,進行靈活的二次開發:包括兩種方式:本地COM方式、Internet方式。
樓主可以想下Java是否可以實現?

㈢ 調用eai同步核心征管出錯:java.lang.exception:失敗是什麼意思

1. java.lang.nullpointerexception
這個異常大家肯定都經常遇到,異常的解釋是"程序遇上了空指針",簡單地說就是調用了未經初始化的對象或者是不存在的對象,這個錯誤經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針,很多情況下是一些剛開始學習編程的朋友常犯的錯誤,即把數組的初始化和數組元素的初始化混淆起來了。數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化,依然是空的,所以還需要對每個元素都進行初始化(如果要調用的話)

2. java.lang.classnotfoundexception
這個異常是很多原本在jb等開發環境中開發的程序員,把jb下的程序包放在wtk下編譯經常出現的問題,異常的解釋是"指定的類不存在",這里主要考慮一下類的名稱和路徑是否正確即可,如果是在jb下做的程序包,一般都是默認加上package的,所以轉到wtk下後要注意把package的路徑加上。

3. java.lang.arithmeticexception
這個異常的解釋是"數學運算異常",比如程序中出現了除以零這樣的運算就會出這樣的異常,對這種異常,大家就要好好檢查一下自己程序中涉及到數學運算的地方,公式是不是有不妥了。

4. java.lang.
這個異常相信很多朋友也經常遇到過,異常的解釋是"數組下標越界",現在程序中大多都有對數組的操作,因此在調用數組的時候一定要認真檢查,看自己調用的下標是不是超出了數組的范圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候,最好先查看一下數組的length,以免出現這個異常。

5. java.lang.illegalargumentexception
這個異常的解釋是"方法的參數錯誤",很多j2me的類庫中的方法在一些情況下都會引發這樣的錯誤,比如音量調節方法中的音量參數如果寫成負數就會出現這個異常,再比如g.setcolor(int red,int green,int blue)這個方法中的三個值,如果有超過255的也會出現這個異常,因此一旦發現這個異常,我們要做的,就是趕緊去檢查一下方法調用中的參數傳遞是不是出現了錯誤。

6. java.lang.illegalaccessexception
這個異常的解釋是"沒有訪問許可權",當應用程序要調用一個類,但當前的方法即沒有對該類的訪問許可權便會出現這個異常。對程序中用了package的情況下要注意這個異常。

其他還有很多異常,我就不一一列舉了,我要說明的是,一個合格的程序員,需要對程序中常見的問題有相當的了解和相應的解決辦法,否則僅僅停留在寫程序而不會改程序的話,會極大影響到自己的開發的。關於異常的全部說明,在api里都可以查閱。

算術異常類:ArithmeticExecption

空指針異常類:NullPointerException

類型強制轉換異常:ClassCastException

數組負下標異常:NegativeArrayException

數組下標越界異常:

違背安全原則異常:SecturityException

文件已結束異常:EOFException

文件未找到異常:FileNotFoundException

字元串轉換為數字異常:NumberFormatException

操作資料庫異常:SQLException

輸入輸出異常:IOException

方法未找到異常:NoSuchMethodException

java.lang.AbstractMethodError

抽象方法錯誤。當應用試圖調用抽象方法時拋出。

java.lang.AssertionError

斷言錯。用來指示一個斷言失敗的情況。

java.lang.ClassCircularityError

類循環依賴錯誤。在初始化一個類時,若檢測到類之間循環依賴則拋出該異常。

java.lang.ClassFormatError

類格式錯誤。當Java虛擬機試圖從一個文件中讀取Java類,而檢測到該文件的內容不符合類的有效格式時拋出。

java.lang.Error

錯誤。是所有錯誤的基類,用於標識嚴重的程序運行問題。這些問題通常描述一些不應被應用程序捕獲的反常情況。

java.lang.ExceptionInInitializerError

初始化程序錯誤。當執行一個類的靜態初始化程序的過程中,發生了異常時拋出。靜態初始化程序是指直接包含於類中的static語句段。

java.lang.IllegalAccessError

違法訪問錯誤。當一個應用試圖訪問、修改某個類的域(Field)或者調用其方法,但是又違反域或方法的可見性聲明,則拋出該異常。

java.lang.IncompatibleClassChangeError

不兼容的類變化錯誤。當正在執行的方法所依賴的類定義發生了不兼容的改變時,拋出該異常。一般在修改了應用中的某些類的聲明定義而沒有對整個應用重新編譯而直接運行的情況下,容易引發該錯誤。

java.lang.InstantiationError

實例化錯誤。當一個應用試圖通過Java的new操作符構造一個抽象類或者介面時拋出該異常.

java.lang.InternalError

內部錯誤。用於指示Java虛擬機發生了內部錯誤。

java.lang.LinkageError

鏈接錯誤。該錯誤及其所有子類指示某個類依賴於另外一些類,在該類編譯之後,被依賴的類改變了其類定義而沒有重新編譯所有的類,進而引發錯誤的情況。

java.lang.NoClassDefFoundError

未找到類定義錯誤。當Java虛擬機或者類裝載器試圖實例化某個類,而找不到該類的定義時拋出該錯誤。

java.lang.NoSuchFieldError

域不存在錯誤。當應用試圖訪問或者修改某類的某個域,而該類的定義中沒有該域的定義時拋出該錯誤。

java.lang.NoSuchMethodError

方法不存在錯誤。當應用試圖調用某類的某個方法,而該類的定義中沒有該方法的定義時拋出該錯誤。

java.lang.OutOfMemoryError

內存不足錯誤。當可用內存不足以讓Java虛擬機分配給一個對象時拋出該錯誤。

java.lang.StackOverflowError

堆棧溢出錯誤。當一個應用遞歸調用的層次太深而導致堆棧溢出時拋出該錯誤。

java.lang.ThreadDeath

線程結束。當調用Thread類的stop方法時拋出該錯誤,用於指示線程結束。

java.lang.UnknownError

未知錯誤。用於指示Java虛擬機發生了未知嚴重錯誤的情況。

java.lang.UnsatisfiedLinkError

未滿足的鏈接錯誤。當Java虛擬機未找到某個類的聲明為native方法的本機語言定義時拋出。

java.lang.UnsupportedClassVersionError

不支持的類版本錯誤。當Java虛擬機試圖從讀取某個類文件,但是發現該文件的主、次版本號不被當前Java虛擬機支持的時候,拋出該錯誤。

java.lang.VerifyError

驗證錯誤。當驗證器檢測到某個類文件中存在內部不兼容或者安全問題時拋出該錯誤。

java.lang.VirtualMachineError

虛擬機錯誤。用於指示虛擬機被破壞或者繼續執行操作所需的資源不足的情況。

java.lang.ArithmeticException

算術條件異常。譬如:整數除零等。

java.lang.

數組索引越界異常。當對數組的索引值為負數或大於等於數組大小時拋出。

java.lang.ArrayStoreException

數組存儲異常。當向數組中存放非數組聲明類型對象時拋出。

java.lang.ClassCastException

類造型異常。假設有類A和B(A不是B的父類或子類),O是A的實例,那麼當強制將O構造為類B的實例時拋出該異常。該異常經常被稱為強制類型轉換異常。

java.lang.ClassNotFoundException

找不到類異常。當應用試圖根據字元串形式的類名構造類,而在遍歷CLASSPAH之後找不到對應名稱的class文件時,拋出該異常。

java.lang.CloneNotSupportedException

不支持克隆異常。當沒有實現Cloneable介面或者不支持克隆方法時,調用其clone()方法則拋出該異常。

java.lang.

枚舉常量不存在異常。當應用試圖通過名稱和枚舉類型訪問一個枚舉對象,但該枚舉對象並不包含常量時,拋出該異常。

java.lang.Exception

根異常。用以描述應用程序希望捕獲的情況。

java.lang.IllegalAccessException

違法的訪問異常。當應用試圖通過反射方式創建某個類的實例、訪問該類屬性、調用該類方法,而當時又無法訪問類的、屬性的、方法的或構造方法的定義時拋出該異常。

java.lang.IllegalMonitorStateException

違法的監控狀態異常。當某個線程試圖等待一個自己並不擁有的對象(O)的監控器或者通知其他線程等待該對象(O)的監控器時,拋出該異常。

java.lang.IllegalStateException

違法的狀態異常。當在Java環境和應用尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出該異常。

java.lang.IllegalThreadStateException

違法的線程狀態異常。當縣城尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出異常。

java.lang.IndexOutOfBoundsException

索引越界異常。當訪問某個序列的索引值小於0或大於等於序列大小時,拋出該異常。

java.lang.InstantiationException

實例化異常。當試圖通過newInstance()方法創建某個類的實例,而該類是一個抽象類或介面時,拋出該異常。

java.lang.InterruptedException

被中止異常。當某個線程處於長時間的等待、休眠或其他暫停狀態,而此時其他的線程通過Thread的interrupt方法終止該線程時拋出該異常。

java.lang.NegativeArraySizeException

數組大小為負值異常。當使用負數大小值創建數組時拋出該異常。

java.lang.NoSuchFieldException

屬性不存在異常。當訪問某個類的不存在的屬性時拋出該異常。

java.lang.NoSuchMethodException

方法不存在異常。當訪問某個類的不存在的方法時拋出該異常。

java.lang.NullPointerException

空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的屬性、計算null對象的長度、使用throw語句拋出null等等。

java.lang.NumberFormatException

數字格式異常。當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常。

java.lang.RuntimeException

運行時異常。是所有Java虛擬機正常操作期間可以被拋出的異常的父類。

java.lang.SecurityException

安全異常。由安全管理器拋出,用於指示違反安全情況的異常。

java.lang.

字元串索引越界異常。當使用索引值訪問某個字元串中的字元,而該索引值小於0或大於等於序列大小時,拋出該異常。

java.lang.TypeNotPresentException

㈣ 什麼是EAI

EAI是將基於各種不同平台、用不同方案建立的異構應用集成的一種方法和技術。EAI通過建立底層結構,來聯系橫貫整個企業的異構系統、應用、數據源等,完成在企業內部的 ERP、CRM、SCM、資料庫、數據倉庫,以及其他重要的內部系統之間無縫地共享和交換數據的需要。有了 EAI,企業就可以將企業核心應用和新的Internet解決方案結合在一起。
EAI(企業應用集成)將進程、軟體、標准和硬體聯合起來,在兩個或更多的企業系統之間實現無縫集成,使它們就像一個整體一樣。盡管EAI常常表現為對一個商業實體(例如一家公司)的信息系統進行業務應用集成,但當在多個企業系統之間進行商務交易的時候,EAI也表現為不同公司實體之間的企業系統集成,例如B2B的電子商務。
EAI的簡要歷史
在20世紀60年代到70年代期間,企業應用大多是用來替代重復性勞動的一些簡單設計。當時並沒有考慮到企業數據的集成,惟一的目標就是用計算機代替一些孤立的、體力性質的工作環節。
到了20世紀80年代,有些公司開始意識到應用集成的價值和必要性。這是一 種挑戰,很多公司的技術人員都試圖在企業系統整體概念的指導下對已經存在的應用進行重新設計,以便讓它們集成在一起。然而這種努力收效甚微。20世紀90年代,ERP應用開始流行的時候,同時也要求它們能夠支持已經存在的應用和數據,這就必須引入EAI。所以說,EAI的發展是合乎邏輯的,企 業利用客戶機/伺服器技術實現了分布應用,但後來認識到連接多樣業務處理的好處。其他推動EAI市場的因素還有應用軟體包的發展、針對Y2K問題的應用、供應鏈管理(B2B集成)、流式業務處理以及Web應用集成。
EAI的內容EAI包括的內容很復雜,涉及到結構、硬體、軟體以及流程等企業系統的各個層面。
● 業務過程集成 當對業務過程進行集成的時候,企業必須在各種業務系統中定義、授權和管理各種業務信息的交換,以便改進操作、減少成本、提高響應速度。業務過程集成包括業務管理、進程模擬以及綜合任務、流程、組 織和進出信息的工作流,還包括業務處理中每一步都需要的工具。
● 應用集成 為兩個應用中的數據和函數提供接近實時的集成。在一些B2B 集成中用來實現CRM系統與企業後端應用和Web的集成,構建能夠充分利用多個業務系統資源的電子商務網站。
● 數據集成 為了完成應用集成和業務過程集成,必須首先解決數據和資料庫的集成問題。在集成之前,必須首先對數據進行標識並編成目錄,另外還要確定元數據模型。這三步完成以後,數據才能在資料庫系統中分布和共享。
● 集成的標准 要實現完全的數據集成,必須首先選擇數據的標准格式。集 成的標准化促成了信息和業務數據的共享和分布,構成了企業應用集成的核心,包括COM+/DCOM、CORBA、EDI、JavaRMI和XML。
● 平台集成 要實現系統的集成,底層的結構、軟體、硬體以及異構網路的特殊需求都必須得到集成。平台集成處理一些過程和工具,以保證這些系統進行快速安全的通信。
EAI實施10條准則准則1:Align Plans to Strategy
制定短期計劃和長期策略准則2:Consolidate First, Integrate Second
聯合為先,整合在後准則3:Use a process-driven approach to develop end-to-end solutions.
採用流程驅動方式來開發端到端解決方案准則4:Establish clear lines of ownership and accountability.
確定明晰的屬主和責任准則5:Enforce EAI architecture
明確EAI體系結構准則6:Mandate integration requirements for new applications
在新應用中考慮整合需求准則7:Develop a common representation of data and process.
建立數據和過程的通用表示准則8:Test early and often
早測試,常測試准則9:Re-factor interfaces constantly so they never become legacy
經常重構系統介面,防止過時准則10:Evolve business practices through experimentation.通過實踐演化業務流程

㈤ java課程分享為什麼java語言位居首位

在互聯網快速發展的今天,也帶動了IT行業的發展,IT行業不僅發展前景好而且薪資待遇也比其他行業高,這也成為人們羨慕的原因。java課程http://www.kmbdqn.com/認為在IT行業眾多編程語言中為什麼java語言位居首位?java的應用為什麼如此廣泛,下面一起來分析一下原因:

一、從Java語言特性上看:


Java具有通用性、高效性、平台移植性和安全性,Java是一種可以撰寫跨平台應用軟體的面向對象的程序設計語言,廣泛應用於個人PC、數據中心、游戲控制台、科學超級計算機、行動電話和互聯網。在全球雲計算和移動互聯網的產業環境下,Java更具備了顯著優勢和廣闊前景。


二、從Java程序員的發展方向


Java可以發現更好的方向,IT業不斷有新東西出現。用Java系列語言比用C系列語言更時尚,用面向對象(或構件)的方法比面向過程的方法更先進,還有Delphi、.net、eLearning等開發工具,更有ERP(企業資源計劃)、CRM(客戶關系管理)、SCM(供應鏈管理)、CPC(協同產品商務)、BIS(商業智能系統)、EAI(企業應用集成)、EIP(企業信息門戶)等層出不窮的新概念。當然只會編程是不夠的,仔細思考在哪個商業領域投入時間。


只有了解了一個行業後,你才能創造性地有所建樹。多學習新的技術,編程語言,可以改變你的思維方式。成為一名專家不僅應該會處理高端抽象,同時也應該了解實現高端抽象的低端細節。


為什麼java語言位居首位?Java是現在大型軟體項目中的主角,市場用人需求量大。大家都知道21世紀進入信息時代,信息科技給人類的生產和生活方式帶來了深刻的變革,信息產業已成為推動國家經濟發展的主導產業之一,為此,從就業前景,發展方向等多方面來看,學Java編程無疑是最佳選擇。


㈥ java的經典書籍有哪些呀

一、Java編程入門類
對於沒有Java編程經驗的程序員要入門,隨便讀什麼入門書籍都一樣,這個階段需要你快速的掌握Java基礎語法和基本用法,宗旨就是「囫圇吞棗不求甚解」,先對Java熟悉起來再說。用很短的時間快速過一遍Java語法,連懵帶猜多寫寫代碼,要「知其然」。
1、《Java編程思想》
在有了一定的Java編程經驗之後,你需要「知其所以然」了。這個時候《Java編程思想》是一本讓你知其所以然的好書,它對於基本的面向對象知識有比較清楚的交待,對Java基本語法,基本類庫有比較清楚的講解,可以幫你打一個良好的Java編程基礎。這本書的缺點是實在太厚,也比較羅嗦,不適合現代人快節奏學習,因此看這本書要懂得取捨,不是每章每節都值得一看的,挑重點的深入看就可以了。
2、《Agile Java》中文版
這本書是出版社送給我的,我一拿到就束之高閣,放在書櫃一頁都沒有翻過,但是前兩天整理書櫃的時候,拿出來一翻,竟然發現這絕對是一本好書!這本書一大特點是以單元測試和TDD來貫穿全書的,在教你Java各種重要的基礎知識的過程中,潛移默化的影響你的編程思維走向敏捷,走向TDD。另外這本書成書很新,以JDK5.0的語法為基礎講解,要學習JDK5.0的新語法也不錯。還有這本書對於內容取捨也非常得當,Java語言畢竟類庫龐大,可以講的內容太多,這本書選擇的內容以及內容的多寡都很得當,可以讓你以最少的時間掌握Java最重要的知識,順便培養出來優秀的編程思路,真是一本不可多得的好書。 雖然作者自己把這本書定位在入門級別,但我不確定這本書用來入門是不是稍微深了點,我自己也准備有空的時候翻翻這本書,學習學習。

二、Java編程進階類
打下一個良好的Java基礎,還需要更多的實踐經驗積累,我想沒有什麼捷徑。有兩本書值得你在編程生涯的這個階段閱讀,培養良好的編程習慣,提高你的代碼質量。
1、《重構 改善既有代碼的設計》
這本書名氣很大,不用多介紹,可以在閑暇的時候多翻翻,多和自己的實踐相互印證。這本書對你產生影響是潛移默化的。
2、《測試驅動開發 by Example》
本書最大特點是很薄,看起來沒有什麼負擔。你可以找一個周末的下午,一邊看,一邊照做,一個下午就把書看完,這本書的所有例子跑完了。這本書的作用是通過實戰讓你培養TDD的思路。

三、Java架構師之路
到這個階段,你應該已經非常嫻熟的運用Java編程,而且有了一個良好的編程思路和習慣了,但是你可能還缺乏對應用軟體整體架構的把握,現在就是你邁向架構師的第一步。
1、《Expert One-on-One J2EE Design and Development》
這本書是Rod Johnson的成名著作,非常經典,從這本書中的代碼誕生了springframework。但是好像這本書沒有中譯本。
2、《Expert One-on-One J2EE Development without EJB》
這本書由gigix組織翻譯,多位業界專家參與,雖然署名譯者是JavaEye,其實JavaEye出力不多,實在是忝居譯者之名。
以上兩本書都是Rod Johnson的經典名著,Java架構師的必讀書籍。在我所推薦的這些書籍當中,是我看過的最仔細,最認真的書,我當時讀這本書幾乎是廢寢忘食的一氣讀完的,有小時候挑燈夜讀金庸武俠小說的勁頭,書中所講內容和自己的經驗知識一一印證,又被無比精闢的總結出來,讀完這本書以後,我有種被打通經脈,功力爆增的感覺。
但是後來我看過一些其他人的評價,似乎閱讀體驗並沒有我那麼high,也許是因為每個人的知識積累和經驗不同導致的。我那個時候剛好是經驗知識積累已經足夠豐富,但是還沒有系統的整理成型,讓這本書一梳理,立刻形成完整的知識體系了。
3、《企業應用架構模式》
Martin的又一本名著,但這本書我只是泛泛的看了一遍,並沒有仔細看。這本書似乎更適合做框架的人去看,例如如果你打算自己寫一個ORM的話,這本書是一定要看的。但是做應用的人,不看貌似也無所謂,但是如果有空,我還是推薦認真看看,會讓你知道框架為什麼要這樣設計,這樣你的層次可以晉升到框架設計者的角度去思考問題。Martin的書我向來都是推崇,但是從來都沒有像Rod Johnson的書那樣非常認真去看。
4、《敏捷軟體開發 原則、模式與實踐》
Uncle Bob的名著,敏捷的經典名著,這本書比較特別,與其說是講軟體開發過程的書,不如說講軟體架構的書,本書用了很大篇幅講各種面向對象軟體開發的各種模式,個人以為看了這本書,就不必看GoF的《設計模式》了。

四、軟體開發過程
了解軟體開發過程不單純是提高程序員個人的良好編程習慣,也是增強團隊協作的基礎。
1、《UML精粹》
UML其實和軟體開發過程沒有什麼必然聯系,卻是軟體團隊協作溝通,撰寫軟體文檔需要的工具。但是UML真正實用的圖不多,看看這本書已經足夠了,完全沒有必要去啃《UML用戶指南》之類的東西。要提醒大家的是,這本書的中譯本翻譯的非常之爛,建議有條件的看英文原版。
2、《解析極限編程 擁抱變化》XP
這是Kent Beck名著的第二版,中英文對照。沒什麼好說的,必讀書籍。
3、《統一軟體開發過程》UP
其實UP和敏捷並不一定沖突,UP也非常強調迭代,測試,但是UP強調的文檔和過程驅動卻是敏捷所不取的。不管怎麼說,UP值得你去讀,畢竟在中國真正接受敏捷的企業很少,你還是需要用UP來武裝一下自己的,哪怕是披著UP的XP。
4、《敏捷建模》AM
Scott Ambler的名著,這本書非常的progmatic,告訴你怎麼既敏捷又UP,把敏捷和UP統一起來了,又提出了很多progmatic的建議和做法。你可以把《解析極限編程 擁抱變化》、《統一軟體開發過程》和《敏捷建模》這三本書放在一起讀,看XP和UP的不同點,再看AM是怎麼統一XP和UP的,把這三種理論融為一爐,形成自己的理論體系,那麼你也可以去寫書了。

五、軟體項目管理
如果你突然被領導提拔為項目經理,而你完全沒有項目管理經驗,你肯定會心裡沒底;如果你覺得自己管理項目不善,很想改善你的項目管理能力,那麼去考PMP肯定是遠水不解近渴的。
1、《快速軟體開發》
這也是一本名著。可以這樣說,有本書在手,你就有了一個項目管理的高級參謀給你出謀劃策,再也不必擔心自己不能勝任的問題了。這本書不是講管理的理論的,在實際的項目管理中,講這些理論是不解決問題的,這本書有點類似於「軟體項目點子大全」之類的東西,列舉了種種軟體項目當中面臨的各種問題,以及應該如何解決問題的點子,你只需要稍加變通,找方抓葯就行了。
六、總結
在這份推薦閱讀書籍的名單中,我沒有列舉流行的軟體框架類學習書籍,例如Struts,Hibernate,Spring之類,也沒有列舉AJAX方面的書籍。是因為這類書籍容易過時,而上述的大半書籍的生命周期都足夠長,值得你去購買和收藏。
希望對您有所幫助!~

㈦ 免費的java快速開發平台有哪些

1、通過我對全國三十幾家開發平台廠商的排查,能夠提供免費的確實屈指可數,更可況又要是java又要是主流,找來找去只有一個,就是廣州天翎Myapps平台,他們最近有推出免費版本,但是是永久免費還是免費一端時間建議直接聯系進一步了解呢;
2、我看很多朋友回答中一口咬定不存在免費的,其實不然呢,現在軟體行業的商業模式還是有幾種的,一種是大家知道的直接賣錢(主流),第二種就是產品免費但是通過部分人工服務收費(力軟),第三種就是這兩種的結合體,即把產品劃分出不同版本,較低配置的作為免費版去引流,而高配置的留著賣錢,我猜天翎應該是這種模式,但是有什麼關系呢,對於個人,初創團隊和成長型軟體公司來說,很多小的業務系統只要有開發平台就足夠了!

㈧ java如何查找目錄下是否有特定文件

package com.cn.leng;

import java.io.File;
import java.io.FilenameFilter;

public class ListFile {

private String filepre;//文件前綴

private String filesux;//文件後綴

public void listFile(String dir, String prefix, String suffix){

File fileTarget = new File(dir);//取得目標目錄

filepre = prefix;

filesux =suffix;

if(fileTarget.exists()){//判斷目錄是否存在

File[] fileLogs = fileTarget.listFiles(

new FilenameFilter(){

public boolean accept(File dir, String name) {

return ((name.startsWith(filepre))&&(name.endsWith(filesux)));//使用FilenameFilter類過濾取得滿足指定條件的文件的文件數組

}

}

);

if(fileLogs.length > 0){

for(int i = 0; i<fileLogs.length; i++){

System.out.println(fileLogs[i].getName());

}

}else{

System.err.println("we cant find the file start with:"+ prefix);

System.exit(0);

}

}else{

System.err.print("we cant find the path:"+ fileTarget);

}

}

public static void main(String[] args) {

ListFile lf = new ListFile();

lf.listFile("C:\swserver\ipe113\logs","eai","log");

}

}

㈨ java什麼叫類屬性 實例屬性 以及區別

一個是類的方法(也叫動態屬性)和屬性(靜態屬性),通過類名來訪問
一個是對象的方法和屬性,需要通過一個實例來訪問。
靜態屬性程序一載入時 就初始化 存放在棧中
實例屬性 需要實例化後 才載入 存放在堆中

閱讀全文

與javaeai相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:485
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163