2005年02月18日

北京昨天下了雪,不过没有15日的大。大概-10左右的温度,比上海低了快15度。风也很大,吹在脸上特别冷。好在坐车和在屋子里不是很冷,稍稍抵消了在上海时没有暖气的郁闷。

刚刚整理好东西。明天开始投入新的学校和工作中。。。

2005年02月13日

如何才算掌握Java(J2SE篇)

dulu 原创 

这几天都在看swing和awt,呵呵

    
时常看到一些人说掌握了Java,但是让他们用Java做一个实际的项目可能又困难重重,在这里,笔者根据自己的一点理解斗胆提出自己的一些对掌握
Java这个说法的标准,当然对于新手,也可以提供一个需要学习哪些内容的参考。另外这个标准仅限于J2SE部分,J2EE部分的内容有时间再另说。
  1、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。
 
2、命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:appletviewer、HtmlConverter、jar、java、
javac、javadoc、javap、javaw、native2ascii、serialver,如果这些命令你没有全部使用过,那么你对java
实际上还很不了解。
  3、工具:必须至少熟练使用一种IDE的开发工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括进行工程管理、常用选项的设置、插件的安装配置以及进行调试。
  4、API:Java的核心API是非常庞大的,但是有一些内容笔者认为是必须熟悉的,否则不可能熟练的运用Java,包括:
    1)、java.lang包下的80%以上的类的功能的灵活运用。
    2)、java.util包下的80%以上的类的灵活运用,特别是集合类体系、规则表达式、zip、以及时间、随机数、属性、资源和Timer。
    3)、java.io包下的60%以上的类的使用,理解IO体系的基于管道模型的设计思路以及常用IO类的特性和使用场合。
    4)、java.math包下的100%的内容。
    5)、java.net包下的60%以上的内容,对各个类的功能比较熟悉。
    6)、java.text包下的60%以上的内容,特别是各种格式化类。
    7)、熟练运用JDBC。
    8)、java.security包下40%以上的内容,如果对于安全没有接触的话根本就不可能掌握java。
    9)、AWT的基本内容,包括各种组件事件、监听器、布局管理器、常用组件、打印。
    10)、Swing的基本内容,和AWT的要求类似。
    11)、XML处理,熟悉SAX、DOM以及JDOM的优缺点并且能够使用其中的一种完成XML的解析及内容处理。
  5、测试:必须熟悉使用junit编写测试用例完成代码的自动测试。
  6、管理:必须熟悉使用ant完成工程管理的常用任务,例如工程编译、生成javadoc、生成jar、版本控制、自动测试。
  7、排错:应该可以根据异常信息比较快速的定位问题的原因和大致位置。
  8、思想:必须掌握OOP的主要要求,这样使用Java开发的系统才能是真正的Java系统。
  9、规范:编写的代码必须符合流行的编码规范,例如类名首字母大写,成员和方法名首字母小写,方法名的第一个单词一般是动词,包名全部小写等,这样程序的可读性才比较好。

2005年02月12日

一、入门
《Java 2从入门到精通》- 推荐
《Thinking in Java》- 强烈推荐*新手可能有点难度
O’reilly的Java编程基础系列 - 参考*

二、进阶
《Java Cook Book》- 非常推荐* (包含了Java编程的Tips,适合当做手册来查阅)
《O’reilly-Java IO》- 推荐* (包含Java IO编程的各个方面)
《O’reilly-Database Programming with JDBC》- 推荐* (JDBC编程)
《O’reilly-Java Programming with Oracle JDBC》- 参考*

三、Java Web编程
《O’reilly-Java Server Pages》- 强烈推荐*
《O’reilly-Java Servlet Programming》- 非常推荐*
《O’reilly-Jakarta Struts》- 推荐* (Java Web编程的一个MVC实现框架Struts的书)

四、EJB编程
《J2EE应用与BEA Weblogic Server》- 强烈推荐
《Mastering EJB 2.0》- 非常推荐*
《Enterprise Java Bean》- 推荐*

五、Java XML编程
《O’reilly-Java and XML》- 推荐*
《O’reilly-Java and SOAP》- 参考* (Java的SOAP编程)

六、设计模式
《Core J2EE Patterns》- 强烈推荐* (J2EE设计模式,设计企业应用软件必备参考书)
《EJB Design Patterns》- 推荐*

七、其它
《O’reilly Ant – The Definitive Guide》- 推荐* (Ant是一种功能非常强大的Java工具)

java的学习方向
我们学习Java大概有3个方向,第一,桌面系统,包括C/S结构;第二,J2ME,面向无限领域,很有潜力的家伙,看看中国的手机用户就知道了。第三,面向企业应用、计算的平台,J2EE.
初次涉及Java领域,感觉到Java入门是好像没有C,C++入门快,工具也没有什么Turbo C,Visual C++好用(自己的破机器实在陪不起JBuilder,贪婪的家伙,以后一定要收拾她)。什么JAVA_HOME,CLASSPATH,虚拟机等概念都是初次基础,旁边的人都很少用Java的。感觉Java就是做Applet的。慢慢的知道了http://java.sun.com ,开始知道Java博大精深。让我不可思议的是JAVA 2,JDK,J2SE,J2EE,J2ME等新名词在自己的脑海里蔓延。慢慢的自己知道了JCP组织是制定Java相关规范的发源地http: //java.jcp.org ,于是订阅了一份邮件列表。真是好东西啊,定期有Java的最新动向,所以Java的动态尽收眼里,建议大家也去订阅一份。免费的。自己动手下载了 Java(TM) 2 SDK和Java(TM) 2 SDK Documentation后,不懂的就查Java(TM) 2 SDK Documentation,特别好用,也不需要什么手册之类的,建议大家都要有一份。

搭起Java开发环境后,记得还是用UltraEdit编辑并编译的(在其中可以配好Java的编译环境)。慢慢的改用JCreator了。不错,至少很多方面有改进。最开始卖了一套 2本书,还不错。对于入门来说足够了。慢慢的知道是一本好书,后来才知道,有了Java经验后,看这本书特别过瘾,所以现在还经常翻翻。周而复始的看,效果特别好。慢慢的知道了Oreilly公司(http://www.oreilly.com)出的图书不错,很高雅,国内翻译的也还可以(http: //www.oreilly.com.cn)。本人收集了很多Oreilly的原版图书,有需要的可以和我联系(Acrobat pdf格式)。慢慢知道了jjhou这个人.(http://jjhou.csdn.net )以及他的个人网站,最让我感兴趣的是jjhou老师写的散文,书评,很有收获,不是为技术而技术。很有趣味性。其中, http://www.epubcn.com 上有很多美丽的图书。

不知道什么时候,要开始干项目了,以前从书上看到的东西,慢慢的在项目中有了很好的机会去温习,慢慢的有了感觉,开始主要是用Swing,开发桌面系统,放置一个按钮怎么也放不好,后来才知道有一个布局管理器。咳,这个婆婆的Java也讨厌的很。开始涉及到数据库访问,JDBC。后来我才知道, Sun的Java网站有一个Java Tutorial。(http://java.sun.com/docs/books/tutorial/ )。同时,也知道了蔡?W?O先生的sleepless in java(http://www.oreilly.com.tw/sleepless/index.htm ),太美了,美的很。 满满的,OReilly, http://www.onjava.com/ 也是不错的地方。都有很多优秀的文章。http://www-900.ibm.com/developerWorks/cn/index.shtml,也很棒。

每次,美美的享用一顿大餐后,也来也觉得自己是不是应该换一种学习方式,因为这样学习效果不太好。比较乱。让我想起了Java Specification,对,我开始研究Java规范了。最开始下载的规范是JDBC Specification,很多概念一目了然,尤其是DATABASE的事务性控制,自己对于她的理解慢慢的有了较为深入的了解。对于开发C/S结构,比如,Swing+JDBC,开发数据库应用系统,让我学会开发两层结构的应用系统。很神气。

也不知道什么时候要开始开发一个网站,基于Linux+JSP+JavaBean+Oracle的系统。很是有意思。为什么这么说呢?因为不同于 Swing+JDBC的开发模式,系统之间多了一层(JavaBean,姑且就这么叫吧!嘻嘻);同时,很多开发技术和面向左面系统不一样,比如分页技术。

————————————————————————————————- 完成项目后,自己对于Java的很多方面都比较了解了。开始思考一个问题,J2EE是什么东西?。我们学习Java大概有3个方向,第一,桌面系统,包括 C/S结构;第二,J2ME,面向无限领域,很有潜力的家伙,看看中国的手机用户就知道了。第三,面向企业应用、计算的平台,J2EE.
————————————————————————————————-

在痛苦的抉择后,我选择J2EE..分享J2EE给我带来的快乐。学到现在,最大的感觉,就是: 简单就是美,美就是Java.不会有学MFC的痛苦,也不会有去分析STL的艰辛,网路应用上一点也不逊色于C++。开始进入我的J2EE之旅。

还是下载了一份J2EE规范,一份J2EE SDK。开始研究J2EE,结合http://java.sun.com/j2ee/tutorial/index.html 提供的J2EE Tutorial开始研究了。大概过了1个月,开始有感觉了,也就在这个时候,需要我去完成一个J2EE构架方面的项目。差不多边学编写完成了,很多概念在写完后都不是很清晰,因为东西太多了,主要是基于JSP(Servlet)+Session Bean+EIS构架开发系统。当然也学到很多东西,至少对SB EJB的编写不成问题。懂得了JSP如何调用EJB……..

完成项目后,我开始研究Java Pet Store了,很是过瘾。开始知道了Servlet过滤器,XML方面较为全面的知识,知道了J2EE整个框架中各种技术的实际应用。慢慢的,开始研究 WebLogic配置好的Pet Store(也是Sun公司的)。慢慢的分析两者的不同之处。开始对J2EE Specification有了很好的感觉。因为J2EE Specification本身是很严肃的,但Pet Store给出了活力。在反复的学习中,我明白了J2EE构架的70-80%。新的问题又出来了,实际企业中会如何建构一个J2EE系统呢?带着这个问题,我开始分析Core J2EE Patterns,这本书。同时,也有EJB Design Patterns。慢慢的,开始知道了J2EE的魅力所在,知道了J2EE为什么会在企业中得到较为好的认可。大家都知道,设计模式一词,在公司上班,你们的老板会看你的代码吗?会赞赏你的DP很好吗,我想很少。在完成你的工作进度之余,加班,加班,再加班,我想你没有更多的时间去分析研究DP.但, J2EE框架不一样,她内置了很多优秀的设计模式,我们在设计开发、构架一个J2EE系统中用到了很多设计模式。比如,MVC,EJB中封装的DAO设计模式。构架J2E系统用Session Fa?ade,Message Fa?ade设计模式也不会太困难。这也是后来J2EE吸引我的地方。慢慢的我知道了,作为一个J2EE开发者,我们要掌握其中的核心内容。我个人认为, 3方面很重要。实施EJB系统常用的架构、设计模式,比如session fa?ade、message fa?ade、DTO等。J2EE系统构架中常用的模式。UML-> EJB,EJB->UML相互映射。现在也一样在研究。

善于享受孤独,幸好还有J2EE!

网络上、书店都提供了很多资料,很多方式都可以得到J2EE方面的资料。如何系统的、高效的学习J2EE这个问题摆在我们面前。比如, 有些人在看完一大堆书后,动起手来时还是不知道怎么开始。等等这些问题是我们最难处理的。如何寻找到一条很好的方式方法呢?

其实,换一个角度来看,比如,学英语,一共有三个层面的东西,首先是词汇,然后是语法,再者是习惯用法(希望读者能够从程序设计的角度考虑问题,看看这两者有什么相似之处,其实他们的逻辑是一样的)。还比如,上数学课,老师在黑板上解题,大家都很轻松得听懂,自己动手时就会有很多问题。这些看来很简单的问题,其实都包含一个道理:



理论联系实际,理论指导实践。



我们的理论在于,我们要有很好的方法。有些人看了很多书,写了不少程序,水平还是提高得很慢,很难跨越这道难关。还是方法问题。当然,我所谈论的方法,是自己的心得,体会,大家都有自己很独特的方法。没有绝对好、绝对坏的方法,看作用对象是谁。所以这里我们重点看看我这文章中所会提出来的方法。大家来评论评论。

J2EE是现在进行时。我们知道J2EE由很多技术构成,比如,EJB、XML、JDBC、RMI、JSP、Servlet、。。。。等等这些,又包含很多内容。 无论这些具体的技术会怎么发展,怎么变化,我们要抓住主线,那就是掌握J2EE构架的精髓。用什么来分析呢,作用对象自然是J2EE Specification(最新版是1.4,http://java.sun.com/j2ee )!!!当然学习J2EE的前提是你对J2SE有了足够的熟悉了,还有一点,你有很好的态度和兴趣。只看J2EE规范是不够的,最好结合产品和例子去思考,我建议大家用JBuilder 7 +BEA WebLogc Platform 7.0,这种开发模式。为什么这么说呢?首先,JBuilder 7本身的功能就是不错,应该属于主流Java IDE了。其次,BEA WebLogic Platform 7.0对J2EE Specification最新版支持程度很好,同时也较容易获取,用的人也多。第三,开发效率不错。(Borland网站有一份讲述JBuilder 7 + BEA WebLogic 7.0集成开发的文档。PDF格式。http://bdn.borland.com/article/0,1410,28943,00.html )

JBuilder 7本身提供了很多帮助文档,有PDF格式,也有HTML格式(采用JavaHelp技术制作的),另外书店有一些JBuilder的参考用书,个人认为没有必要,第一,提供的版本都比较陈旧;第二,没有什么内容;第三,一般都是抄袭JBuilder 本身提供的帮助文档。(个人观点,没有任何商业目的)。当然,你的外语差不多要有四级水平,这个可不能没有,至少阅读能力不错(其实也不是这样的,我最开始时也是害怕,但开始投入后,英语资料也很简单,而且很地道!同时提高了您的外语)。WebLogic同样也不错,也提供了很多文档,http: //www.bestdown.com 上有一本WebLogic Bible(针对6.1版),国内的BEA公司好像也出了一本,有兴趣地可以去, http://www.china-pub.com 看看。

有了这两者,我们需要找出合适的对象来学习。在这里给出几方面的素材给大家提供参考。第一,在JBuilder 7的安装目录的这个地方,~~:JBuilder7samplesEjbEjb20ESiteWL,有一个很好的例子,ESite。其中用到了 Session Fa?ade设计模式,用到了JSP、Servlet、Session Beans、Entity Beans(cmp)等技术,学习过程中不懂得地方可以参考第二。即,第二, http://java.sun.com/j2ee/tutorial/index.html 提供的J2EE Tutorial资料,很不错,Sun公司的。

第三,Java Pet Store,刚开始学习J2EE技术分析该例子有点困难,再者这个例子中的J2EE构架不是很实用,但她给我们展示了J2EE几乎所有的核心技术,同时还提供了一本书,Design Enterprise Applications with J2EE Platform,很不错。第四,对J2EE构架比较了解,对EJB,XML,JSP,Servlet等技术有了较好的理解和程序经验后,建议看看这几本书。《J2EE In Practice》、《Core J2EE Patterns》、《Sun Certified ENT Architect for J2EE – Tech Study Guide》、《Java Tools for Extreme Programming – wiley》、《EJB Design Patterns》、《MasteringEJB 2》、《Enterprise JavaBeans,3rd》,够你看得了:)。

有了上述基础,结合大家做项目中的一些经验,我想水平应该会有不少提高。在初步掌握上述基础后,我们每个人都可以有自己在J2EE中的定位,比如有些开发人员可以考虑把时间花在商务逻辑层、另外一些喜欢花功夫在表示层,更有贪婪的家伙花在J2EE中所有的层。还有Web Services(J2EE 1.4 Specification的重点,估计2003年初推出,今后的重要发展方向)。

同时,大家要注意从软件工程的角度考虑系统设计,实施,建议用用Together!!!要求大家对UML有足够的了解。

要想学好Java,首先要知道Java的大致分类。我们知道,自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要
分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准
版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的
开发,如电子商务网站和ERP系统。J2SE开发桌面应用软件比起VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来
说,好象又有点深奥,而且一般开发者很难有开发环境。所以现在应用最广泛又最好学的就是J2EE了。J2EE又包括许多组件,如Jsp,Servlet,
 JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。 

那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。如果你学过HTML,
那么事情要好办的多,如果没有,那你快去补一补 HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。然后你就该学一
学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。
虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来
你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?还好,SUN提供
了Javabean可以把你的JSP中的Java 代码封装起来,便于调用也便于重用。接着就是EJB了,EJB就是
Enterprise JavaBean,看名字好象它是Javabean,可是它和 Javabean还是有区别的。它是一个体系结构,你可以搭建更安
全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的Weblogic, Websphere这些J2EE服务器)完成了,所以我们要做的
程序代码量很少,大部分工作都在设计和配置中间件上。至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你
要用Java编发送电子邮件的程序,你就得看看Javamail了。 

好了,对 Java和J2EE有了一些基本概念之后,你就应该编一些程序了,千万不要纸上谈兵哦。最好找一些有实例且带光盘的书来看,这样看到好的程序就
可以直接 Ctrl+C再Ctrl+V,也不用劳您老大架再亲自把它 再输一遍吧,再说直接复制还不用怕出错,何乐而不为呢!还有就是要经常上一些好的
Java编程文章,有好的文章要Cut下来,有问题尽管问,只要问题不是太傻,一般高手都会回答你的。下面介绍几个好的Java方面的编程网站: 

CSDN论坛 http://www.csdn.net/ ;中国最有名的技术论坛,《程序员》杂志就是他们出版的,你可以在上面提出问题,马上就有人回答你,如果你觉得好,你可以给那人加分; 

Java研究组织http://www.javaresearch.org/ ;上面有很多原创文章,高手还是挺多的; 

Java开发者 http://www.chinajavaworld.com/ ;那里Java资料比较全; 

java.com.cn http://www.java.com.cn/ ;看这域名就知道有多牛,注册用户快接近一万了,同时在线人数也在一千左右,人气很旺的; 

IBM的开发者网络http://www-900.ibm.com/developerWorks/cn/java/index.shtml IBM永远的蓝色巨人; 

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项
目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!你现在最缺的是
实际的工作经验,而不是书本上那些凭空想出来的程序。所以你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那
才是最快的。不过你得祈祷在公司里碰到一个高手,而且他还愿意不厌其烦地教你,这样好象有点难哦! 

还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿
锵有力(对不起,偶最近《金装四大才子》看多了)。学Java必读的两个开源程序就是Jive和Pet Store.。Jive是国外一个非常著名的
BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以
很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用
户的感受,这就是我们与国外软件的差距所在)。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的
是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不
能开源吗?这里向大家推荐一个汉化的Jive版本?J道。Jive(J道版)是由中国Java界大名鼎鼎的banq在Jive 2.1版本基础上改编而
成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站http://www.jdon.com/ ; 去下载,或到同济技术论坛的服务器上ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。Pet Store. (宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要错过了。 

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。其
实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java
的精髓。接下来你得研究设计模式了。设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体”技术”,它讲述的是思想,它不仅仅
展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式
反复向你强调一个宗旨:要让你的程序尽可能的可重用。关于设计模式的资料,还是向大家推荐banq的网站http://www.jdon.com/ ;,
他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。有时间再研究一下MVC结构(把Model-View-
 Control分离开的设计思想)吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即
可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring(重整)和极限XP编程,相信你又会上一个台阶。 

做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友
成立一个工作室吧,你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,
所以 Money就哗啦啦的来了。。。。。。 

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 

下面介绍两个好的开源项目网站: 

湖北省软件公共开发平台http://gro.clinux.org/ ;

共创联盟http://cosoft.org.cn/ ;

哇,好高兴哦,我终于成为高手了!非也,非也。古人云:“识时务者为俊杰”。你知道计算机界现在的发展形势吗?你知道微软的.NET蓝图和SUN ONE
计划之间的明争暗斗吗?你知道计算机技术将向何处发展吗?其实从各大计算机厂商最近的动作,都可以看出来“Web服务将是下一代互联网应用的制高点”,而
微软的.NET蓝图和SUN ONE计划的斗争焦点,也就是Web服务。Web服务就是一个崭新的分布式计算模型,它是一系列标准的综合(XML,
SOAP, UDDI,WSDL和WSFL等)。它使得不同语言编写的软件能够轻易的集成起来,使网络资源和Web站点变成一种服务而不是混乱的垃圾场。
不远的将来,我们就可以在家里点击一下鼠标,就可以完成出门旅游的全部准备工作,包括定飞机票,定旅游线路,定好房间等。请注意,这所有的一切都是Web
站点间自动完成的,再也不用象现在一样,表面上是电子商务,实际上很多环节都是人工操作。也许你会觉得这是天方夜谈,不过就近的说,你也很有可能承接一个
项目,要集成两个企业的ERP系统。很有可能上游企业的系统是用Dephi编的,而下游企业的系统是用Java编的。你说你是Java高手,大家都看者你
怎么做呢。所以啊,你还得学习新技术,如Web服务,而且你Dephi也要懂一点吧(Dephi6现在已经提供Web服务的控件了)。 你编的Java系
统,可能要和.NET集成,所以你.NET要懂一点吧?到最后,你可能发现你已经成为Java高手了,但很多时间却在搞别的技术。太极张三丰里说,最厉害
的招式就是没有招式,可能就是这个道理吧! 

因为刚刚兴起,所以网上Web服务的资料不是很多,我还是给大家推荐几个网站吧: 

中国UDDI技术联盟http://www.uddi-china.org/ ;

CSDN的柴晓路专栏http://www.csdn.net/develop/author/ColumnAuthor/fennivel/ ;(注:柴晓路也是互联网上一个有名的人物,他发表过很多关于Web服务的文章,还出了一书,应该称的上是中国Web服务技术的先行者) 

IBM的开发者网络的XML&Web Service专栏: 

http://www-900.ibm.com/developerWorks/cn/xml/index.shtml?csdn IBM可是Web服务的力推者 

呜…你费劲千心万苦,总算成为Java高手了,怎叫人不由喜极而泣呢!是啊,真不容易,真不简单,真叫人感动啊!那么打个电话告诉我吧,什么?我的电话号码是多少?昏到,你打电话问不就知道了吗,真是的……

一个不错的东东,整理好了放在这里:)

1:jdk开发中系统环境变量设置:
方法如下:
Win2000中:
右键我的电脑–》属性–》高级–》环境环境变量
classpath=.;jdk安装目\lib
path=jdk安装目录\bin
注意:一定不可忽略”.”。
Win98中:
修改autocexe.bat 就是修改自动批处理文件。
添加:
set classpath=.;jdk安装目\lib
set path=jdk安装目录\bin;%path%

2:(前提设置好了系统环境变量)
不带包的编译,相当简单:
javac 类名.java
java 类名

关于带包的编译问题:
如果你的类是带包的,应该用如下方法编译:
javac -d  包的父目录 类名.java
java  包名.类名

3:Tomcat服务器配置:
   1):设置好系统环境变量。
   2):JAVA_HOME=G:\JBuilder6\jdk1.3.1
     G:\JBuilder6\jdk1.3.1为jdk安装目录
   3):TOMCAT_HOME=tomcat安装目录
4:修改serlet而不重新启动tomcat
修改
%TOMCAT_HOME%\conf\server.xml
大致如下:
<Context path=”" docBase=”ROOT” debug=”0″  reloadable=”true”/>
其中reloadable就是配置是否自动reload的,把它设为true,如果没有这一项,加上。
5:修改webshpere中的servlet而不重新启动服务:
修改..\WEB-INF下面的web.xml:
加入<webappext:WebAppExtension xmi:version=”2.0″ xmlns:xmi=”http://www.omg.org/XMI” xmlns:webappext=”webappext.xmi” xmlns:webapplication=”webapplication.xmi” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmi:id=”WebApp_ID_Ext” reloadInterval=”3″ reloadingEnabled=”true” fileServingEnabled=”true” directoryBrowsingEnabled=”true” serveServletsByClassnameEnabled=”true”>其中reloadInterval=”3″ reloadingEnabled=”true” fileServingEnabled=”true” directoryBrowsingEnabled=”true” serveServletsByClassnameEnabled=”true”是主要的,reloadInterval=”3″ reloadingEnabled=”true” 是说修改后3秒自动重新载
入。
6:配置jbuilder6+webshpere4.0AE,其实jb7可以参照:
首先安装j2ee,然后把j2ee加入到jb的libraries里面。方法如下
  1:)tools—>configure libraries–>new—>name:里面填写j2ee,Location:里面默认的旧可以了。—->add– >选在j2ee安装路径,选中lib文件夹--ok–oK.
 2:)返回到configure libraries也面后,选中Required Libraries–>add--》选中你刚才创建的j2ee,点ok就可以了。
然后配置webshpere应用服务器和database pilot:
第一步:tools–>enterprise setup–>Application servers设置安装路径以及IBM的JAVA路径,DB2你自己看着办
第二步:project–>Defaults project properties里servers选择Ws4.0,应该可以用了
webshpere4.0不支持ejb2.0,webshpere5.0支持。
配置database pilot
第一步:添加类库tools–>config libraries添加你的数据库驱动程序类
第二步:tools–>enterprise setup–>Database Drivers里面添加你刚添加的那个类库
第三步:重启JBilder后,tools–>database pilot–>option–>drivers,添加驱动程序
第四步:在database pilot点新建就可以了,driver:COM.ibm.db2.jdbc.app.DB2Driver。url:jdbc:db2:db_sdbc.(db_sdbc为服务器上的db2数据库).


7:解决java中文问题:
针对applet和awt:
    1:)
    Font f = new Font(UIResource.getString(      “Default_font”),Font.PLAIN,12);
      UIManager.put(“Label.font”,f);
      UIManager.put(“Label.foreground”,Color.black);
      UIManager.put(“Button.font”,f);
      UIManager.put(“Menu.font”,f);
      UIManager.put(“MenuItem.font”,f);
      UIManager.put(“List.font”,f);
      UIManager.put(“CheckBox.font”,f);
      UIManager.put(“RadioButton.font”,f);
      UIManager.put(“ComboBox.font”,f);
      UIManager.put(“TextArea.font”,f);


    2:)
      Font f = new Font(“隶书”,Font.PLAIN,15);
           UIManager.put(“Button.font”,font);
   UIManager.put(“ToggleButton.font”,font);
   UIManager.put(“RadioButton.font”,font);
   UIManager.put(“CheckBox.font”,font);
   UIManager.put(“ColorChooser.font”,font);
   UIManager.put(“ToggleButton.font”,font);
   UIManager.put(“ComboBox.font”,font);
   UIManager.put(“ComboBoxItem.font”,font);
   UIManager.put(“InternalFrame.titleFont”,font);
   UIManager.put(“Label.font”,font);
   UIManager.put(“List.font”,font);
   UIManager.put(“MenuBar.font”,font);
   UIManager.put(“Menu.font”,font);
   UIManager.put(“MenuItem.font”,font);
   UIManager.put(“RadioButtonMenuItem.font”,font);
   UIManager.put(“CheckBoxMenuItem.font”,font);
   UIManager.put(“PopupMenu.font”,font);
   UIManager.put(“OptionPane.font”,font);
   UIManager.put(“Panel.font”,font);
   UIManager.put(“ProgressBar.font”,font);
   UIManager.put(“ScrollPane.font”,font);
   UIManager.put(“Viewport”,font);
   UIManager.put(“TabbedPane.font”,font);
   UIManager.put(“TableHeader.font”,font);
   UIManager.put(“TextField.font”,font);
   UIManager.put(“PasswordFiled.font”,font);
   UIManager.put(“TextArea.font”,font);
   UIManager.put(“TextPane.font”,font);
   UIManager.put(“EditorPane.font”,font);
   UIManager.put(“TitledBorder.font”,font);
   UIManager.put(“ToolBar.font”,font);
   UIManager.put(“ToolTip.font”,font);
   UIManager.put(“Tree.font”,font);

 3:)针对jsp和servlet:
解决办法:
第一:
在jsp页面加入:
<%@ page contentType=”text/html; charset=gb2312″ %>
或者在servlet里面
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(“text/html; charset=gb2312″);//这是重要的
上面的如果在不行就用如下的方法在数据入库前进行调用:
public static String UnicodeToChinese(String s){
  try{
     if(s==null||s.equals(“”)) return “”;
     String newstring=null;
     newstring=new String(s.getBytes(“ISO8859_1″),”gb2312″);
     return newstring;
    }
  catch(UnsupportedEncodingException e)
  {
  return s;
  }
  }

public static String ChineseToUnicode(String s){
  try{
  if(s==null||s.equals(“”)) return “”;
  String newstring=null;
  newstring=new String(s.getBytes(“gb2312″),”ISO8859_1″);
   return newstring;
  }
  catch(UnsupportedEncodingException e)
  {
  return s;
 }
  }

3:)解决weblogic/webshpere中文问题:
在web.xml文件中需要配置中文环境。r如下:
<context-param>
  <param-name>weblogic.httpd.inputCharset./*</param-name>
  <param-value>GB2312</param-value>
</context-param>
  4:)javamail附件中文乱码:
/*
        @从BodyPart中提取使用ISO-8859-1编吗的文件名
        @因为BodyPart.getFilename()过程已经对文件名作了一次编码,有时不能直接使用
    */
    public static String getISOFileName(Part body){
        //设置一个标志,判断文件名从Content-Disposition中获取还是从Content-Type中获取
        boolean flag=true;
        if(body==null){
            return null;
        }
        String[] cdis;
        try{
            cdis=body.getHeader(“Content-Disposition”);
        }
        catch(Exception e){
            return null;
        }
        if(cdis==null){
            flag=false;
        }
        if(!flag){
            try{
                cdis=body.getHeader(“Content-Type”);
            }
            catch(Exception e){
                return null;
            }
        }
        if(cdis==null){
            return null;
        }
        if(cdis[0]==null){
            return null;
        }
        //从Content-Disposition中获取文件名
        if(flag){
            int pos=cdis[0].indexOf(“filename=”);
            if(pos<0){
                return null;
            }
            //如果文件名带引号
            if(cdis[0].charAt(cdis[0].length()-1)==’”‘){
                return cdis[0].substring(pos+10,cdis[0].length()-1);
            }
            return cdis[0].substring(pos+9,cdis[0].length());
        }
        else{
            int pos=cdis[0].indexOf(“name=”);
            if(pos<0){
                return null;
            }
            //如果文件名带引号
            if(cdis[0].charAt(cdis[0].length()-1)==’”‘){
                return cdis[0].substring(pos+6,cdis[0].length()-1);
            }
            return cdis[0].substring(pos+5,cdis[0].length());
        }
    }
8:字符串分割:
    public int getCount(String str,String sign){//查找某一字符串中str,特定子串s的出现次数
      if(str==null) return 0;
      StringTokenizer s=new StringTokenizer(str,sign);
      return s.countTokens();
  }
 public String[] getArray(String str,String sign){//按特定子串s为标记,将子串截成数组。
    int count=getCount(str,sign);
    int j=0;
    String[] arr=new String[count];
    for(int i=0;i<count;i++){
       if(str.indexOf(sign)!=-1){
            j     =str.indexOf(sign);
            arr[i]=str.substring(0,j);
            str   =str.substring(j+1);
        }else{
            arr[i]=str;
        }
    }
    return arr;

}
9:jdk1.3没有字符串替换函数,(jdk1.4有)。
解决1.3中的个这个问题如下:

public String stringReplace(String sourceString, String toReplaceString, String replaceString)
  {
    String returnString = sourceString;
    int stringLength = 0;
    if(toReplaceString != null)
    {
      stringLength = toReplaceString.length();
    }
    if(returnString != null && returnString.length() > stringLength)
    {
      int max = 0;
      String S4 = “”;
      for(int i = 0; i < sourceString.length(); i++)
      {
        max = i + toReplaceString.length() > sourceString.length()? sourceString.length():i + stringLength;
        String S3 = sourceString.substring(i, max);
        if(!S3.equals(toReplaceString))
        {
          S4 += S3.substring(0,1);
        }else{
          S4 += replaceString;
          i += stringLength -1 ;
        }
      }
      returnString = S4;
    }
    return returnString;
  }
9:设置weblogic连接池:

pool的配置:
假设已配置服务:expserv
且数据库服务器机器名为:expserv
数据库sid:expservSID,用户名和密码都为:expserv
以weblogic7.0为例,首先启动服务
http://localhost:port/console
打开service\jdbc\connection pools
配置oraclePool如下:
Configuration:
   Name: oraclePool
   URL: jdbc:oracle:thin:@expserv:1521:expservSID
   Driver Classname: oracle.jdbc.driver.OracleDriver
   Properties(key=value): user=expserv
Targets:
   Targets-Server:expserv
在weblogic7.0中除了数据库密码,其他的pool参数都可以在config.xml中直接用文本编辑器直接修改。

10:数字转货币大写(js)
function ChangeToBig(value)
{
 var intFen,i;
 var strArr,strCheck,strFen,strDW,strNum,strBig,strNow;

 if(trim(value)==”")   //数据为空时返回”零”
  return “零”;
 if (isNaN(value))   //数据非法时提示,并返回空串
 {
  strErr = “数据”+value+”非法!”
  alert(strErr);
  return “”;
 }
 strCheck = value+”.”;
 strArr = strCheck.split(“.”);
 strCheck = strArr[0];
 if(strCheck.length>12)   //数据大于等于一万亿时提示无法处理
 {
  strErr = “数据”+value+”过大,无法处理!”
  alert(strErr);
  return “”;
 }
 try
 {
  i = 0;
  strBig = “”;
  intFen = value*100;          //转换为以分为单位的数值
  strFen = intFen.toString();
  strArr = strFen.split(“.”);
  strFen = strArr[0];
  intFen = strFen.length;      //获取长度
  strArr = strFen.split(“”); //将各个数值分解到数组内
  while(intFen!=0)   //分解并转换
  {
   i = i+1;
   switch(i)              //选择单位
   {
    case 1:strDW = “分”;break;
    case 2:strDW = “角”;break;
    case 3:strDW = “元”;break;
    case 4:strDW = “拾”;break;
    case 5:strDW = “佰”;break;
    case 6:strDW = “仟”;break;
    case 7:strDW = “万”;break;
    case 8:strDW = “拾”;break;
    case 9:strDW = “佰”;break;
    case 10:strDW = “仟”;break;
    case 11:strDW = “亿”;break;
    case 12:strDW = “拾”;break;
    case 13:strDW = “佰”;break;
    case 14:strDW = “仟”;break;
   }
   switch (strArr[intFen-1])              //选择数字
   {
    case “1″:strNum = “壹”;break;
    case “2″:strNum = “贰”;break;
    case “3″:strNum = “叁”;break;
    case “4″:strNum = “肆”;break;
    case “5″:strNum = “伍”;break;
    case “6″:strNum = “陆”;break;
    case “7″:strNum = “柒”;break;
    case “8″:strNum = “捌”;break;
    case “9″:strNum = “玖”;break;
    case “0″:strNum = “零”;break;
   }

   //处理特殊情况
   strNow = strBig.split(“”);
   //分为零时的情况
   if((i==1)&&(strArr[intFen-1]==”0″))
    strBig = “整”;
   //角为零时的情况
   else if((i==2)&&(strArr[intFen-1]==”0″))
   {    //角分同时为零时的情况
    if(strBig!=”整”)
     strBig = “零”+strBig;
   }
   //元为零的情况
   else if((i==3)&&(strArr[intFen-1]==”0″))
    strBig = “元”+strBig;
   //拾-仟中一位为零且其前一位(元以上)不为零的情况时补零
   else if((i<7)&&(i>3)&&(strArr[intFen-1]==”0″)&&(strNow[0]!=”零”)&&(strNow[0]!=”元”))
    strBig = “零”+strBig;
   //拾-仟中一位为零且其前一位(元以上)也为零的情况时跨过
   else if((i<7)&&(i>3)&&(strArr[intFen-1]==”0″)&&(strNow[0]==”零”))
    {}
   //拾-仟中一位为零且其前一位是元且为零的情况时跨过
   else if((i<7)&&(i>3)&&(strArr[intFen-1]==”0″)&&(strNow[0]==”元”))
    {}
   //当万为零时必须补上万字
   else if((i==7)&&(strArr[intFen-1]==”0″))
    strBig =”万”+strBig;
   //拾万-仟万中一位为零且其前一位(万以上)不为零的情况时补零
   else if((i<11)&&(i>7)&&(strArr[intFen-1]==”0″)&&(strNow[0]!=”零”)&&(strNow[0]!=”万”))
    strBig = “零”+strBig;
   //拾万-仟万中一位为零且其前一位(万以上)也为零的情况时跨过
   else if((i<11)&&(i>7)&&(strArr[intFen-1]==”0″)&&(strNow[0]==”万”))
    {}
   //拾万-仟万中一位为零且其前一位为万位且为零的情况时跨过
   else if((i<11)&&(i>7)&&(strArr[intFen-1]==”0″)&&(strNow[0]==”零”))
    {}
   //万位为零且存在仟位和十万以上时,在万仟间补零
   else if((i<11)&&(i>8)&&(strArr[intFen-1]!=”0″)&&(strNow[0]==”万”)&&(strNow[2]==”仟”))
    strBig = strNum+strDW+”万零”+strBig.substring(1,strBig.length);
   //单独处理亿位
   else if(i==11)
   {
    //亿位为零且万全为零存在仟位时,去掉万补为零
    if((strArr[intFen-1]==”0″)&&(strNow[0]==”万”)&&(strNow[2]==”仟”))
     strBig =”亿”+”零”+strBig.substring(1,strBig.length);
    //亿位为零且万全为零不存在仟位时,去掉万
    else if((strArr[intFen-1]==”0″)&&(strNow[0]==”万”)&&(strNow[2]!=”仟”))
     strBig =”亿”+strBig.substring(1,strBig.length);
    //亿位不为零且万全为零存在仟位时,去掉万补为零
    else if((strNow[0]==”万”)&&(strNow[2]==”仟”))
     strBig = strNum+strDW+”零”+strBig.substring(1,strBig.length);
    //亿位不为零且万全为零不存在仟位时,去掉万
    else if((strNow[0]==”万”)&&(strNow[2]!=”仟”))
     strBig = strNum+strDW+strBig.substring(1,strBig.length);
    //其他正常情况
    else
      strBig = strNum+strDW+strBig;
   }
   //拾亿-仟亿中一位为零且其前一位(亿以上)不为零的情况时补零
   else if((i<15)&&(i>11)&&(strArr[intFen-1]==”0″)&&(strNow[0]!=”零”)&&(strNow[0]!=”亿”))
    strBig = “零”+strBig;
   //拾亿-仟亿中一位为零且其前一位(亿以上)也为零的情况时跨过
   else if((i<15)&&(i>11)&&(strArr[intFen-1]==”0″)&&(strNow[0]==”亿”))
    {}
   //拾亿-仟亿中一位为零且其前一位为亿位且为零的情况时跨过
   else if((i<15)&&(i>11)&&(strArr[intFen-1]==”0″)&&(strNow[0]==”零”))
    {}
   //亿位为零且不存在仟万位和十亿以上时去掉上次写入的零
   else if((i<15)&&(i>11)&&(strArr[intFen-1]!=”0″)&& (strNow[0]==”零”)&&(strNow[1]==”亿”)&&(strNow[3]!=”仟”))
    strBig = strNum+strDW+strBig.substring(1,strBig.length);
   //亿位为零且存在仟万位和十亿以上时,在亿仟万间补零
   else if((i<15)&&(i>11)&&(strArr[intFen-1]!=”0″)&& (strNow[0]==”零”)&&(strNow[1]==”亿”)&&(strNow[3]==”仟”))
    strBig = strNum+strDW+”亿零”+strBig.substring(2,strBig.length);
   else
    strBig = strNum+strDW+strBig;
   strFen = strFen.substring(0,intFen-1);
   intFen = strFen.length;
   strArr = strFen.split(“”);
  }
  return strBig;
 }catch(err){
  return “”;      //若失败则返回原值
 }
}

11:删除文件夹下的所有目录:
 /*
  * 删除一个目录下的所有文件
  */  
 public static void delAllFile(String path) {
  File file = new File(path);
  if(!file.exists()) return;
  if(!file.isDirectory()) return;
  String[] tempList = file.list();
  File temp = null;
  for(int i = 0; i < tempList.length; i++) {
   if(path.endsWith(File.separator))
    temp = new File(path + tempList[i]);
   else
    temp = new File(path + File.separator + tempList[i]);
   if(temp.isFile()) temp.delete();
   if(temp.isDirectory()) delAllFile(path + tempList[i]);
  }
 }
12:字符串转换成时间及时间相减:
    1:) SimpleDateFormat formatter = new SimpleDateFormat (”yyyy.MM.dd”);
        //假定像2002.07.04的是合法日期其他都非法。
    String str=”2002.07.04″;
    ParsePosition pos = new ParsePosition(0);
    Date dt=formatter.parse(str,pos);
   if(dt!=null)
   {
     //是合法日期
   }
    else
   {
     //非法日期
   }
2:)
两个日期相减
import java.util.*;
import java.text.*;
class a
{
 public static void main(String[] args)
 {
  String s1 = “2003/08/15 17:15:30″;
  String s2 = “2002/09/14 14:18:37″;
  try{
  SimpleDateFormat formatter = new SimpleDateFormat (“yyyy/MM/dd HH:mm:ss”);
 
  ParsePosition pos = new ParsePosition(0);
  ParsePosition pos1 = new ParsePosition(0);
  Date dt1=formatter.parse(s1,pos);
  Date dt2=formatter.parse(s2,pos1);
  System.out.println(“dt1=”+dt1);
  System.out.println(“dt2=”+dt2);
  long l = dt1.getTime() – dt2.getTime();
 
  System.out.println(“Hello World!=”+l);
  }catch(Exception e){
   System.out.println(“exception”+e.toString());
  }
 
 }
}


3:)得到2个月后的日期:
 import java.util.*;
 import java.text.DateFormat;
 public class test2
 {
  public static void main(String args[]) throws Exception
  {
   String date=”2001/11/30″;
   
   DateFormat dateFormat =
  DateFormat.getDateInstance(DateFormat.MEDIUM);
   GregorianCalendar grc=new GregorianCalendar();
   grc.setTime(new Date(date));


   grc.add(GregorianCalendar.MONTH,2);
   System.out.println(“grc=”+dateFormat.format(grc.getTime()));  
  }
 }

13:jsp/servet重定向问题:
不改变url的:
  1:)servlet:
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      getServletContext().getRequestDispatcher(test2URL).forward(request, response);
 2:)jsp
  <jsp:forward page=”/jsp/forward/one.jsp”/>
改变url的:
  1:)response.sendRedirect(“/web/mail/pop3.jsp”);

14:jb7+weblogic6.x配置方法如下:
Win 2000 Temp、Tmp 的配置

因为我们生成的 ejb 相关代码要进行一系列的编译,那么所生成的临时文件就要有个地方放啊,但 Win2000中的 Temp、Tmp 目录却偏偏有空格 如%USERPROFILE%\Local Settings\Temp,接下来我们来配置一下:

1) 右击 《我的电脑》 选属性,在弹出的对话框中选 《高级》 ,再选 《环境变量》 按钮,

2) 修改 《Administrator 的用户变量》和《系统变量》中的 TEMP、TEMP、TMPDIR 选项,单击每一个选项,然后点《编辑》(右图),把每个 变量名为  TEMP、TEMP、TMPDIR 的值都改为 c:\WINNT\temp ,当然这不是必须的,只是我建议你这么做。

其实也没什么难的,若改完,则Win2000环境这么应该没什么问题了。
WebLogic 6.X 部分

一、JDBC Connection Pool 的配置    以Mysql 小型数据库为例

在进行此项配置之前,先将欲使用的 数据库JDBC 驱动 Jar 文件放到D:\bea\wlserver6.1\lib\jdbc 目录下(建议这样做,没有jdbc目录就建一个呗),然后编辑D:\bea\wlserver6.1\config\mydomain 下的 startWebLogic.cmd 文件,在 classpath 中加入数据库的JDBC驱动文件,如红字部分:

:runWebLogic
echo on
set PATH=.\bin;.\bin\oci817_8;d:\oracle\ora81\bin;%PATH%
set CLASSPATH=.\lib\cr_wls60f.jar;.\lib\weblogic_sp.jar;.\lib\weblogic.jar;.\lib\jdbc\mysql.jar

这样 Weblogic 启动时才会加载欲使用的数据库JDBC驱动,配置也才会正常,否则会报错。
1)在Weblogic控制台中依次展开Services \ JDBC \ Connection Pools
2)单击 Configure a new JDBC Connection Pool…

3)填入每一项参数,结果如下:
url: jdbc:mysql://127.0.0.1:3306/test
driver classname:org.gjt.mm.mysql.Driver
properties(key=value):user=root
4) 别忘了点一下 Apply 即应用一下:)
5) Connections 签下的 初始容量、最大容量、容量增长等可根据自已需要配置
6) 还有至关重要的最后一步,我们做的以上配置工作还没有真正的应用到 Weblogic 上,所以还差一步,
    选 Targets 签,选 Servers 签,选 Available (可用)中的 myserver ,然后点”–>”  ,再点 Apply 应用一下。
    这样我们所做的工作才会真正有效, Weblogic 也才会认识我们配置的 JDBC Connection Pool
二、配置数据源

1)在Weblogic控制台中依次展开Services \ JDBC \ Tx Data Sources
2)单击 Configure a new JDBC Tx Data Source…
3)填入每一项参数,结果如下:

jndi name: MysqlDataSoruce
PoolName:MysqlPool
row prefetch size :48
stream chunk size: 2564) 别忘了点一下 Apply 即应用一下:)
5) 同样,选 Targets 签,选 Servers 签,选 Available (可用)中的 myserver ,然后点”–>”  ,再点 Apply 应用一下。
    这样我们所做的工作才会真正有效, Weblogic 也才会认识我们配置的 DataSource。

JBuilder 7 的相关配置

一、数据库驱动的加载

同 weblogic 一样,在进行此项配置之前,先将欲使用的 数据库JDBC 驱动 Jar 文件放到 D:\JBuilder7\lib\jdbc 目录下(建议这样做,没有jdbc目录就建一个呗)

1) 开启 JBuilder 7,单击 Tools \ EnterPrise Setup …….

2) 在弹出窗口中选择 Database Drivers 签
3) 再点 Add 按钮,弹出新窗口(可能你的与图上的略有不同)
4) 再单击 New … 按钮,弹出新窗口,并改变 Name: 的默认值为 mysql (只要有意义,起个什么名都成)
5) 单击 Add… 按钮来查找并添加数据库的 JDBC 驱动,当然了,我们到 D:\JBuilder7\lib\jdbc 下去找,选 mysql.jar ,注意,不要把mysql.jar 展开,象图那样选中再按 OK 就行了。
提示:可以配合 Shift 和 Ctrl 键同时选多个 .jar 文件。
6) 结果如下图,如果有多个需要添加的 .jar 文件,还可点 Add… 按钮继续添加。
7) OK 退出.
8) 再OK ,则 mysql JDBC 驱动就已经加入了。
9) 再一次的 Ok ,JBuilder 提示要重起后上述配置才会生效,确定并重启 JBuilder。
二、EJB 2.0 和 应用服务器的配置,以 WebLogic 6.X为例

在进行此项配置之前要安装 Borland Enterprise Servler 5.02 ,IAS 4.5 也成,它俩是一回事,当然了我是有新的不用旧的,安装过程略,因为安装它很 easy ! 基本是一路回车,我把我的安装在 D:\BorlandEnterpriseServer 下了。

1) 开启 JBuilder 7,单击 Tools \ EnterPrise Setup …….

2) 选择 CORBA 签,在 Configuration 下的下拉列表框,选择 VisiBroker

3) 选择 Edit… ,弹出 Edit Confiuration 窗口
  点击path for orb tools
4) 单击 Path for ORB tools: 旁边的 … 浏览按钮,弹出 Select Directory 窗口,选择 D:\BorlandEnterpriseServer5\bin 并 OK。

5) 再 两遍 OK ,JBuilder 又要求你重启,没办法,照它说的做,重启 JBuilder 。

6) 重启后,还要到 Tools \ EnterPrise Setup ……. ,选 CORBA 项,选 Edit ,在弹出窗口中选 Library for projects: 旁边的 … 按钮
7) 在弹出的新窗口的 User Home 中你会发现多了一个选项 Borland Enterprise Server 5.0.2+ Client
    即 选择图中所示 黑亮的选项,然后 三遍 OK 退出。
8) 再选择 Project \ Default Project Properties 项
9) 在弹了对话框中选 Server 签,如图,点击 … 按钮,
10) 在弹出的新对话框中,选择 WebLogic Application Server 6.x +,然后复选 Enable server ,见图中红框。
11) 复选 Enable server 后,其它各项可选或可填,点击 … 按钮,
    选择 Home directory ;
    选择 Working directory ;
    为你机器所装 Weblogic 的位置。
12) 点击 Class 签内的Add 按钮,如上图,将 D:\bea\wlserver6.1\lib\cr_wls60f.jar 文件添加进来。如上图红线。
    再用 Move Up 按钮,将  D:\bea\wlserver6.1\lib\cr_wls60f.jar 文件移至最项端,因为一般后加的 .jar 文件在最下边。
    这一步也比较重要,因为在JBuilder 环境下可以直接启动 Weblogic ,那它就要首先检测 license 是否合法,即 cr_wls60f.jar文件
    是否存在。

13) 再选择 Custom 签,按如下红线所示配置,可能您装的 Weblogic 目录位置与我的有不同,但大概意思是一样的。
    配置完后,点击 OK 按钮退出
   domain name :mydomain
   server name: myserver
   version:6.1 Service Pack1(d:/bea/wlserver6.1)
14) 再在如图窗口中的 Single server for all services in project 下拉列表框中选择 WebLogic Application Server 6.x+ 如图所示,然后 OK 退出。
15) 至此 JBuiler 7 下与 WebLogic 6.x 的配置完成,那我们就开工吧!

15.计算日期间隔
public int getDays(Date sd,Date ed){
  return (ed.getTime()-sd.getTime())/(3600*24*1000)
}

16.日期加减
SimpleDateFormat sdf=new SimpleDateFormat(“yyyyMMdd”);
String str=”20011230″;
Date dt=sdf.parse(str,new ParsePosition(0));
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(dt);
rightNow.add(Calendar.DATE,2);//你要加减的日期
Date dt1=rightNow.getTime();
String reStr=sdf.format(dt1,”",new FieldPosition(0));
System.out.println(reStr);

17.时间显示控制  
第一种方式:
<html>
<head><title>取得系统时间</title></head>
<body>
<%java.util.Date date=new java.util.Date();%>
现在是:<%=date%>
</body>
</html>
运行结果:
现在是:Tue Jul 31 10:32:52 CST 2001

第二种方式:
<%@ page import=”java.util.*, java.text.*” %>
<HTML>
<HEAD><TITLE>显示当前时间</TITLE></HEAD>
<BODY>
当前时间:
<%
Date now = new Date();
out.println(DateFormat.getTimeInstance().format(now));
%>
</BODY>
</HTML>
运行结果:
10:31:42 AM

第三种方式:
<%
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(“yyyy年MM月dd日”);
java.util.Date currentTime_1 = new java.util.Date();
out.print(formatter.format(currentTime_1));
%>
运行结果:
2001年07月31日

第四种方式:
<%
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat(“yyyy/MM/dd HH/mm/ss”);
java.util.Date currentTime_1 = new java.util.Date();
out.print(formatter.format(currentTime_1));
%>
运行结果:
2001/07/31 10/32/52
第三四两种方式其实是一样的他可以产生千变万化的格式。

 

18.加密&解密
在插入数据库前先将字符串str进行加密:
java.net.URLEncoder.encode(String str);
从数据库中取出时再解码:(可以先不加密,只解码,试一试;不行再加密)
java.net.URLDecoder.decode(String str);

19.页面刷新:
有三种方法:
1,在html中设置:
<title>xxxxx</title>之後加入下面这一行即可!
定时刷新:<META HTTP-EQUIV=”Refresh” content=”10; URL=http://自己的URL”>
10代表刷新间隔

2.jsp
<% response.setHeader(“refresh”,”1″); %>
  没一秒刷新一次

3.使用javascript:
<script language=”javascript”>
setTimeout(“self.location.reload();”,1000);
<script>
一秒一次

20.打印:
1.直接调用windows函数
<input type=”button” value=”print”
onclick=”window.focus();window.print()”>

2.调用js
//放在head 与 head 之间
<SCRIPT LANGUAGE=javascript>
<!–
function setPrint()
{
WB.ExecWB(8,1);
}
function previewPrint()
{
WB.ExecWB(7,1)
}
//–>
</SCRIPT>
 
//放在body与body之间
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0>
</OBJECT>
<INPUT type=”button” value=”打印设置” id=button1 name=button1 onclick=”setPrint();”>
<INPUT type=”button” value=”打印预览” id=button2 name=button2 onclick=”previewPrint();”>

21.将数据用execl在客户端展现:
<style type=”text/css”>
{
  .showTD {color: #003366; }
  .hiddenTD {display:none; }
  .onFocue  {color: #CC66FF;}
  .offFocue {color:#003366;}
}
#floater {
    LEFT: 445px; POSITION: absolute; TOP: 15px; VISIBILITY: visible; WIDTH: 125px; Z-INDEX: 10}
</STYLE>

<object classid=”clsid:0002E510-0000-0000-C000-000000000046″ id=”Spreadsheet1″ width=”676″ height=”388″>
  <param name=”HTMLURL” value>
  <param name=”HTMLData” value=”">
  <param name=”DataType” value=”HTMLDATA”>
  <param name=”AutoFit” value=”0″>
  <param name=”DisplayColHeaders” value=”-1″>
  <param name=”DisplayGridlines” value=”-1″>
  <param name=”DisplayHorizontalScrollBar” value=”-1″>
  <param name=”DisplayRowHeaders” value=”-1″>
  <para

一、 JDK (Java Development Kit)
JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握 JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。

1、 JDK的下载和安装
JDK又叫做J2SE (Java2 SDK Standard Edition),可以从Sun的Java网站上下载到,http://java.sun.com/j2se/downloads.html ;,JDK当前最新的版本是J2SDK1.4.2,建议下载该版本的JDK,下载页面在这里:http: //java.sun.com/j2se/1.4.2/download.html。

下载好的JDK是一个可执行安装程序,默认安装完毕后会在C:\Program Files\Java\目录下安装一套JRE(供浏览器来使用),在C:\j2sdk1.4.2下安装一套JDK(也包括一套JRE)。然后我们需要在环境变量PATH的最前面增加java的路径C:\j2sdk1.4.2\bin。这样JDK就安装好了。

2、 JDK的命令工具
JDK的最重要命令行工具:
java: 启动JVM执行class
javac: Java编译器
jar: Java打包工具
javadoc: Java文档生成器
这些命令行必须要非常非常熟悉,对于每个参数都要很精通才行。对于这些命令的学习,JDK Documentation上有详细的文档。

二、 JDK Documentation

Documentation 在JDK的下载页面也有下载连接,建议同时下载Documentation。Documentation是最最重要的编程手册,涵盖了整个Java所有方面的内容的描述。可以这样说,学习Java编程,大部分时间都是花在看这个Documentation上面的。我是随身携带的,写Java代码的时候,随时查看,须臾不离手。

三、 应用服务器(App Server)

App Server是运行Java企业组件的平台,构成了应用软件的主要运行环境。当前主流的App Server是BEA公司的Weblogic Server和IBM公司的Websphere以及免费的Jboss,选择其中一个进行学习就可以了,个人推荐Weblogic,因为它的体系结构更加干净,开发和部署更加方便,是Java企业软件开发人员首选的开发平台。下面简要介绍几种常用的App Server:

1、 Tomcat
Tomcat 严格意义上并不是一个真正的App Server,它只是一个可以支持运行Serlvet/JSP的Web容器,不过Tomcat也扩展了一些App Server的功能,如JNDI,数据库连接池,用户事务处理等等。Tomcat被非常广泛的应用在中小规模的Java Web应用中,因此本文做一点下载、安装和配置Tomcat的介绍:

Tomcat是Apache组织下Jakarta项目下的一个子项目,它的主网站是:http://jakarta.apache.org/tomcat/ ;,Tomcat最新版本是Tomcat4.1.27,软件下载的连接是:http: //www.apache.org/dist/jakarta/tomcat-4/binaries/ ;。

下载Tomcat既可以直接下载zip包,也可以下载exe安装包(个人建议zip更干净些),不管哪种情况,下载完毕安装好以后(zip直接解压缩就可以了)。需要设置两个环境变量:

JAVA_HOME=C:\j2sdk1.4.2
CATALINA_HOME=D:\tomcat4 (你的Tomcat安装目录)

这样就安装好了,启动Tomcat运行CATALINA_HOME\bin\startup.bat,关闭Tomcat运行shutdown.bat脚本。 Tomcat启动以后,默认使用8080端口,因此可以用浏览器访问http://localhost:8080来测试Tomcat是否正常启动。

Tomcat提供了两个Web界面的管理工具,URL分别是:
http://localhost:8080/admin/index.jsp ;
http://localhost:8080/manager/html ;
在启用这两个管理工具之前,先需要手工配置一下管理员用户和口令。用一个文本工具打开CATALINA_HOME\conf\tomcat-users.xml这个文件,加入如下几行:

<role rolename=”manager”/>
<role rolename=”admin”/>
<user username=”robbin” password=”12345678″ roles=”admin,manager,tomcat”/>

这样用户“robbin”就具备了超级管理员权限。重新启动Tomcat以后,你就可以使用该用户来登陆如上的两个管理工具,通过Web方式进行Tomcat的配置和管理了。

2、 BEA Weblogic
Weblogic 可以到BEA的网站上免费注册之后下载到最新的Weblogic8.1企业版,License可以免费使用1年时间,其实这已经完全足够了。 Weblogic的下载连接:http://commerce.bea.com/index.jsp,Weblogic的在线文档:http: //edocs.bea.com/ ;。

3、 IBM Webshpere
Websphere同样可以下载到免费的试用版本,到IBM的developerWorks网站可以看到Websphere试用产品的下载和相关的Websphere的资料, developerWorks中文网站的连接是:http://www-900.ibm.com/developerWorks/cn/wsdd/ ;,Websphere的下载连接:http: //www7b.software.ibm.com/wsdd/downloads/WASsupport.html ;。

4、 Jboss
Jboss 是免费开源的App Server,可以免费的从Jboss网站下载:http://www.jboss.org/index.html,然而Jboss的文档是不免费,需要花钱购买,所以为我们学习Jboss设置了一定的障碍。在Jdon上有几篇不错的Jboss配置文档,可以用来参考:http: //www.jdon.com/idea.html ;

四、 Java应用的运行环境

Java的应用可以简单分为以下几个方面:

1、 Java的桌面应用
桌面应用一般仅仅需要JRE的支持就足够了。

2、 Java Web应用
Java的Web应用至少需要安装JDK和一个web容器(例如Tomcat),以及一个多用户数据库,Web应用至少分为三层:
Browser层:浏览器显示用户页面
Web层:运行Servlet/JSP
DB层:后端数据库,向Java程序提供数据访问服务

3、 Java企业级应用
企业级应用比较复杂,可以扩展到n层,最简单情况会分为4层:
Browser层:浏览器显示用户页面
Client层:Java客户端图形程序(或者嵌入式设备的程序)直接和Web层或者EJB层交互
Web层:运行Servlet/JSP
EJB层:运行EJB,完成业务逻辑运算
DB层:后端数据库,向Java程序提供数据访问服务

4、 Java嵌入式应用
Java嵌入式应用是一个方兴未艾的领域,从事嵌入式开发,需要从Sun下载J2ME开发包,J2ME包含了嵌入式设备专用虚拟机KVM,和普通的JDK中包含的JVM有所不同。另外还需要到特定的嵌入式厂商那里下载模拟器。

Java Learning Path(二)、书籍篇

学习一门新的知识,不可能指望只看一本,或者两本书就能够完全掌握。需要有一个循序渐进的阅读过程。我推荐Oreilly出版的Java系列书籍。

在这里我只想补充一点看法,很多人学习Java是从《Thinking in Java》这本书入手的,但是我认为这本书是不适合初学者的。我认为正确的使用这本书的方法应该是作为辅助的读物。《Thinking in Java》并不是在完整的介绍Java的整个体系,而是一种跳跃式的写作方法,是一种类似tips的方法来对Java很多知识点进行了深入的分析和解释。

对于初学者来说,最好是找一本Java入门的书籍,但是比较完整的循序的介绍Java的语法,面向对象的特性,核心类库等等,在看这本书的同时,可以同步来看《Thinking in Java》,来加深对Java的理解和原理的运用,同时又可以完整的了解Java的整个体系。

对于Java的入门书籍,蔡学镛推荐的是Oreilly的《Exploring Java, 2nd Edition》 或者《Java in a Nutshell,2nd Edition(针对C++背景)》,我并没有看过这两本书。其实我觉得电子工业出版社的《Java 2编程详解》或者《Java 2从入门到精通》就很不错。

在所有的Java书籍当中,其实最最有用的,并不是O′reilly的 Java Serials,真正最最有用处是JDK的Documentation!几乎你想获得的所有的知识在Documentation里面全部都有,其中最主要的部分当然是Java基础类库的API文档,是按照package来组织的,对于每一个class都有详细的解释,它的继承关系,是否实现了某个接口,通常用在哪些场合,还可以查到它所有的public的属性和方法,每个属性的解释,意义,每个方法的用途,调用的参数,参数的意义,返回值的类型,以及方法可能抛出的异常等等。可以这样来说,所有关于Java编程方面的书籍其实都不过是在用比较通俗易懂的语言,和良好的组织方式来介绍 Documentation里面的某个package里面包含的一些类的用法而已。所以万变不离其宗,如果你有足够的能力来直接通过 Documentation来学习Java的类库,那么基本上就不需要看其他的书籍了。除此之外,Documentation也是编程必备的手册,我的桌面上有三个Documentation的快捷方式,分别是J2SDK1.4.1的Documentation,Servlet2.3的 Documentation和J2SDKEE1.3.1的Documentation。有了这个三个Documentation,什么其他的书籍都不需要了。

对于Java Web 编程来说,最核心的是要熟悉和掌握HTTP协议,这个就和Java无关了,在熟悉HTTP协议之后,就需要熟悉Java的实现HTTP协议的类库,也就是 Servlet API,所以最重要的东西就是Servlet API。当然对于初学者而言,直接通过Servlet API来学习Web编程有很大的难度,我推荐O′reilly的《Java Server Pages 》这本书来学习Web 编程。

EJB 的书籍当中,《Enterprise JavaBeans, 2nd Edition》是一本很不错的书, EJB的学习门槛是比较高,入门很难,但是这本书完全降低了学习的难度,特别重要的一点是,EJB的学习需要结合一种App Server的具体实现,所以在学习EJB的同时,必须同步的学习某种App Server,而这本书相关的出了三本书,分别是Weblogic6.1,Websphere4.0和JBoss3.0上面部署书中例子的实做。真是既有理论,又有实践。在学习EJB的同时,可以边看边做,EJB的学习会变得很轻松。

但是这本书也有一个问题,就是版本比较旧,主要讲 EJB1.1规范和部分EJB2.0的规范。而Ed Roman写的《Mastering EJB 2.0》这本书完全是根据EJB2.0规范写的,深入浅出,覆盖了EJB编程的各个方面,并且还有很多编程经验tips,也是学习EJB非常推荐的书籍之一。

如果是结合Weblogic来学习J2EE的话,《J2EE应用与BEA Weblogic Server》绝对是首选读物,虽然是讲述的Weblogic6.0,仍然值得购买,这本书是BEA官方推荐的教材,作者也是BEA公司的工程师。现在中文版已经随处可见了。这本书结合Weblogic介绍了J2EE各个方面的技术在Weblogic平台上的开发和部署,实践指导意义非常强。

在掌握了Java平台基础知识和J2EE方面的知识以后,更进一步的是学习如何运用OO的方法进行软件的设计,那么就一定要学习“设计模式”。Sun公司出版了一本《J2EE核心模式》,是每个开发Java企业平台软件的架构师必备的书籍。这本书全面的介绍了J2EE体系架构的各种设计模式,是设计师的必读书籍。

Java Learning Path(三)过程篇

每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法。因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基本上完全是自己摸索出来的。我也不知道这种方法是否是比较好的方法,只能给大家提供一点参考了。

学习Java的第一步是安装好JDK,写一个Hello World,? 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两个问题摸索清楚了,就扫除了学习Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。

第二步是学习Java的语法。Java的语法是类C++的,基本上主流的编程语言不是类C,就是类C++的,没有什么新东西,所以语法的学习,大概就是半天的时间足够了。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,这可能需要有人来指点一下,我当初是完全自己琢磨出来的,花了很久的时间。不过后来我看到《Thinking in Java》这本书上面是讲了这些概念的。

第三步是学习Java的面向对象的编程语言的特性的地方。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,因为学习Java之前没有 C++的经验,只有C的经验,我是大概花了一个月左右吧,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了不下5遍,才彻底领悟了。不过我想如果有C++经验的话,应该一两天时间足够了。那么在这个过程中,可以多看看《Thinking in Java》这本书,对面向对象的讲解非常透彻。可惜的是我学习的时候,并没有看到这本书,所以自己花了大量的时间,通过自己的尝试和揣摩来学会的。

第四步就是开始熟悉Java的类库。Java的基础类库其实就是JDK安装目录下面jre\lib\rt.jar这个包。学习基础类库就是学习rt.jar。基础类库里面的类非常非常多。据说有3000多个,我没有统计过。但是真正对于我们来说最核心的只有4个,分别是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;

这四个包的学习,每个包的学习都可以写成一本厚厚的教材,而O′reilly也确实是这样做的。我觉得如果时间比较紧,是不可能通过读四本书来学习。我觉得比较好的学习方法是这样的:
首先要通读整个package的框架,了解整个package的class,interface,exception的构成,最好是能够找到介绍整个包框架的文章。这些专门介绍包的书籍的前几章应该就是这些总体的框架内容介绍。

对包整体框架的把握并不是要熟悉每个类的用法,记住它有哪些属性,方法。想记也记不住的。而是要知道包有哪些方面的类构成的,这些类的用途是什么,最核心的几个类分别是完成什么功能的。我在给人培训的时候一般是一次课讲一个包,所以不可能详细的介绍每个类的用法,但是我反复强调,我给你们讲这些包的不是要告诉你们类的方法是怎么调用的,也不要求你们记住类的方法调用,而是要你们了解,Java给我们提供了哪些类,每个类是用在什么场合,当我遇到问题的时候,我知道哪个类,或者哪几个类的组合可以解决我的问题,That′all!,当我们具体写程序的时候,只要你知道该用哪个类来完成你的工作就足够了。编码的时候,具体的方法调用,是边写代码,边查Documentation,所有的东西都在Documentation里面,不要求你一定记住,实际你也记不住 3000多个类的总共将近10万个方法调用。所以对每个包的总体框架的把握就变得极为重要。

第五步,通过上面的学习,如果学的比较扎实的话,就打好了Java的基础了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其他一些比较有用处的类。相信进展到这一步,Java的自学能力已经被培养出来了,可以到了直接学习Documentation的水平了。除了要做GUI编程之外,JDK里面其他会有用处的包是这些:
java.text.*;
java.net.*;
javax.naming.*;
这些包里面真正用的比较多的类其实很少,只有几个,所以不需要花很多时间。

第六步,Java Web 编程
Web 编程的核心是HTTP协议,HTTP协议和Java无关,如果不熟悉HTTP协议的话,虽然也可以学好Servlet/JSP编程,但是达不到举一反三,一通百通的境界。所以HTTP协议的学习是必备的。如果熟悉了HTTP协议的话,又有了Java编程的良好的基础,学习Servlet/JSP简直易如反掌,我学习Servlet/JSP就用了不到一周的时间,然后就开始用JSP来做项目了。

在Servlet/JSP的学习中,重头仍然是Servlet Documentation。Servlet API最常用的类很少,花比较少的时间就可以掌握了。把这些类都看一遍,多写几个例子试试。Servlet/JSP编程本质就是在反复调用这些类来通过 HTTP协议在Web Server和Brower之间交谈。另外对JSP,还需要熟悉几个常用JSP的标记,具体的写法记不住的话,临时查就是了。

此外Java Web编程学习的重点要放在Web Application的设计模式上,如何进行业务逻辑的分析,并且进行合理的设计,按照MVC设计模式的要求,运用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet和JSP之间进行流程的控制和数据的共享,以及Web Application应该如何配置和部署。

第七步,J2EE编程
以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提高。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难度比较大。

首先一定要学习好JNDI,JNDI是App Server定位服务器资源(EJB组件,Datasouce,JMS)查找方法,如果对JNDI不熟悉的话,EJB,JMS这些东西几乎学不下去。 JNDI其实就是javax.naming.*这个包,运用起来很简单。难点在于服务器资源文件的配置。对于服务器资源文件的配置,就需要看看专门的文档规范了,比如web.xml的写法,ejb-jar.xml的写法等等。针对每种不同的App Server,还有自己的服务资源配置文件,也是需要熟悉的。

然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及该在什么场合使用JTA。这里可以简单的举个例子,我们知道一般情况可以对于一个数据库连接进行事务控制(conn.setAutoCommit (false),….,conn.commit()),做为一个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子操作,你能做的到吗?这时候只能用JTA了。假设操作过程是先往A数据库插一条记录,然后删除B数据库另一个记录,我们自己写代码是控制不了把整个操作做为一个原子操作的。用JTA的话,由App Server来完成控制。

在学习EJB之前要学习对象序列化和RMI,RMI是EJB的基础。接着学习JMS和EJB,对于EJB来说,最关键是要理解EJB是如何通过RMI来实现对远端对象的调用的,以及在什么情况下要用到EJB。

在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习两个领域的知识,一个是UML,另一个是Design Pattern。Java企业软件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开发成功的必要条件。在这个时候,应该开始把学习的重点放在设计模式和框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE的核心模式。

J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有很多很多的企业技术,这里不一一进行介绍了。

另外还有一个最新领域Web Services。Web Services也完全没有任何新东西,它像是一种黏合剂,可以把不同的服务统一起来提供一个统一的调用接口,作为使用者来说,我只要获得服务提供者给我的WSDL(对服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是EJB组件,还是.Net组件,还是什么CORBA组件,还是其他的什么实现,我也不需要知道。Web Services最伟大的地方就在于通过统一的服务提供方式和调用方式,实现了整个Internet服务的共享,是一个非常令人激动的技术领域。Web Services好像目前还没有什么很好的书籍,但是可以通过在网络上面查资料的方式来学习。

Java Learning Path(四) 方法篇

Java 作为一门编程语言,最好的学习方法就是写代码。当你学习一个类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,然后再多调用几个类的方法,看看运行结果,这样非常直观的把类给学会了,而且记忆非常深刻。然后不应该满足把代码调通,你应该想想看如果我不这样写,换个方式,再试试行不行。记得哪个高人说过学习编程就是个破坏的过程,把书上的例子,自己学习Documentation编写的例子在运行通过以后,不断的尝试着用不同的方法实现,不断的尝试破坏代码的结构,看看它会有什么结果。通过这样的方式,你会很彻底的很精通的掌握Java。

举个例子,我们都编过Hello World

public class HelloWorld {
public static void main(String[] args) {
System.out.println(“Hello World”);
}
}

很多初学者不是很理解为什么main方法一定要这样来定义public static void main(String[] args),能不能不这样写?包括我刚学习Java的时候也有这样的疑问。想知道答案吗?很简单,你把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个 String[]数组的,把String[]改掉,改成int[],或者String试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,看看运行结果如何。

我当初学习Java的时候就是这样做的,把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这样定义的了。

此外,我对于staic,public,private,Exception,try{ }catch {}finally{}等等等等一开始都不是很懂,都是把参考书上面的例子运行成功,然后就开始破坏它,不断的根据自己心里面的疑问来重新改写程序,看看能不能运行,运行出来是个什么样子,是否可以得到预期的结果。这样虽然比较费时间,不过一个例子程序这样反复破坏几次之后。我就对这个相关的知识彻底学通了。有时候甚至故意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编程的掌握是及其深刻的。

其中特别值得一提的是JDK有一个非常棒的调试功能,-verbose
java ?Cverbose
javac ?Cverbose 以及其它很多JDK工具都有这个选项
-verbose 可以显示在命令执行的过程中,JVM都依次加载哪里Class,通过这些宝贵的调试信息,可以帮助我们分析出JVM在执行的过程中都干了些什么。

另外,自己在学习过程中,写的很多的这种破坏例程,应该有意识的分门别类的保存下来,在工作中积累的典型例程也应该定期整理,日积月累,自己就有了一个代码库了。遇到类似的问题,到代码库里面 Copy & Paste ,Search & Replace,就好了,极大提高了开发速度。最理想的情况是把一些通用的例程自己再抽象一层,形成一个通用的类库,封装好。那么可复用性就更强了。

所以我觉得其实不是特别需要例程的,自己写的破坏例程就是最好的例子,如果你实在对自己写的代码不放心的话,我强烈推荐你看看JDK基础类库的Java源代码。在JDK安装目录下面会有一个src.zip,解开来就可以完整的看到整个JDK基础类库,也就是rt.jar的Java源代码,你可以参考一下 Sun是怎么写Java程序的,规范是什么样子的。我自己在学习Java的类库的时候,当有些地方理解的不是很清楚的时候,或者想更加清晰的理解运作的细节的时候,往往会打开相应的类的源代码,通过看源代码,所有的问题都会一扫而空。

Java Learning Path(五)资源篇

1、 http://java.sun.com/ ;(英文)
Sun的Java网站,是一个应该经常去看的地方。不用多说。

2、 http://www-900.ibm.com/developerWorks/cn/ ;
IBM的developerWorks网站,英语好的直接去英文主站点看。这里不但是一个极好的面向对象的分析设计网站,也是Web Services,Java,Linux极好的网站。强烈推荐!!!

3、 http://www.java-cn.com/ ;(中文)
JAVA 中文站,目前国内资料最全、会员最多的JAVA技术网站,人气极高。有《JAVA电子书库》、《JAVA视频库》(国内唯一)、《JAVA技术文摘库》、《JAVA源代码库》、《JAVA工具库》、《招聘求职广场》等主要栏目,还有一些专家栏目。目前会员有5万多,VIP会员近1000人。无论是菜鸟还是老鸟,都能在此网站中找到自己所需要的东东!! 最强烈推荐!!!!!!

4、 http://www.javaworld.com/ ;(英文)
关于Java很多新技术的讨论和新闻。想多了解Java的方方面面的应用,这里比较好。

5、 http://dev2dev.bea.com.cn/index.jsp ;
BEA的开发者园地,BEA作为最重要的App Server厂商,有很多独到的技术,在Weblogic上做开发的朋友不容错过。

6、 http://www.huihoo.com/ ;
灰狐动力网站,一个专业的中间件网站,虽然不是专业的Java网站,但是在J2EE企业应用技术方面有深厚的造诣。

7、 http://www.theserverside.com/home/ ;(英文)
TheServerSide是一个著名的专门面向Java Server端应用的网站。

8、 http://www.javaresearch.org/ ;
Java研究组织,有很多优秀的Java方面的文章和教程,特别是在JDO方面的文章比较丰富。

9、 http://www.cnjsp.org/ ;
JSP技术网站,有相当多的Java方面的文章和资源。

10、 http://www.jdon.com/ ;
Jdon论坛,是一个个人性质的中文J2EE专业技术论坛,在众多的Java的中文论坛中,Jdon一个是技术含量非常高,帖子质量非常好的论坛。

11、 http://sourceforge.net/ ;
SourgeForge是一个开放源代码软件的大本营,其中也有非常非常丰富的Java的开放源代码的著名的软件。

2005年02月11日

WEG16强小组赛最后一轮比赛将于2月12日14:00重新开赛,D组必将产生一位被淘汰的选手与晋级选手,因为4位选手的成
绩都是1胜1负,所以PlayDay5将是D组FreeDom与Heman的生死之战.而A组,B组及C组,则因为各有连败和连胜选手,使得形势异常微
妙.虽然Zad,Moon,Fov都取得了两连胜,但是这两连胜却无法确保他们出线,因为很有可能出现3负选手,使得小组前三陷入循环圈进行加赛.要想在
三人的加赛中出线无疑是十分困难和痛苦的,所以他们必然将全力去争取胜利,从而直接晋级8强。

A组:SK.Zacard vs [64AMD].Deadman 地图:Maelstrom

 


VS

 

期待指数:9
精彩指数:
10

 
 两连胜的韩国兽王将迎战1胜1负的俄罗斯天才少年apm70。前两场zad首发bm两次击败中国选手,而apm依然依靠DH首发+ac的传统战术,没有变通的战术,使得apm70在第二场输了了sky。
Maelstrom这张地图中间有生命泉水,有利于兽组的补充。而APM70也可以考虑首发中立英雄的打法。总体来说,ZAD无论在操作上还是战术上都要高上apm70一点。相信比赛会精彩的
胜率预测:

ZAD:70% Deadman:30%

B组:SK.Madfrog vs Magicyang 地图:NightHaven

VS

期待指数:10
精彩指数:10


 
 My首轮以魔术般的表演获得了胜利,而在第二轮中韩魔术师的较量中憾负韩国魔术师Moon,为我们带来了两场精彩的演出,最后一轮,他将面对的是疯狂青
蛙,青蛙作为近两年状态稳定的war3选手,却在本次WEG上两战皆负,不管是否能出线,他都将全力为自己的荣誉与希望一战,至少要避免小组垫底的尴尬场
面出现。从目前NevsUD的情况来说,不禁为My本轮捏了把冷汗,在NH这张地图上,无法首发中立英雄,没有了FL的帮助,Ne无疑在初期有很大的劣
势,而地图上早期分散弱小的野怪,和后期集中的高等级野怪,则有利于UD的Mf,我们只能期待My再次的魔术表演,不过无论失败与否,My为我们带来的比
赛永远那么精彩,大家应该尽情的去享受比赛的过程,而不是仅仅在意比赛的结果。JUST FOR FUN
      即使MY负于Madfrog,如果Moon能击败Tod的话,那么My仍然有加赛出线的机会,B组出现加赛的可能性是最高的,让我们期待更多精彩比赛的上演吧。

胜率预测:

Madfrog:65% Yang:35%


C组:YolinY.Suho vs 4K.Fov 地图:Turtle Rock

VS

期待指数:10

精彩指数:10
  

在上次北京WEG中韩对抗赛上,中国CEG冠军suho负于了Fov,直接导致了中国队负于韩国队。这次WEG,双方
再次相遇,情况对于suho来说异常严峻,第二轮负于shortround把自己逼上了绝路,对战Fov必须取得胜利,才能保证自己不被淘汰。而Fov无
疑将尽力击败suho,从而避免陷入对战双Ne加赛的苦海,Suho本轮将面临苦
战,地图是我们最熟悉的TR,狭小的地形无疑对Ne十分有利,小心近点Fov的双兵营rush吧,在中期去解决Fov..

胜率预测:

suho:55% Fov:45%


D组:SK.Heman vs Freedom.Wera地图:Twisted Meadows

VS

期待指数:10

精彩指数:10

  生死之
战!如果说前面失利的选手都还有机会的话,那么D组同为1胜1负的四位选手,在最后一轮将展开的就是生死之战,胜者出线,负者淘汰。Heman在第一场劣
势的情况下击败了XiaoT,在第二场优势的情况下负于了Sweet,让人们十分意外,也说明了Heman的确存在一些问题,而FreeDom在第一场的
苦战中利用经济优势获得胜利,在第二场负于XiaoT的新奇战术。还是Freedom更占上风一些

胜率预测:

Heman:40% Freedom:60%




2005年02月10日

新的一年到来了,这一年对我来说是关键的一年。大三下了,这个学期要认真准备工作或是考研或是出国深造。这个学期要做的事情还是挺多的。首先,还留在成才创业会的岗位上,是准备给大一的学弟学妹们交班的时候了。当然,这之前,挑战杯还是需要好好准备的;其次,这学期井铎铎、王军他们邀请我去管理院的网站,当然有盛情难却的原因。重要的是,在那里可以学到很多很多东西。最后,这学期开学的时候要举办学校第一届的魔兽挑战赛。作为组织人,我也希望我可以做好。

说完了社会工作,说说我自己。我是基本确定了毕业以后工作的方向。但是如果在大四上可以找到比较好的工作的话,我会用一点时间看一下数学,准备一下考研。目标是北航。当然了,这只是使自己多一种选择的方向。也可以巩固一下自己的数学和外语。这学期的话,要认真的学习了。这次是我最后一次拿学习奖学金的机会了,希望自己要好好地把握。以前,还是花费了太多太多的时间在玩上面。大家都说,失去了才知道后悔。的确,失去了时候,即使后悔也再也回不来了。

在计算机方面,我的数学的确是没有什么天分。我对自己成为一个优秀的程序员不看好。但是是还是可以成为一个Code Editor的,我现在比较擅长的方面还是网页编程方面,主要是asp和php。但是还是没有精通。这个寒假的时候,我一直在学JAVA。原来是准备做毕业设计的操作语言的。但是一看还是挺不错的。对写代码的人来说的确是一种方便的语言。现在基本会往这个方向走下去。近期的目标就是毕业设计-一个搜索引擎。大体是用PHP写Spider程序(现在还没有看JSP,也可能会用JSP写),然后用JAVA做数据库的分析。至于以后的工作,希望的方向是网页设计,教师,编辑等

在个人情感方面,和小虫的关系还是不明朗。也许就一直这样下去了。也许也就这样慢慢地一起老去?总之,小虫自己的幸福不在于我,在于她自己,总是因为某些原因(或者就是性格吧),自己勉强自己,自己放弃自己的幸福,的确是不值得的啊!小虫,祝你幸福!

2005年02月07日

变身记 菜鸟Java入门手册

群雄逐鹿 十四种Java开发工具点评

JBuilder 9.0时尚编程剖析



JBuilder 2005代码审查功能体验

Java设计模式专辑

JSP程序设计初级入门教程

Java数据库接口JDBC入门基础讲座

Java网络编程

Enterprise JavaBean开发专辑

全面解析JavaMail

JAAS:灵活的Java安全机制

Java游戏编程初步

Java手机游戏开发专辑

J2ME应用程序开发指南