Ⅰ 求个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