java伺服器高級編程
Ⅰ 求個java編寫的CA
by fleshwound (http://www.smatrix.org)
(註:這是我們的完整設計中的一部分,其它有些部分尚要求保密,希望這個拙文能給做J2EE項目的兄弟們帶來點幫助,有任何關於JAVA安全和密碼學理論和應用的問題可以來我們的論壇:http://bbs.smatrix.org)
近年來,隨著互連網和計算機的普及,電子商務和電子政務成為當今社會生活的重要組成部分,以網上訂購和網上在線支付的為主要功能的網店系統(Web Shop System)是目前電子商務的熱門技術。
JAVA以它「一次編譯,處處運行」的神奇魅力和強大的安全技術支持,很快成為WEB信息系統開發的首選語言,而J2EE就是為了WEB應用開發而誕生的。目前J2EE的應用大部份都是多層結構的, 良好的分層可以帶來很多好處,例如可以使得代碼結構清晰,方便組件復用,可以快速適應應用的新需求。同時,JAVA還提供了強大的安全技術(例如:JCA,HTTPS,JSSA等)。對於電子商務系統而言,系統平台的安全性和效率是其中的核心問題,而這些正好是J2EE及其相關技術的強項。
0 系統中所要使用的API及其特點介紹
該系統中主要使用的技術和特點如下:
(1)EJB :主要是作為J2EE中間層,完成商業邏輯。目前主要有三種類型的EJB: 會話 Bean (Session Bean)、實體Bean (Entity Bean)、消息驅動的Bean(MDB);
(2)JAAS:在J2EE 中用於處理認證和授權服務,進行資源控制;
(3)JSP和Java Servlets:用於J2EE的表示層,生成用戶界面;
(4)JDBC:用於資料庫(資源層)的連接和與資料庫進行交互;
(5)JNDI:Java命名和目錄介面,該API實際上是用來訪問J2EE的所有資源;
(6)JMS:Java消息傳輸服務,配合MDB使用。
1 Session的安全問題與解決方案
在項目中,保存Session一般有兩種方法,一是分別放在客戶端,一是集中放在伺服器端。在客戶端保存Session是指將Session的狀態串列化,然後嵌入到返回給客戶的HTML頁面中。當Session中的信息很少時,這樣實現比較容易,另外這種方法還消除了跨越多個伺服器復制狀態的問題。
但是在客戶端保存Session狀態時,必須考慮到由此帶來的安全問題,因為黑客可能通過嗅探攻擊(Sniffer)獲取敏感信息。為了不讓敏感信息數據暴露,解決的方法是對數據進行加密或者使用HTTPS,採用SSL技術。
如果是要保存大量Session狀態的應用,最好的方法是將Session狀態統一放在伺服器端。當狀態被保存在伺服器上時,不會有客戶端Session管理的大小和類型限制。此外,還避免了由此帶來的安全問題,而且也不會遇到由於在每個請求間傳送Session狀態帶來的性能影響,但是對伺服器的性能要求比較高。網店系統的安全性要求較高,因此Session還是集中放在中間層伺服器端,同時對客戶端到伺服器端採用SSL連接。
2客戶端的緩存安全設計
大部分顧客使用的WEB瀏覽器將瀏覽過的頁面緩存在磁碟上,這樣我們瀏覽網頁的時候不需要重新向伺服器發出HTTP請求,對於普通的網頁不存在安全問題。但是對於需要保密的WEB應用,會帶來安全隱患和泄漏隱私,因此對於客戶端緩存,也必須做適當的處理。最好的方法就是禁止使用緩存,但是對於大部分顧客而言,要求在客戶端不用緩存是不現實的,因此我們必須在中間層解決該問題,方法是採用Servlet過濾器技術。該技術是Servlet2.3以後才出現的,在J2EE中的應用很廣泛。要使用該技術,需要執行以下步驟:
(1) 編寫一個Servlet過濾器,實現javax.servlet.Filter介面;
(2) 修改Web.xml文件,使容器知道過濾器在什麼時候被調用。
Javax.servlet.Filter主要有3個方法:
(1)init(FilterConfig cfg) :當開始使用 servlet 過濾器服務時,容器調用此方法一次。傳送給此方法的 FilterConfig 參數包含 servlet 過濾器的初始化參數;
(2)destroy() :當不再使用 servlet 過濾器服務時,容器調用此方法;
(3)doFilter(ServletRequest req, ServletResponse res, FilterChain chain): 容器為每個映射至此過濾器的 servlet 請求調用此方法,然後才調用該 servlet 本身。傳送至此方法的 FilterChain 參數可用來調用過濾器鏈中的下一個過濾器。當鏈中的最後一個過濾器調用 chain.doFilter() 方法時,將運行最初請求的 servlet。因此,所有過濾器都應該調用 chain.doFilter() 方法。如果過濾器代碼中的附加認證檢查導致故障,則不需要將原始 servlet 實例化。在這種情況下,不需要調用 chain.doFilter() 方法,相反,可將其重定向至其它一些錯誤頁面。
如果 servlet 映射至許多 servlet 過濾器,則按照應用程序的部署描述符(web.xml)中的先後出現的次序來調用 servlet 過濾器。這一部分的主要代碼如下:
//要引入的類庫
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.security.*;
//設置servlet過濾代碼段
public class CacheFilter implements Filter {
protected FilterConfig filterConfig;
private String cachetp;
//初始化
public void init(FilterConfig filterConfig) throws ServletException
{
this.filterConfig = filterConfig;
cachetp=config.getInitParameter("CacheControlType");
if (cachetp==null)
{
throw new ServletException("沒有定義Cache控制類型");
}
}
//
public void destroy()
{
this.filterConfig = null;
}
//執行過濾器部分
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException, ServletException {
if (response instanceof HttpServletResponse )
{
HttpServletResponse resp=(HttpServletResponse) response;
resp.addHeader("Cache-Control",cachetp);
}
else
{
throw new ServletException("非法相應!");
}
chain.doFilter(request, response);
}
}
以下是在Web.xml中添加的對應的內容
CacheFilter
CacheFilter
Cache filter
CacheControlType
no-store
CacheFilter
/cachecontrol
3視圖訪問的安全設置
所有用戶都必須登陸,只有登陸才可以看到用戶的角色和許可權相對應的視圖。因此一個重要的問題就是如何防止一個視圖或者部分的視圖被一個未被授權的客戶直接訪問。
在一些情況下,資源被限制為完全不允許某些用戶訪問,例如:管理後台就不應該讓普通顧客會員訪問。有幾個方法可以做到這一點。一個方法是加入應用邏輯到處理控制器或者視圖的程序中,禁止某些用戶訪問。另一個方案是設置運行時的系統,對於一些資源,僅允許經由另一個應用資源內部調用。在這種情形,對於這些資源的訪問必須被通過另一個表現層的應用資源進行,例如一個servlet控制器。對於這些受限制的資源不允許通過瀏覽器直接調用。
在J2EE中,可以利用Web容器中內置的安全技術來進行角色訪問資源的控制。根據最新版本的servlet和EJB規范,安全限制在web.xml的配置描述文件中描述,我們可以通過配置web.xml來控制角色訪問,修改配置描述文件web.xml就可以達到快速修改安全策略的目的。
安全限制允許使用編程的方法根據用戶的角色來控制訪問。資源可以被某些角色的用戶訪問,同時禁止其它的角色訪問。另外,某個視圖的一部分也可以根據用戶的角色來限制其訪問。如果某些資源完全不允許來自於瀏覽器的直接訪問,那麼這些資源可以配置只允許一些特殊的安全形色訪問,而這些安全形色不分配給任何一個用戶。這樣只要不分配這個安全形色,那麼以這種方式配置的資源將禁止所有的瀏覽器直接訪問。下面一個例子就是web.xml配置文件的一部分,它定義了一個安全的角色以限制直接的瀏覽器訪問。角色的名字是「vip」,受限制資源的名字是specialgood1.jsp、specialgood2.jsp、specialgood3.jsp和bookinfo.jsp。除非一個用戶或者組被分配到「vip」角色,否則這些客戶都不可以直接訪問這些JSP頁面。不過,由於內部的請求並不受這些安全的限制,一個初始時由某servlet控制器處理的請求將會導向到這些受限制的頁面,這樣它們就可以間接訪問這些JSP頁面。
<security-constraint>
<web-resource-collection>
<web-resource-name>specialgood </web-resource-name>
<description>special good infomation</description>
<url-pattern>/shop/jsp/a1/specialgood1.jsp</url-pattern>
<url-pattern>/shop/jsp/a1/specialgood2.jsp</url-pattern>
<url-pattern>/shop/jsp/a1/specialgood3.jsp</url-pattern>
<url-pattern>/shop/jsp/a1/bookinfo.jsp</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>vip</role-name>
</auth-constraint>
</security-constraint>
3 各層次間的耦合問題與解決策略
表現層的數據結構,例如HttpServletRequest,應該被限制在表現層上。如果將這些細節放到其它層(主要是業務邏輯層)中,將大大降低了代碼的的重用性,令代碼變得復雜,並且增加了層間的耦合。解決方法一個常用方法是不讓表現層的數據結構和商業層共享,而是拷貝相關的狀態到一個更常見的數據結構中再共享。你也可以選擇由表現層數據結構中將相關的狀態分離出來,作為獨立的參數共享。另外在域對象暴露表現層的數據結構,如果將諸如HttpServletRequest的請求處理數據結構和域對象共享,這樣做也會增加了應用中兩個不同方面的耦合。域對象應該是可重用的組件,如果它們的實現依賴協議或者層相關的細節,它們可重用性就很差,同時維護和調試高耦合的應用更加困難。成熟的解決方案是不通過傳送一個HttpServletRequest對象作為一個參數,而是拷貝request對象的狀態到一個更為常用的數據結構中,並且將這個對象共享給域對象。你也可以選擇由HttpServletRequest對象中將相關的狀態分離出來,並且將每一個的狀態作為一個獨立的參數提供給域對象。
4 EJB的安全設計與控制
EJB的執行過程一般是這樣的:(1)客戶端通過JNDI檢索Home對象的引用;(2)JNDI返回Home對象的引用;(3)請求創建一個新的EJB對象;(4)創建EJB對象;(5)返回EJB對象;(6)調用商務方法;(7)調用Enterprise Bean.引起EJB的安全問題原因主要存在三個方面:
(1)用包嗅探器(Packet Sniffer)獲取用戶憑證信息並直接調用會話Bean;(2)對實體Bean進行未授權訪問;(3)對消息驅動的Bean的無效訪問(發布惡意或者虛假的消息).
以上安全問題可導致客戶端或者服務端欺騙攻擊和DDOS攻擊。解決問題(1)的方法是使用JAVA中SSL技術來保護通訊,解決(2)的方法是對於實體Bean全部採用本地介面或者採用JAAS(文獻[1]),對於(1)和(2),我們可以同時採取以下措施:讓容器完成認證並傳輸用戶憑證信息,另外使用聲明性或者程序設計的安全驗證角色。對於問題(3),J2EE並沒有提供一個很好的方案,我們的解決方案是採用數字簽名技術來保證信息來自可信任的源。該方法的結合代碼簡要說明如下,消息採用JMS傳遞:
//客戶端,要用到消息發送者的私鑰進行簽名
...
message.setString("userid",userid);
message.setString("useritem",useritem);
message.setInt("usersn",serialnum);//包含一個序列號
message.setString("usercertid",certid);
String signature=getSignature(userid+":"+useritem+":"+serialnum+":"+certid);
//進行簽名,其中getSignature為簽名函數,要用到消息發送者的私鑰進行簽名,具體密碼學技術可參考文獻[2];
message.setString("signature",signature);
sendmessage(message);//發送信息
...
//伺服器端
String checkstr=userid+":"+message.getString("useritem")+":"+
message.getInt("usersn")+":"+usercertid;
boolean b_check=checkSignature(checkstr,msg.getString("signature"),
usercertid,userid);
//進行驗證,其中checkSignature為驗證函數,要用到消息發送者的公鑰進行驗證,具體密碼學技術可參考文獻[2];
5 CA中心與證書的生成
前面我們已經提出在客戶端要使用HTTPS和SSL,因此要建立一個自己的CA中心來管理分發證書,加強客戶端到中間層伺服器端通訊的安全性.建立CA中心的第一步是利用JAVA工具包中的Keytool生成一個X509證書,然後將該證書交由權威CA中心Vertsign簽名,再將該證書設置為根證書,建立自己的CA.每次有新用戶注冊交易的時候,都必須簽發一個用戶獨一無二的證書,關鍵的過程是如何簽發證書.簽發證書的過程如下:
(1)從中間層CA伺服器的密鑰庫中讀取CA的證書:
FileInputStream in=new FileInputStream(ShopCAstorename);
KeyStore ks=KeyStore.getInstance("JKS");
ks.load(in,storepass);
java.security.cert.Certificate c1=ks.getCertificate(alias);
(2)獲得CA的私鑰:
PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass);
(3)從CA的證書中提取簽發者信息:
byte[] encod1=c1.getEncoded();
X509CertImpl shopcimp1=new X509CertImpl(encod1);
X509CertInfo shopcinfo1=(X509CertInfo)shopcimp1.get(X509CertImpl.NAME+
"."+X509CertImpl.INFO);
X500Name issuer=(X500Name)shopcinfo1.get(X509CertInfo.SUBJECT+
"."+CertificateIssuerName.DN_NAME);
(4)獲取待簽發的證書相關信息,與(3)類似;
(5)設置新證書的有效期、序列號、簽發者和簽名演算法:
//設置新證書有效期為1年
Date begindate =new Date();
Date enddate =new Date(begindate.getTime()+3000*24*360*60*1000L); CertificateValidity cv=new CertificateValidity(begindate,enddate);
cinfo2.set(X509CertInfo.VALIDITY,cv);
//設置新證書序列號
int sn=(int)(begindate.getTime()/1000);
CertificateSerialNumber csn=new CertificateSerialNumber(sn);
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
//設置新證書簽發者
cinfo2.set(X509CertInfo.ISSUER+"."+
CertificateIssuerName.DN_NAME,issuer);
//設置新證書演算法
AlgorithmId algorithm =
new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo2.set(CertificateAlgorithmId.NAME+
"."+CertificateAlgorithmId.ALGORITHM, algorithm);
(6)創建證書並簽發:
// 創建證書
X509CertImpl newcert=new X509CertImpl(cinfo2);
// 簽名
newcert.sign(caprk,"MD5WithRSA");
(7)將新證書提供給注冊用戶,並提示安裝,一般的做法是在用戶注冊成功後系統立即返回一個證書對象給中間層某個Servlet,由其返回給用戶。
參考文獻
[1]沈耀,陳昊鵬,李新顏.EJB容器中基於JAAS 的安全機制的實現.[J]:計算機應用與軟體 2004.9 16~18
[2](美)Jess Garms著,龐南等譯. Java安全性編程指南[M].北京:電子工業出版社 2002
[3] http://java.sun.com/j2ee/
[4] 蔡劍,景楠. Java 網路程序設計:J2EE(含1.4最新功能)[M].北京: 清華大學出版社 2003
[5](美)John Bell Tony Loton. Java Servlets 2.3編程指南[M].北京: 電子工業出版社 2002
[6](美)Joseph J.Bambara等著,劉堃等譯. J2EE技術內幕[M].北京:機械工業出版社 2002
[7](美)Li Gong著.JAVA 2平台安全技術——結構、API設計和實現[M].北京: 機械工業出版社 2000
[8](英)Danny Ayers等著,曾國平等譯. Java伺服器高級編程[M].北京:機械工業出版社 2005
[9]http://www.smatrix.org/bbs
[10]http://www.smatrix.cn/bbs
Ⅱ Java高級編程有哪些知識呀
昆明的花信致遠java重點:
*第一階段:Java基礎,包括java語法,面向對象特徵,常見API,集合框架;
*第二階段:java界面編程,包括AWT,事件機制,SWING,這個部分也可以跳過,用的時候再看都能來及;
*第三階段:java API:輸入輸出,多線程,網路編程,反射註解等,java的精華部分;
*第四階段:資料庫SQL基礎,包括增刪改查操作以及多表查詢;
*第五階段:JDBC編程:包括JDBC原理,JDBC連接庫,JDBC API,雖然現在Hibernate比JDBC要方便許多,但是JDBC技術仍然在使用,JDBC思想尤為重要;
*第六階段:JDBC深入理解高級特性:包括資料庫連接池,存儲過程,觸發器,CRM思想;
*第七階段:HTML語言學習,包括HTML標簽,表單標簽以及CSS,這是Web應用開發的基礎;
*第八階段:JavaScript腳本語言,包括javaScript語法和對象,就這兩個方面的內容;
*第九階段:DOM編程,包括DOM原理,常用的DOM元素以及比較重要的DOM編程思想;
*第十階段:Servlet開發,從此開始踏入java開發的重要一步,包括XML,Tomcat伺服器的安裝使用操作,HTTP協議簡單理解,Servlet API等,這個是java web開發的基礎。
*第十一階段:JSP開發:JSP語法和標簽,自定義標簽,EL,JSTL庫了解以及MVC三層架構的設計模式理念;
*第十二階段:AJAX開發:AJAX原理,請求響應處理,AJAX開發庫;
*第十三階段:輕量級框架,三大框架之一Struts框架的學習,自此踏入java web開發的精華部分,包括Struts體系架構,各種組件,標簽庫和擴展性的學習;
*第十四階段:Hibernate框架學習,三大框架之一,包括檢索映射技術,多表查詢技術,緩存技術以及性能方面的優化;
*第十五階段:Spring框架的學習,三大框架之一,包括了IOC,AOP,DataSource,事務,SSH集成以及JPA集成;
Ⅲ JAVA你知道後端都要學習些什麼嗎
選擇學習Java,首先,我們要知道我們學習Java是為了什麼,要達到一個什麼樣的目標,對未來的職業要有一個具體詳細的計劃,我們在進行具體的學習訓練。在學習Java基礎的時候,會遇到很多的困難,關於Java基礎學習的每一個重要知識點,都要掌握,因為就業中越是大的公司越會在乎你對Java基礎的認知和理解,所以基礎無疑是最重要的,萬丈高樓平地起,基礎建設得好不好,將決定你後面所有建設的高度,Java也是一樣,基礎很重要,未來職業還很遠,但是能走多遠,取決於你對Java基礎知識的認識程度。所以基礎學習至關重要,如果你是真的想學好這門技術,想在這個行業取得成就,請你繼續往下看。
Java基礎語法:Java語法是就相當於英文中的26個字母,你需要將每個關鍵詞都學的很透徹,對於初學者來說,最困難的概念是基本結構,例如循環和分支。這部分沒有過多的技巧,多去做一些相關的練習題,熟能生巧。
面向對象編程(OOP):OOP嚴格意義上來說有兩個模塊,一是面向對象的思維,二是面向對象的編程語法。面向對象的思維這個理解起來有點難,因為我們在學Java的基礎語法時,習慣了用面向過程的思維去編程,轉變為面向對象時頭腦中會很混亂,即使老師舉很多實例去解釋 依舊會產生很多困惑,碰到這種情況不要著急,面向對象的思維需要長期去培養,同基礎語法一樣,思維也需要大量的實踐去培養。
面向對象涉及到的語法主要有:類、繼承、介面、多態、封裝,這是Java編程中另一個重要的組成部分,可以說在工作中,無論用哪種框架,哪種編輯器,面向對象的編程都是重中之重。這個模塊也是在面試中的重點,所以一定要掌握扎實!
集合框架:Java為不同的集合提供了一個集合框架。集合基於數據結構,比如常見的:列表、數組、集合、哈希圖等等。因此,在研究集合時,最好了解一點數據結構的相關知識。
學習集合的主要困難在於他們之間的區別,以及何時用到適合的集合類型。同樣的,也是必須實踐出真知。
異常處理:異常是在執行程序時可能發生的異常情況。很多人在學習的過程中理解不了異常的作用,在初學的時候也有相同的疑問,編輯器已經有報錯的功能了,為什麼還要自己去編寫一段處理異常的代碼。後來隨著項目使用的異常處理越來越多,對異常處理也會有深刻的了解。
舉個簡單的例子:當你下載文件時,如出現什麼錯誤,用戶希望下載器能告訴他出現了什麼問題,比如硬碟不足等等,當用戶提供了足夠的硬碟空間以後,下載繼續自動進行。而不是說空間一不足,立刻下載器就崩潰,這就是異常技術。
輸入/輸出流:Java使用流來執行輸入和輸出的操作。在項目中,需要經常進行讀寫操作。對於初學者來說,這也是一個比較困難的知識點,而且在Java的學習過程中,這一點的重要性並不是很突出,導致很多人在工作後碰到文件的讀寫操作就乾瞪眼了
Java多線程/並發:多線程和並發操作是Java高級編程的核心主題。這部分幾乎所有的同學都理解不了,不過沒有關系,這部分對於初級開發者來說不是很重要。可以在工作的過程中慢慢深入了解。為什麼要把這個模塊放在文章里,主要是目前市場上有些公司的面試會問及多線程並發的問題,為了Offer,推薦大家還是看看。
Lambda表達式:Java lambda表達式出現在Java 8中,這是一個經常被開發者忽略的工具。Lambda表達式是一個可以創建的函數,不屬於任何類,可作為對象傳遞或執行。
演算法和數據結構:每一門編程語言的學習過程中,最有爭議的問題之一就是每個學生是否應該學習標準的排序和搜索演算法。有的人認為,大部分演算法已經編寫在庫中,使用起來很方便。另一部分人認為,學習演算法的過程就是鍛煉編程思維的過程,一定要學習。
更傾向於後者的說法,因為經歷過很多面試,無論是自己去求職還是面試求職者,都會在面試過程中考察演算法和數據結構的相關問題。如果想要保證自己不被落選,這方面的知識還是多學習一點。
實用的庫和組件:庫和組件是能否勝任一份工作的重要指標,庫和組件能大大提升開發效率。所以公司在招聘時會特別注重這一點,面試時會詢問你的庫和組件的使用和學習經歷。
Spring/Hibernate:在以前,成為Java工程師有以上知識足矣,但是隨著近幾年技術的變更和開發者的急劇增長,開發者的門檻也逐漸增加,比如Spring/Hibernate,不會這兩門技術,很難找到工作。
上面就是成為一名Java開發者所需要的學習的知識,有些知識需要精通,比如基礎語法、OOP,集合框架,異常處理,流,實用的庫和組件,Spring框架等;有些只需要了解,能在面試中回答出來,給面試官留下一個好的印象,比如多線程/並發,Lambda表達式,演算法和數據結構。希望對小白能有幫助,也祝你的Java學習之路能夠順順利利。
Ⅳ java伺服器端學習,誰有好的書籍推薦一下
java編程思想
Ⅳ 網路工程師要學 高級編程技術java嗎
不需要啊,網路工程師主要是主網的搭建網路環境網路布線伺服器調優,主要是管這些事的。Java是做程序員的。
Ⅵ ApacheTomcat6高級編程的書籍章節
第1章ApacheTomcat
1.1謙遜的開始:Apache項目
1.2Apache軟體基金會
1.3Tomcat
1.3.1分發Tomcat:Apache的許可證
1.3.2與其他許可證的比較
1.4藍圖:JavaEE
1.4.1JavaAPI
1.4.2JavaEEAPI
1.4.3JavaEE應用服務
1.4.4向標准化看齊,在實踐中競爭
1.4.5Tomcat和應用伺服器
1.5Tomcat和Web伺服器
1.6本章小結
第2章Web的應用:Servlet、JSP及其他
2.1Web應用簡史
2.1.1CGI腳本:第一個動態文本機制
2.1.2Java伺服器端:Servlet
2.1.3JavaServerPage
2.1.4JSP標簽庫
2.1.5JSPEL
2.1.6MVC架構
2.1.7使用合適的Web技術
2.2Web應用的創建和分類
2.3本章小結
第3章Tomcat安裝
3.1安裝Java虛擬機
3.1.1在Windows上安裝JVM
3.1.2在Linux上安裝JVM
3.2安裝Tomcat
3.2.1選擇安裝類別
3.2.2檢驗下載文件
3.2.3Windows上安裝Tomcat
3.2.4在Windows下使用ZIP文件安裝Tomcat
3.2.5在Linux下安裝Tomcat
3.3使用源代碼構建Tomcat
3.3.1是需要通過源代碼構建Tomcat
3.3.2下載源代碼版本
3.3.3subversion儲存庫
3.3.4構建一個源代碼版本
3.4Tomcat安裝目錄
3.5安裝APR
3.6疑難解答和詳細說明
3.6.1類版本錯誤
3.6.2使用中的埠號
3.6.3運行多重實例
3.6.4代理阻塞通道
3.7本章小結
第4章Tomcat架構
4.1Tomcat目錄概述
4.1.1bin目錄
4.1.2conf目錄
4.1.3lib目錄
4.1.4logs目錄
4.1.5temp目錄
4.1.6webapps目錄
4.1.7work目錄
4.2Tomcat架構概述
4.2.1伺服器
4.2.2服務
4.2.3Tomcat架構中的其餘類
4.3連接器架構
4.3.1通信路徑
4.3.2連接器協議
4.3.3選擇連接器
4.4生命周期
4.4.1LifeCycle介面
4.4.2LifecycleListener介面
4.5根據架構進行配置
4.6本章小結
第5章Tomcat的基本配置
5.1Tomcat6配置的要點
5.2$CATALINA_HOME/conf中的文件
5.3伺服器的基本配置
5.3.1通過server.xml默認文件配置伺服器
5.3.2應用伺服器配置下的Tomcat運行
5.3.3Web應用軟體的Context定義
5.3.4默認context.xml文件
5.3.5認證和tomcat-users.xml文件
5.3.6默認的部署描述符——Web.xml
5.3.7servlet.xml、Context描述符和web.xml怎樣協同工作
5.3.8嚴密的訪問控制:catlina.policy
5.3.9Catalina.properties:建立在訪問查詢上的嚴密的訪問控制
5.3.10引導配置
5.3.11配置和管理的不同點
5.4Tomcat6基於Web的GUI配置器
5.5本章小結
第6章高級Tomcat特性
6.1閥——截取Tomcat樣式
6.2標准閥
6.3訪問日誌實現
6.4日誌文件范圍
6.5單點登錄實現
6.5.1不使用單點登錄閥實現多次登錄
6.5.2配置單點登錄閥
6.6Form認證器閥
6.7通過請求過濾器限制訪問
6.7.1遠程地址過濾器
6.7.2遠程主機過濾器
6.7.3配置請求過濾器閥
6.7.4請求記錄器閥
6.8持久會話
6.8.1持久會話的必要性
6.8.2配置PersistentSessionManager
6.9JNDI資源配置
6.9.1什麼是JNDI
6.9.2Tomcat和JNDI
6.9.3典型的TomcatJNDI資源
6.9.4通過JNDI配置資源
6.9.5配置JDBCDataSource
6.9.6配置Mail會話
6.10配置Lifecyclelistener
6.10.1Tomcat組件發送的生命周期事件
6.10.2元素
6.10.3Tomcat6Lifecyclelistener配置
6.11本章小結
第7章Web應用程序配置
7.1理解Web應用程序內容
7.1.1公共資源
7.1.2Web-INF目錄
7.1.3META-INF目錄
7.2理解部署描述符
7.2.1Servlet2.3類型部署描述符
7.2.2Servlet2.4/2.5類型部署描述符
7.3本章小結
第8章Web應用程序管理
8.1Web應用程序示例
8.2Tomcat管理員程序
8.2.1允許訪問管理員程序
8.2.2配置管理員程序
8.3Tomcat管理器:網路介面
8.3.1顯示Tomcat伺服器狀態
8.3.2管理Web應用程序
8.3.3部署Web應用程序
8.4Tomcat管理器:用Ant管理應用程序
8.5Tomcat管理器:使用HTTP請求
8.5.1列出已部署的應用程序
8.5.2部署新的應用程序
8.5.3在Tomcat6中安裝/部署應用程序
8.5.4遠程部署新的應用程序
8.5.5從本地路徑部署新的應用程序
8.5.6重載現有的應用程序
8.5.7列出可用的JNDI資源
8.5.8列出OS和JVM屬性
8.5.9停止現有的應用程序
8.5.10啟動被停止的應用程序
8.5.11反部署Web應用程序
8.5.12顯示會話統計
8.5.13使用JMX代理Servlet查詢Tomcat內核
8.5.14使用JMX代理Servlet設置Tomcat內核
8.6可能發生的錯誤
8.7安全性考慮
8.8Tomcat部署器
8.9本章小結
第9章類裝載器
9.1類裝載器概述
9.1.1標準的JavaSE類裝載器
9.1.2關於類裝載器的更多行為
9.1.3創建自定義類裝載器
9.1.4為什麼Tomcat需要自定義的類裝載器
9.2安全性和類裝載器
9.2.1類裝載器委派
9.2.2核心類限制
9.2.3獨立的類裝載器命名空間
9.2.4SecurityManager
9.3Tomcat與類裝載器
9.3.1系統類裝載器
9.3.2EndorsedStandardsOverride機制
9.3.3通用類裝載器
9.3.4Web應用程序類裝載器
9.4動態類重載
9.5通用類裝載器缺陷
9.5.1在不同的類裝載器中分割包
9.5.2Singleton
9.5.3XML分析器
9.6本章小結
第10章HTTP連接器
10.1HTTP連接器
10.1.1Tomcat6HTTP/1.1連接器
10.1.2高級NIO連接器
10.1.3Comet非同步IO支持
10.1.4本地APR連接器
10.2配置Tomcat支持CGI
10.3配置Tomcat以支持SSI
10.3.1配置Tomcat6SSIServlet
10.3.2配置Tomcat6SSI過濾器
10.4在代理伺服器後運行Tomcat
10.5性能調整
10.5.1可調整的配置屬性
10.5.2TCP/IP棧調整技巧
10.6前端Tomcat6和Web伺服器
10.7本章小結
第11章Tomcat與ApacheHTTP伺服器
11.1AJP連接器體系結構
11.1.1Apache的本地代碼模塊
11.1.2ApacheJServ協議
11.1.3AJP連接器
11.2ApacheWeb伺服器前端或獨立的Tomcat
11.3了解TomcatWorker
11.3.1多個TomcatWorker
11.3.2使用workers.properties文件配置Apache伺服器與多個TomcatWorker協同工作
11.4連接Tomcat與Apache
11.4.1Tomcat6配置
11.4.2ApacheWeb伺服器配置
11.4.3使用mod_jk模塊
11.4.4使用mod_proxy模塊
11.5為ApacheWeb伺服器配置SSL
11.5.1為Apache配置mod_ssl
11.5.2測試啟用SSL的Apache設置
11.5.3啟用SSL的Apache-Tomcat設置
11.6Tomcat負載平衡與Apache
11.6.1更改Tomcat啟動文件中的CATALINA_HOME
11.6.2設置不同的AJP連接器埠
11.6.3設置不同的伺服器埠
11.6.4禁用默認的HTTP/1.1連接器
11.6.5在StandaloneEngine中設置jvmRoute
11.6.6注釋CatalinaEngine
11.6.7httpd.conf中的指令
11.6.8workers.properties中的worker配置
11.7測試負載平衡器
11.7.1測試Sticky會話
11.7.2測試Round-Robin行為
11.7.3在不同的負載系數下測試
11.8本章小結
第12章Tomcat與IIS
12.1ISAPI插件的角色
12.2連接Tomcat和IIS
12.2.1檢查Tomcat與IIS的安裝
12.2.2配置JK連接器
12.2.3安裝ISAPI插件
12.2.4配置Tomcatworker
12.2.5配置轉發請求規則
12.2.6可選的URL重寫規則配置
12.2.7為ISAPI插件升級Windows注冊表
12.2.8IIS5獨立模式(只針對IIS6)
12.2.9在IIS下創建虛擬目錄
12.2.10添加作為IIS過濾器的ISAPI插件
12.2.11授權作為Web應用程序擴展的ISAPI插件(只針對IIS6)
12.2.12測試最後的設置
12.3故障解決技巧
12.4使用SSL
12.5IIS和Tomcat的可擴展架構
12.5.1分發Web和應用程序部署
12.5.2多個TomcatWorkers
12.5.3負載平衡的AJPWorker
12.6本章小結
第13章JDBC連接
13.1JDBC基礎
13.1.1建立和終止RDBMS連接
13.1.2JDBC版本演化
13.1.3JDBC驅動類型
13.1.4資料庫連接池
13.1.5連接池的問題
13.1.6Tomcat和JDBC演化
13.2Tomcat6中的JNDI模擬和連接池
13.3首選的配置:JNDI資源
13.3.1Resource標簽
13.3.2繼承JNDI資源配置
13.3.3測試JNDI資源配置
13.4可選的JDBC配置
13.5可選的連接池管理器
13.5.1關於c3p0池管理器
13.5.2部署c3p0池管理器
13.5.3無需JNDI查找獲得JDBC連接
13.5.4使用c3p0測試對非JNDI池的訪問
13.5.5使用JNDI映射獲得連接
13.5.6使用Tomcat6JNDI-comp-atible查找測試c3p0
13.5.7部署第三方連接池
13.6本章小結
第14章Tomcat安全
14.1核查下載的Tomcat的完整性
14.1.1核查MD5摘要
14.1.2使用PGP簽名來核查下載的文件
14.2確保Tomcat伺服器安全安裝
14.2.1去除默認的應用程序
14.2.2ROOT和tomcat-docs
14.2.3系統應用程序——manager和host-manager
14.2.4約束系統應用程序訪問安全性
14.2.5刪除JSP和Servlet的例子
14.2.6更改SHUTDOWN命令
14.3使用特殊賬戶運行Tomcat
14.3.1創建一個無特權的Tomcat用戶
14.3.2使用Tomcat用戶運行Tomcat
14.4確保文件系統安全
14.4.1Windows文件系統
14.4.2Linux文件系統
14.5確保Java虛擬機的安全
14.5.1SecurityManager概述
14.5.2使用Tomcat的SecurityManager
14.5.3推薦的SecurityManager練習
14.6確保Web應用程序的安全
14.6.1「認證」和「域」
14.6.2域安全性
14.7SSL加密
14.7.1JSSE
14.7.2使用SSL保護資源
14.8保證DefaultServlet的安全
14.8.1禁用目錄列表
14.8.2禁用InvokerServlet、SSI和CGIGateway
14.9主機限制
14.10本章小結
第15章共享的Tomcat主機
15.1虛擬主機概念
15.2Apache中的虛擬主機
15.2.1實例部署方案
15.2.2Apache中基於IP的虛擬主機
15.2.3Apache中基於名稱的虛擬主機
15.3Tomcat中的虛擬主機
15.3.1實例部署方案
15.3.2作為獨立伺服器的Tomcat
15.3.3使用Apache的Tomcat
15.3.4配置Apache
15.4TomcatHost-Manager應用程序
15.5虛擬主機問題:穩定性、安全和性能
15.6調整Tomcat中的虛擬主機設置
15.6.1為每個虛擬主機創建獨立的JVM
15.6.2在TomcatJVM上設置內存資源限制
15.6.3使用JavaSecurityManager限制
15.7本章小結
第16章使用JMX監視和管理Tomcat
16.1管理需求
16.2關於JMX
16.2.1JMX體系結構
16.2.2工具層
16.2.3代理層
16.2.4分布式服務層
16.3JMX遠程API
16.4MBean介紹
16.4.1標准MBean
16.4.2動態MBean
16.4.3模型MBean
16.4.4開放MBean
16.5JMX在Tomcat6中的可管理元素
16.5.1可管理的Tomcat6體系結構組件
16.5.2可管理的嵌入式組件
16.5.3可管理的運行時數據對象
16.5.4可管理的資源對象
16.6通過ManagerProxy訪問Tomcat6的JMXSupport
16.6.1使用JMXProxy
16.6.2修改MBean屬性
16.6.3使用jconsoleGUI監視Tomcat
16.6.4為遠程監視配置Tomcat
16.7本章小結
第17章集群
17.1集群益處
17.1.1可擴展性與集群
17.1.2高可靠性的必要性
17.2集群基礎
17.2.1主-備用拓撲模式
17.2.2故障轉移行為模式
17.3Tomcat6集群模型
17.3.1負載平衡
17.3.2會話共享
17.4使用Tomcat6集群
17.4.1Tomcat6中的會話管理
17.4.2Cookie和現代瀏覽器的角色
17.4.3配置一個Tomcat6集群
17.4.4通用前端:通過Apachemod_jk使負載平衡
17.4.5准備使用不同的後端會話共享
17.4.6後端1:內存復制配置
17.4.7後端2:使用共享文件存儲的永久會話管理器
17.4.8後端3:使用JDBC存儲的永久會話管理器
17.4.9測試使用JDBC永久會話管理器後端的Tomcat集群
17.5集群的復雜性
17.5.1集群和性能
17.5.2集群和響應時間
17.5.3使用集群解決性能問題
17.6本章小結
第18章嵌入式Tomcat
18.1現代系統設計中嵌入式Tomcat的重要性
18.1.1典型地嵌入式應用程序
18.1.2使用嵌入式Tomcat開發
18.2本章小結
第19章日誌
19.1從Tomcat5的變革
19.2log4j
19.2.1log4j體系結構
19.2.2log4j安裝和配置
19.2.3log4j入門指南
19.2.4log4j高級用法
19.2.5log4j性能建議
19.3JULI
19.3.1Java日誌體系結構
19.3.2JULI入門指南
19.4日誌文件分析
19.5本章小結
第20章性能測試
20.1性能概念
20.1.1評估什麼
20.1.2可擴展性和性能
20.1.3理解用戶角度的性能
20.1.4評估性能
20.2JMeter
20.2.1安裝和運行JMeter
20.2.2設計和理解使用JMeter的測試計劃
20.2.3JMeter特性
20.2.4分布式負荷測試
20.2.5解釋測試結果
20.3替代JMeter的工具
20.4性能測試後的事項
20.5本章小結
第21章性能調優
21.1性能調優的最佳實踐
21.1.1步驟1:建立測試台
21.1.2步驟2:性能測試和確定基線
21.1.3步驟3:診斷性能瓶頸
21.2診斷Tomcat的性能問題
21.3Tomcat性能調優提示
21.3.1JVM的參數調優
21.3.2預編譯JSP
21.3.3Tomcat配置調優
21.3.4適當的時候使用Web伺服器的靜態內容
21.4本章小結
附錄ATomcat和集成開發環境
A.1Eclipse
A.1.1調試Eclipse中的遠程Web應用程序
A.1.2使用SysdeoTomcat插件部署和調試本地Web應用程序
A.1.3使用Web工具平台部署和調試Web應用程序
A.1.4使用ApacheAnt和Eclipse管理Web應用程序部署
A.2NetBeans
A.2.1調試NetBeans中的遠程Web應用程序
A.2.2調試NetBeans內的Web應用程序
A.3小結
附錄BApacheAnt
B.1安裝Ant
B.2Ant介紹
B.3Ant訣竅
B.3.1使用Ant創建Web應用程序
B.3.2編譯JSP
B.3.3利用屬性文件和命令行參數的可重用Ant腳本
B.3.4創建日誌
B.3.5通過電子郵件創建通知
B.3.6Ant和源控制系統
B.3.7自動測試
B.4持續集成
B.5Ant任務參考
B.6小結
……
Ⅶ 本人想要成為JAVA工程師,請問我要在全國計算機考試中除了考二級JAVA以外,還要考什麼啊
如果要往java方向發展的話,下面的都要學JDBC、Hibernate、HTML、JavaScript、Struts、Servlet、JSP、Spring、EJB.當然伺服器的部署運用也要學,如:Tomcat、JBoss、Weblogic。資料庫操作也要會,自己學的話用MySQL。其實每個公司的框架都不一樣,學框架也很重要。
Sun 在 UNIX領域一直是技術上和市場佔有率的領先者;近年來又推出Java技術,更成為業界的標准。所以Sun公司所舉辦的認證考試,必然成為Java和UNIX在全球信息界公認的標准。
Sun推出的專業認證包括下列三種:
Java認證考試
關於Java方面,Sun推出七項認證:
Sun Certified Java Programmer for the Java 2 Platform、
Sun Certified Developer for the Java 2 Platform
Sun Certified Web Component Developer for the Java 2 Platform, Enterprise Edition 1.4
Sun Certified Business Component Developer for the Java 2 Platform, Enterprise Edition
Sun Certified Web Services Developer for the Java 2 Platform, Enterprise Edition
Sun Certified Enterprise Architect for the Java 2 Platform, Enterprise Edition
Sun Certified Mobile Application Developer for the Java 2 Platform, Micro Edition
Solaris系統管理認證考試
Sun 公司為用戶提供支持 Solaris 10 操作系統的高品質培訓和認證服務,可幫助企業最大限度地快速實現該創新操作系統的重要價值。請點擊此處以查看更多詳情!
對Solaris/Sun OS系統管理員,Sun推出Certified Solaris Administrator。SCSA分別為兩個等級( Part I 和 Part II ),測試您對Solaris 系統管理的了解程度。
Solaris網路管理認證考試
為了測試使用者對於Solaris網路管理能力,Sun推出Certified Network Administrator(SCNA)。內容包括基本網路概念、Routing and Subnet、Security、Performance、DNS、NIS+等
通過Sun任何一門專業認證後,您將全收到Sun Microsystems 總公司寄發的資格證書及徽章,並有權將通過Sun認證的標記印在個人名片上,作為個人技術能力的肯定。
Java程序員是美國SUN公司國際認證的程序員,她是目前全球最受重視、最受歡迎的程序員資格認證之一,具備這一認證就可以獲得極好的工作機會和豐厚待遇。
Java跨平台等許多特性使之成為當代成長最快的軟體產品:它受到了大約150個許可證頒發機構、200所大學和50萬開發者的擁戴;1000多個應用程序是用它編寫的;有關它的書籍有800餘種;Java開發套件的下載次數超過一百萬次;Java BEANS? 開發套件的下載次數超過10萬次;受到了全球所有主要計算機廠商的支持,而這一切都發生在其發表後的800天內;Java闖入企業計算的心臟正成為大眾傳媒輿論的推動力量,正在改變企業的計算環境。它通過為網際網路商務提供安全和穩健平台的方式改變商業自身。Java計算是各行各業中倍受信賴的企業解決方案。獨立於平台的Java計算環境可以降低企業的總成本,縮短產品上市周期,安全地擴展公司的網路。不少國家到中國尋求合作夥伴時,都把能否用Java進行編程作為合作的前提條件。
=============
J2EE和J2ME沒有聯系.J2EE是做B/S軟體或網站的
但如果了解J2EE的一些特性對J2ME也是有好處的,但是J2SE必須學得很好,基礎很穩固才能做J2ME,我承認,J2ME有1-2個月就可以掌握,但是裡面的精髓如果沒有好的J2SE基礎是無法掌握的
J2EE和J2ME都是很熱門的技術.
J2EE技術雖然還在發展中,也還有些問題,不過感覺已經較為成熟了,畢竟是這么多巨頭湊在一起搗鼓出來的,有了很多成功的案例,也得到了大范圍的應用。很多公司都有這方面的項目,比較容易找到活干,畢竟技術沾上企業兩個字還是很吃香的。但是感覺EJB重復開發的多,經常是一個項目,EJB開發,功能組裝,部署都一條龍做了。大家期望的EJB市場還沒有出現, J2EE全稱為Java2 Platform, Enterprise Edition。
"J2EE平台本質上是一個分布式的伺服器應用程序設計環境——一個Java環境,它提供了:
·宿主應用的一個運行基礎框架環境。
·一套用來創建應用的Java擴展API。"(引自《J2EE伺服器端高級編程》)?
J2EE用來建設大型的分布式企業級應用程序。或者用更時髦的名詞說就是"電子商務"應用程序。
J2ME個人感覺前景還是很不錯的,得到了很多大廠商和開發者的認同,看了很多在手持設備上用j2me寫的程序,做得很漂亮,自己也編了些東西,不過現在的J2ME也還有些問題:
一是移動終端的復雜性(如內存大小,顯示屏大小,永續存儲空間大小等),不同的廠商有不同的實現方式,統一的規范並不能體現設備的特點,很多廠商不得不加入了自己的專屬API(如震動,背光,聲音等),這樣給移植帶來了困難,雖然JCP制定了OptionalPackages,但是目前市面上的J2ME平台還是相當的混亂。
二是移動設備的發展,更新的速度是相當驚人的,j2me規范的制定也要跟得上發展的速度。說不定哪天j2me就和j2se兼容了(很早前就看人在智能手機上玩古墓麗影了,不過目前看起來還是不現實)。(Pjava和jdk1.1.8很相近的,不過SUN已經把它放到J2ME規范中了)
三還是老問題,缺少KillerApplication,殺手級的應用,J2ME的發展缺少一個應用點,現在也就局限於游戲幾個方面,中國手機用戶比PDA用戶為多,而手機用戶用得最多的就是通話和簡訊,上網,彩信的都很少,游戲還是單機的多,如何收費是個問題。
Ⅷ Java游戲高級編程的目 錄
1.1 升級到Java 1.4 1
1.2 內核類 1
1.3 在線運行Demo版程序 2
1.4 深入游戲庫 3
1.4.1 croftsoft目錄 3
1.4.2 arc目錄 4
1.4.3 bin目錄 4
1.4.4 doc目錄 4
1.4.5 ext目錄 5
1.4.6 lib目錄 5
1.4.7 lic目錄 5
1.4.8 res目錄 5
1.4.9 src目錄 6
1.4.10 tmp目錄 6
1.5 XML簡介 6
1.6 使用Ant編譯 7
1.7 使用開放源代碼 10
1.7.1 學習版權的基本知識 10
1.7.2 選擇一個許可 11
1.7.3 重命名修改後的代碼 12
1.7.4 共享源代碼 13
1.8 為游戲獲取多媒體資源 13
1.8.1 圖片資源 13
1.8.2 音頻資源 14
1.9 基本示例 15
1.9.1 修改源代碼 15
1.9.2 修改構建文件 26
1.10 小結 27
1.11 參考文獻 27 2.1 部署為applet 28
2.1.1 實現生命周期方法 28
2.1.2 管理applet動畫線程 30
2.1.3 讀取JAR文件 34
2.1.4 使用插件升級客戶端 36
2.1.5 了解存在的限制 38
2.1.6 applet簽名 38
2.1.7 緩存applet 39
2.2 部署為可執行JAR 39
2.2.1 生成清單文件 39
2.2.2 對不安全性進行保護 40
2.3 用Java Web Start進行部署 40
2.3.1 准備發布文件 41
2.3.2 訪問默認瀏覽器 43
2.3.3 使用反射進行動態鏈接 46
2.4 將多個applet部署為一個applet 47
2.4.1 MultiAppletStup 48
2.4.2 MultiAppletNews 50
2.4.3 Lifecycle 54
2.4.4 LifecycleWindowListener 54
2.4.5 MultiApplet 58
2.4.6 CroftSoftCollection 65
2.5 小結 67
2.6 參考文獻 68 3.1 ComponentAnimator 69
3.1.1 更新和繪制階段 70
3.1.2 精靈的定義 70
3.1.3 ExampleAnimator 71
3.2 RepaintCollector 73
3.2.1 Swing串列化 73
3.2.2 動畫的問題 73
3.2.3 RepaintCollector 75
3.2.4 SimpleRepaintCollector 75
3.2.5 BooleanRepaintCollector 77
3.2.6 CoalescingRepaintCollector 78
3.2.7 其他實現 81
3.3 LoopGovernor 81
3.3.1 固定的延遲 82
3.3.2 幀速率同步 84
3.3.3 SamplerLoopGovernor 85
3.3.4 WindowedLoopGovernor 85
3.4 AnimatedComponent 90
3.5 小結 98
3.6 參考文獻 98 4.1 ComponentPainter實現 99
4.1.1 NullComponentPainter 99
4.1.2 ArrayComponentPainter 99
4.1.3 ColorPainter 101
4.1.4 SpacePainter 103
4.1.5 TilePainter 106
4.2 ComponentUpdater 實現 114
4.2.1 NullComponentUpdater 114
4.2.2 ArrayComponentUpdater 115
4.2.3 EdgeScrollUpdater 115
4.3 ComponentAnimator實現 120
4.3.1 NullComponentAnimator 120
4.3.2 TileAnimator 120
4.3.3 FrameRateAnimator 122
4.3.4 CursorAnimator 126
4.4 Sprite實現 131
4.4.1 Sprite 131
4.4.2 AbstractSprite 132
4.4.3 IconSprite 135
4.4.4 BounceUpdater 137
4.4.5 IconSequenceUpdater 141
4.5 小結 143 5.1 硬體加速圖像 144
5.1.1 Image 144
5.1.2 BufferedImage 145
5.1.3 VolatileImage 145
5.1.4 自動圖像 146
5.1.5 兼容圖像 146
5.1.6 緩存演算法 149
5.2 多緩沖和多線程 150
5.3 全屏獨占模式 160
5.3.1 啟用全屏模式 160
5.3.2 FullScreenToggler 161
5.3.3 配置幀 165
5.3.4 改變顯示模式 165
5.3.5 DisplayModeLib 166
5.3.6 GraphicsDeviceLib 166
5.3.7 消除鋸齒 167
5.3.8 168
5.3.9 FullScreenDemo 170
5.3.10 使用獨占模式的顧慮 177
5.4 小結 177
5.5 參考文獻 177 6.1 數據格式 178
6.1.1 對象串列化 178
6.1.2 屬性 181
6.1.3 XML 182
6.1.4 瓦片地圖圖像 190
6.1.5 隨機種子 193
6.2 持久性機制 195
6.2.1 JAR資源文件 196
6.2.2 用戶主目錄文件 197
6.2.3 JNLP持久性 200
6.2.4 applet持久性 203
6.2.5 穩固持久性 206
6.2.6 嵌入式資料庫 211
6.2.7 伺服器端的持久性 212
6.3 數據完整性 214
6.3.1 消息摘要 214
6.3.2 散列緩存 215
6.4 小結 217
6.5 參考文獻 217 7.1 介面 218
7.2 繼承 218
7.3 目標Mars 221
7.4 模型-視圖-控制器 221
7.4.1 模型 222
7.4.2 多重介面繼承 224
7.4.3 視圖 234
7.4.4 控制器 240
7.5 復合MVC 243
7.5.1 復合模型 243
7.5.2 復合視圖 254
7.5.3 復合控制器 260
7.5.4 將三者進行組合 260
7.6 數據驅動設計 264
7.6.1 AnimationInit 264
7.6.2 AnimatedApplet 265
7.7 小結 269
7.8 參考文獻 269 8.1 Cartographer 271
8.2 NodeInfo 272
8.3 AStar 273
8.4 AStarTest 279
8.5 SpaceTester 283
8.6 GridCartographer 283
8.7 GradientCartographer 286
8.8 TankConsole 289
8.9 TankOperator 290
8.10 StateSpaceNode 291
8.11 TankCartographer 292
8.12 DefaultTankOperator 293
8.13 PlayerTankOperator 297
8.14 小結 299
8.15 參考文獻 300 9.1 測試示例 302
9.2 可重用的客戶端代碼 303
9.2.1 Encoder 304
9.2.2 Parser 304
9.2.3 StreamLib 304
9.2.4 StringCoder 305
9.2.5 HttpLib 306
9.2.6 Queue 308
9.2.7 ListQueue 309
9.2.8 Loopable 312
9.2.9 Looper 313
9.2.10 HttpMessagePusher 315
9.3 游戲特定的客戶端代碼 318
9.4 可重用的伺服器端代碼 323
9.4.1 Server 323
9.4.2 HttpGatewayServlet 324
9.5 游戲特定的伺服器端代碼 327
9.6 打包WAR 330
9.6.1 web.xml 330
9.6.2 build.xml 331
9.7 小結 332
9.8 參考文獻 332 10.1 測試示常式序 333
10.2 可重用的客戶端代碼 334
10.2.1 SerializableCoder 334
10.2.2 HttpMessagePoller 335
10.2.3 Consumer 340
10.2.4 QueuePuller 340
10.2.5 HttpMessageClient 342
10.3 游戲特定的客戶端代碼 345
10.3.1 Request 345
10.3.2 AbstractRequest 346
10.3.3 FireRequest 346
10.3.4 MoveRequest 347
10.3.5 ViewRequest 348
10.3.6 GameData 348
10.3.7 Synchronizer 350
10.3.8 NetController 354
10.3.9 NetMain 356
10.4 可重用的伺服器端代碼 357
10.4.1 XmlBeanCoder 358
10.4.2 SerializableLib 359
10.5 游戲特定的伺服器端代碼 360
10.5.1 GameInit 360
10.5.2 Player 362
10.5.3 NetGame 363
10.5.4 MarsServer 370
10.5.5 MarsServlet 376
10.6 小結 378
10.7 參考文獻 378 11.1 測試示例 379
11.2 可重用的客戶端代碼 381
11.2.1 Authentication 381
11.2.2 Id 381
11.2.3 LongId 382
11.2.4 ModelId 383
11.2.5 SeriModelId 383
11.3 游戲特定的客戶端代碼 384
11.3.1 Request 384
11.3.2 CoalesceableRequest 384
11.3.3 ChatController 385
11.3.4 Response 386
11.3.5 CreateUserConsumer 386
11.3.6 Event 387
11.3.7 ChatClient 387
11.3.8 ChatSynchronizer 393
11.3.9 ChatPanel 395
11.3.10 ChatApplet 398
11.4 伺服器端代碼 400
11.4.1 User 400
11.4.2 UserStore 401
11.4.3 PullServer 402
11.4.4 MoveServer 403
11.4.5 SeriChatGame 404
11.4.6 ChatServer 409
11.5 跟蹤消息 411
11.5.1 多玩家聯網模式 412
11.5.2 單玩家本地模式 413
11.6 擴展示例 414
11.7 小結 414
11.8 參考文獻 415 附錄A 源代碼索引 416
附錄B CVS簡介 420
B.1 檢出代碼 420
B.2 創建自己的項目 421
B.3 並行程序設計 423
B.3.1 實施代碼所有權 423
B.3.2 互相監視 424
B.3.3 創建分支 425
B.4 參考文獻 425