开始学用Selenium

今天终于知道了Selenium到底是怎么一个原理。以前只是看过一些Java代码的片断,觉得用Java测试Web的主意很好,可惜没有深究。今天用一个多小时的时间看了看,基本上明白了。也理清了Selenium Core, Selenium RC和Selenium IDE的关系。
要看入门文章的话,这里有三篇:透明的江南白衣的,还有developworks的。再加上主页上的usage,就差不多了。核心部分的Selenium Core,其实是一些javascript代码和类库,底层用了JSUnit,这个以后再研究。TestSuite通过一个表格把一堆TestCase组合起来。TestCase同样通过表格把一些指令组合起来。这就写好了测试用例。而我看到的那些java代码的片断,实际上是Selenium Remote Control。通过启动一个Firefox作为Test Server,然后再发送指令过去。而Selenium IDE的作用主要是录制一些Web操作动作,有点WinRunner的意思。具体的操作可以查阅Reference。
另外,在持续集成方面,除了通过使用Selenium RC,还可以自动启动程序,最后的结果被Post到一个预先设定的URL。
P.S. CSDN blog是怎么做到弹出像IE那样对话框却不会像以前那样所有的FF窗口缩小的?还是FF自己改进了?

Velocity的扩展

之前一直找不到velocity的扩展接口,导致工作一直做不下去。今天看了一个下午+一个晚上的文档,终于找到了突破口(看来我是挺笨的)。就在VelocityTools这一块。
在IBM实习时养成的很好的习惯--看源码--真是受用终身啊。通过不断的对比VelocityTools的文档,javadoc和源码,发现原来在那个toolbox.xml里大有文章。
首先,要指定toolbox.xml的位置,在web.xml里

<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
<load-on-startup>10</load-on-startup>
<init-param>
<param-name>org.apache.velocity.toolbox</param-name>
<param-value>/WEB-INF/toolbox.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>

这是toolbox.xml的一部份:

<toolbox>

<tool>
<key>math</key>
<scope>application</scope>
<class>org.apache.velocity.tools.generic.MathTool</class>
<request-path>/catalog/*</request-path>
</tool>

</toolbox>

<key>里就是在VTL里写的$math,这样就算引入一个对象了。
<scope>是生命周期,有关init()方法的调用。
其它两个的作用从字面上和表达就可以猜出来了。
对于扩展的类,与web容器相关的主要是一个public void init(java.lang.Object object)的方法,传入的参数是org.apache.velocity.tools.view.context.ViewContext接口,但需要手动转换。从这个接口,可以得到request, session, response, servletContext等对象,同时根据scope的不同在调用次数上也会有不同。application的只初始化一次,request每次请求都会重新初始化,session就是在session建立时初始化。
看过这些以后,对那些VelocityStruts工具的原理就一目了然咯~~

Java Servlet文件上传解决方案(主要针对中文)

以前做动力中心那个网站的时候,由于用户要求要上传图片以及一些文件,所以要一个上传Servlet的组件。最后选中了SmartUpload,至少在Baidu上搜,到处都是。
没想到这才是噩梦的开始。主要问题是在中文文件名上。后来找了很多资料,用了一个迫不得已的最后方法:重新编译SmartUpload,加上中文的解决方法。后来也不知道怎么也就OK了。
前几个月动力中心的硬盘挂了,数据全丢了。不巧,我这里也没有备份,工作室的备份也丢了。没有办法,只好从一个旧的版本改起。其实中文开发的问题还是很多的,即使在Windows下好好的,到Linux下也会出各种各样的问题(比如Locale是en_US.UTF8)等等。
再也恢复不起来原来的办法了。后来也是在网上找到的资料,说是可以用Commons里的FileUpload. Jakarta Commons名气挺大的,我一起想学学,却一直忘,也不知道该怎么用(以前只听过BeanUtils, 用来注入一个bean的)。
马上从Apache下了一个来试试。注意,要用起来FileUpload,还要下一个Commons IO。里面对国际化的支持还是不错的,至少我用item.getName()出来的居然就有中文。
但保存文件还是遇到了问题。为了对国际化的良好支持,要达到以下几点:在页面显示的文件名要是中文的,下载的时候保存的文件名也要是中文的,同时文件要保存在一个目录下。
在做链接生成的时候,我发现浏览器会把链接中的中文自动encode成UTF-8的URL表示(就是%20%30那种)。没错,文件保存也可以用这个名字,这样在不支持中文路径的linux上也可以保存中文文件名了。然后我自己写了一个下载的Servlet,用于从本地读取文件内容,并写入response.getWriter()里。这样的话文件名自动就成中文了。至于重名问题,我的链接是这么写的: http://www.test.com/download/1892649237492/%8D%82.txt 结果文件名会自动转成中文的(IE6, FF1.5通过)。但是实际的文件名是1892649237492%8D%82.txt,就是没有了”/”,这一点,在Download Servlet里解析。同时DownloadServlet里加了一些逻辑,保护系统的安全。

如何配置tomcat的ROOT为/

修改%TOMCAT_ROOT%/conf/Catalina/localhost下的Web应用配置文件。
1.删除或移走ROOT.xml,这个文件就 是tomcat的root配置;
2.修改server.xml, <Host>里加上
<Context docBase=”test” path=”” workDir=”work\Catalina\localhost\test” reloadable=”true”/>
docBase:为你的Web应用程序所在的路径,可以为相对和绝对路径, 相对路径 为相对于在<Host>里配置的属性appBase的路径;
path:为Web应用的上下文路径,保持为空则会绑定到root路径上;(其实就是如果没有被其他<Context>定义了,就到这个目录去。
workDir: 为Web应用的临时工作目录,存放编译后的类和页面。
Tomcat的doc:
If you specify a context path of an empty string (“”), you are defining the default web application for this Host, which will process all requests not assigned to other Contexts. The value of this field must not be set except when statically defining a Context in server.xml, as it will be infered from the filenames used for either the .xml context file or the docBase.
还有一个debug属性,经常看到人写,但在tomcat的文档里没有看到,不知道是为什么。
文档地址 http://tomcat.apache.org/tomcat-5.5-doc/config/context.html
<![CDATA[修改%TOMCAT_ROOT%/conf/Catalina/localhost下的Web应用配置文件。
1.删除或移走ROOT.xml,这个文件就 是tomcat的root配置;
2.修改server.xml, 里加上

docBase:为你的Web应用程序所在的路径,可以为相对和绝对路径, 相对路径 为相对于在里配置的属性appBase的路径;
path:为Web应用的上下文路径,保持为空则会绑定到root路径上;(其实就是如果没有被其他定义了,就到这个目录去。
workDir: 为Web应用的临时工作目录,存放编译后的类和页面。
Tomcat的doc:
If you specify a context path of an empty string (“”), you are defining the default web application for this Host, which will process all requests not assigned to other Contexts. The value of this field must not be set except when statically defining a Context in server.xml, as it will be infered from the filenames used for either the .xml context file or the docBase.
还有一个debug属性,经常看到人写,但在tomcat的文档里没有看到,不知道是为什么。
文档地址 http://tomcat.apache.org/tomcat-5.5-doc/config/context.html%5D%5D&gt;

“Working with Java Virtual Machine” 读书笔记(一)

在books24x7.com上在线看的这本书(不过不是免费的,IBM为员工买了这个网站的阅读权利),觉得有些东西有必要记下来。不知道有“一”还会不会有“二”,呵呵。
Chapter 2 Overview of JVM architecture, Section 2 Runtime Data Areas in JVM
JVM data area:
1. Method area
2. Heap
3. PC Register
4. Java Stack
5. Native Method Stack
Method area: Shared among all JVM thread
1. name
2. super class
3. class/interface
4. modifier
5. list of super interfaces
6. Other:
a. Constant pool
b. field info
c. method info
d. class var
e. ref to Classloader
f. ref to Class
Heap:
1. Handle pool: pointer to object(in object pool) & class(in method area)
2. Object pool (instances)
Such design is for the avoiding fragmentation
Stach: 2 types
1. Frame for func activation
2. Operand for instructions, arg & ret of JVM instruction
Java Stack Component
1. local var
2. execution env
3. operand stack
JDK — JRE — JVM — bytecode Interpreter, GC, Class manager, …
\            \
classlib — byte code
\
native

做DITAOT的碰到xalan的一些问题

1. SUN JDK自带了一个xalan,不过版本比较老,要把它给替换掉。但办法不是把xalan.jar放到CLASSPATH里。要放在jre里的endorsed目录下。
这个FAQ下有解答:(http://xml.apache.org/xalan-j/faq.html#faq-N100D6)
2. xalan里用document()函数load外面的XML文档的时候,在一个stylesheet里,不能读两次一个文件,不然会抛出下面的错误: Programmer’s Error; “putDocumentInCache found reparse of doc: “ 这是一个比较SB的BUG,如果xalan查到这个文件在cache里了,他就不干了,说你应该用一个variable把文件里的内容存起来,不要给我读两次。这是我见过最SB的理由。让你读文件你就给我读,JJWW干什么,在cache里有是吧?给我从cache里读出来就可以了啊!
不过这个问题好像是出现在输入文件的路径有空格的情况下,要再查一查。
3. 好像没有了。。想不起来了。。不然就是没有碰到过,因为我平常是用的SAXON。嗯,在这里推荐一下SAXON,很不错的一个xslt processor。
<![CDATA[1. SUN JDK自带了一个xalan,不过版本比较老,要把它给替换掉。但办法不是把xalan.jar放到CLASSPATH里。要放在jre里的endorsed目录下。
这个FAQ下有解答:(http://xml.apache.org/xalan-j/faq.html#faq-N100D6)
2. xalan里用document()函数load外面的XML文档的时候,在一个stylesheet里,不能读两次一个文件,不然会抛出下面的错误: Programmer's Error; “putDocumentInCache found reparse of doc: “ 这是一个比较SB的BUG,如果xalan查到这个文件在cache里了,他就不干了,说你应该用一个variable把文件里的内容存起来,不要给我读两次。这是我见过最SB的理由。让你读文件你就给我读,JJWW干什么,在cache里有是吧?给我从cache里读出来就可以了啊!
不过这个问题好像是出现在输入文件的路径有空格的情况下,要再查一查。
3. 好像没有了。。想不起来了。。不然就是没有碰到过,因为我平常是用的SAXON。嗯,在这里推荐一下SAXON,很不错的一个xslt processor。]]>

ClassLoader与Ant的一些问题

今天被这个Classloader搞死了。起因是这样的:
public  static void  staticMethod(){
String resource = ClassLoader.getSystemResource(“a.xml”).toString();
}
然后a.xml已经加入了CLASSPATH。
整个代码是写在一个Ant的Task里,然后Ant里调用(事先<taskdef>)
这个时候在Eclipse调用build.xml,没有问题。
但是在命令行下调用ant,出错,找不到,返回null。
于是到Task里的execute里测试一下
public void execute(){
String resource = getClass().getClassLoader().getResource(“a.xml”).toString();
}
两个环境都找到了。
看来是static的函数里ClassLoader比较不一样,是systemClassLoader估计。
然后这么写:
public  static void  staticMethod(){
String resource = new Object().getClass().getClassLoader().getResource(“a.xml”).toString();
}
居然报出一个NullPointerException,原来是返回的ClassLoader为空。马上查了一下ClassLoader的源码(IBM JDK),发现如果某个instance的classloader=systemClassLoader就返回空。什么道理啊。。。
这么写,也不行
public static void staticMethod(){
String resource = ClassLoader.getSystemClassLoader().getResource(“a.xml”).toString();
}
这么写,还是不行
public static void staticMethod(){
String resource = ClassLoader.getSystemClassLoader().getParent().getResource(“a.xml”).toString();
}
嗯,把那个类换成Singleton,发现居然可以了。
后来发现要这么写:
public class Test{
public static void staticMethod(){
String resource = new Test().getClass().getClassLoader().getResource(“a.xml”).toString();
}
}
才OK。。。
Eclipse自已有ClassLoader,Ant自己又有ClassLoader。才有这么多问题。
接下来我想搞的OSGi,每个Bundle都有自己的classloader实例。。。。晕死了。。。

走向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 Doc
umentation后,不懂的就查Java(TM) 2 SDK Documentation,特别好用,也不需要什么手
册之类的,建议大家都要有一份。
搭起Java开发环境后,记得还是用UltraEdit编辑并编译的(在其中可以配好Java的编译
环境)。慢慢的改用JCreator了。不错,至少很多方面有改进。最开始卖了一套<Java
2核心技术> 2本书,还不错。对于入门来说足够了。慢慢的知道<Thinking in Java>是
一本好书,后来才知道,有了Java经验后,看这本书特别过瘾,所以现在还经常翻翻。
周而复始的看,效果特别好。慢慢的知道了Oreilly公司(http://www.oreilly.com)出
的图书不错,很高雅,国内翻译的也还可以(http://www.oreilly.com.cn)。本人收集
了很多Oreilly的原版图书,有需要的可以和我联系(Acrobat pdf格式)。慢慢知道了
jjhou这个人.(http://jjhou.csdn.net )以及他的个人网站,最让我感兴趣的是jjhou老
师写的散文,书评,很有收获,不是为技术而技术。很有趣味性。其中, http://www.e
pubcn.com 上有很多美丽的图书。
不知道什么时候,要开始干项目了,以前从书上看到的东西,慢慢的在项目中有了很好
的机会去温习,慢慢的有了感觉,开始主要是用Swing,开发桌面系统,放置一个按钮怎
么也放不好,后来才知道有一个布局管理器。咳,这个婆婆的Java也讨厌的很。开始涉
及到数据库访问,JDBC。后来我才知道,Sun的Java网站有一个Java Tutorial。(http:
//java.sun.com/docs/books/tutorial/ )。同时,也知道了蔡先生的sleepless in j
ava(http://www.oreilly.com.tw/sleepless/index.htm ),太美了,美的很。满满的,
OReilly, http://www.onjava.com/ 也是不错的地方。都有很多优秀的文章。http://w
ww-900.ibm.com/developerWorks/cn/index.shtml,也很棒。
每次,美美的享用一顿大餐后,也来也觉得自己是不是应该换一种学习方式,因为这样
学习效果不太好。比较乱。让我想起了Java Specification,对,我开始研究Java规范
了。最开始下载的规范是JDBC Specification,很多概念一目了然,尤其是DATABASE的
事务性控制,自己对于她的理解慢慢的有了较为深入的了解。对于开发C/S结构,比如,
Swing+JDBC,开发数据库应用系统,让我学会开发两层结构的应用系统。很神气。
也不知道什么时候要开始开发一个网站,基于Linux+JSP+JavaBean+Oracle的系统。很是
有意思。为什么这么说呢?因为不同于Swing+JDBC的开发模式,系统之间多了一层(Jav
aBean,姑且就这么叫吧!嘻嘻);同时,很多开发技术和面向左面系统不一样,比如分页
技术。
完成项目后,自己对于Java的很多方面都比较了解了。开始思考一个问题,J2EE是什么
东西?。我们学习Java大概有3个方向,第一,桌面系统,包括C/S结构;第二,J2ME,面
向无限领域,很有潜力的家伙,看看中国的手机用户就知道了。第三,面向企业应用、
计算的平台,J2EE。
在痛苦的抉择后,我选择J2EE..分享J2EE给我带来的快乐。学到现在,最大的感觉,就
是: 简单就是美,美就是Java.不会有学MFC的痛苦,也不会有去分析STL的艰辛,网路应
用上一点也不逊色于C++。开始进入我的J2EE之旅。
还是下载了一份J2EE规范,一份J2EE SDK。开始研究J2EE,结合http://java.sun.com/j
2ee/tutorial/index.html 提供的J2EE Tutorial开始研究了。大概过了1个月,开始有
感觉了,也就在这个时候,需要我去完成一个J2EE构架方面的项目。差不多边学编写完
成了,很多概念在写完后都不是很清晰,因为东西太多了,主要是基于JSP(Servlet)+S
ession Bean+EIS构架开发系统。当然也学到很多东西,至少对SB EJB的编写不成问题。
懂得了JSP如何调用EJB……。
完成项目后,我开始研究Java Pet Store了,很是过瘾。开始知道了Servlet过滤器,X
ML方面较为全面的知识,知道了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?ad
e、DTO等。J2EE系统构架中常用的模式。UML-> EJB,EJB->UML相互映射。现在也一样在
研究。
善于享受孤独,幸好还有J2EE!
<![CDATA[初次涉及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 Doc
umentation后,不懂的就查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.e
pubcn.com 上有很多美丽的图书。
不知道什么时候,要开始干项目了,以前从书上看到的东西,慢慢的在项目中有了很好
的机会去温习,慢慢的有了感觉,开始主要是用Swing,开发桌面系统,放置一个按钮怎
么也放不好,后来才知道有一个布局管理器。咳,这个婆婆的Java也讨厌的很。开始涉
及到数据库访问,JDBC。后来我才知道,Sun的Java网站有一个Java Tutorial。(http:
//java.sun.com/docs/books/tutorial/ )。同时,也知道了蔡先生的sleepless in j
ava(http://www.oreilly.com.tw/sleepless/index.htm ),太美了,美的很。满满的,
OReilly, http://www.onjava.com/ 也是不错的地方。都有很多优秀的文章。http://w
ww-900.ibm.com/developerWorks/cn/index.shtml,也很棒。
每次,美美的享用一顿大餐后,也来也觉得自己是不是应该换一种学习方式,因为这样
学习效果不太好。比较乱。让我想起了Java Specification,对,我开始研究Java规范
了。最开始下载的规范是JDBC Specification,很多概念一目了然,尤其是DATABASE的
事务性控制,自己对于她的理解慢慢的有了较为深入的了解。对于开发C/S结构,比如,
Swing+JDBC,开发数据库应用系统,让我学会开发两层结构的应用系统。很神气。
也不知道什么时候要开始开发一个网站,基于Linux+JSP+JavaBean+Oracle的系统。很是
有意思。为什么这么说呢?因为不同于Swing+JDBC的开发模式,系统之间多了一层(Jav
aBean,姑且就这么叫吧!嘻嘻);同时,很多开发技术和面向左面系统不一样,比如分页
技术。
完成项目后,自己对于Java的很多方面都比较了解了。开始思考一个问题,J2EE是什么
东西?。我们学习Java大概有3个方向,第一,桌面系统,包括C/S结构;第二,J2ME,面
向无限领域,很有潜力的家伙,看看中国的手机用户就知道了。第三,面向企业应用、
计算的平台,J2EE。
在痛苦的抉择后,我选择J2EE..分享J2EE给我带来的快乐。学到现在,最大的感觉,就
是: 简单就是美,美就是Java.不会有学MFC的痛苦,也不会有去分析STL的艰辛,网路应
用上一点也不逊色于C++。开始进入我的J2EE之旅。
还是下载了一份J2EE规范,一份J2EE SDK。开始研究J2EE,结合http://java.sun.com/j
2ee/tutorial/index.html 提供的J2EE Tutorial开始研究了。大概过了1个月,开始有
感觉了,也就在这个时候,需要我去完成一个J2EE构架方面的项目。差不多边学编写完
成了,很多概念在写完后都不是很清晰,因为东西太多了,主要是基于JSP(Servlet)+S
ession Bean+EIS构架开发系统。当然也学到很多东西,至少对SB EJB的编写不成问题。
懂得了JSP如何调用EJB……。
完成项目后,我开始研究Java Pet Store了,很是过瘾。开始知道了Servlet过滤器,X
ML方面较为全面的知识,知道了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?ad
e、DTO等。J2EE系统构架中常用的模式。UML-> EJB,EJB->UML相互映射。现在也一样在
研究。
善于享受孤独,幸好还有J2EE!]]>