??xml version="1.0" encoding="utf-8" standalone="yes"?>
一、所需要准备的相关软g如下Q?/span>
1
?/span>
java 2 SDK
Q?/span>
java
开发工具包Q—?/span>
JDK
从以上列表中选择你需要的版本q行下蝲
.
2
?/span>
tomcat
Servlet/JSP Spec
Apache Tomcat version
2.4/2.0
2.3/1.2
2.2/1.1
从以上列表中选择你需要的版本q行下蝲
.
3
?/span>
eclipse
及语a?/span>
见我的另外一?/span>
?/span>
Eclipse 3.1.x
汉化q程?/span>
Version
File
Date
Comment
3.1 final
15 September 2005
Works with Eclipse 3.0 and Eclipse 3.1 (fix a problem with Eclipse
3.0
27 July 2004
Works with Eclipse 3.0 and Eclipse 2.1
1er August 2003
Works with Eclipse 2.1 and Eclipse
5
?/span>
lomboz
插g或?/span>
myeclipse
插g
?/span>
eclipse3.0
以前可以使用
Easy Struts
插g
,
但是
eclipse3.0
不再支持
Easy Struts
插g
,
所以?/span>
eclipse3.0
以上版本的话
,
我们可以选择
lomboz
插g或?/span>
myeclipse
插g
.
Ҏ自己的喜?/span>
,
选择
lomboz
或?/span>
myeclipse
都可?/span>
,
个h推荐使用
myeclipse.
不过
,myeclipse
不是免费的插?/span>
,
?/span>
30
天的试用?/span>
,
我们可以先?/span>
free
版的
,
如果支持
myeclipse
的活
,
最好还是用正版的
.
下面来分别简单阐qC?/span>
lomboz
插g?/span>
myeclipse
插g?/span>
?/span>
lomboz
插g
以前?/span>
lomboz
插g是需要下载两个部分,一个是
emf
环境Q另一个是
lomboz
插g
.
下蝲地址
: http://download.forge.objectweb.org/lomboz/
现在只需要下载一?/span>
: lomboz-eclipse-emf-gef-jem
可以了
,
它把
emf
环境?/span>
lomboz
插g都扉K里面M
,
大概?/span>
?/span>
Myeclipse
插g
安装
Myeclipse4.1 (myeclipse
不是免费的,它有
30
天的使用期,所以我们先下蝲一个试用版
)
下蝲版本Q?/span>
MyEclipse Enterprise Workbench 4.1.1 GA for Windows 98/2000/XP (03/02/2006)
二?/span>
软g安装
1
?/span>
java
安装
q行可执行文?/span>
j2sdk-1_5_2_07-windows-i586-p.exe
Q安装结束后需配置环境变量Q在我的电脑
->
属?/span>
->
高
->
环境变量
->
pȝ变量中添加以下环境变?/span>
2
?/span>
tomcat
安装
解压版的直接解压可以了Q然后配|环境变?/span>
TOMCAT_HOME
Q安装版的要注意的两点,一个是安装完之?/span>
tomcat
的服务就能够启动的了Q但是还是要配置
TOMCAT_HOME
Q第二个是需要查看一下安装程序是不是?/span>
tomcat
服务注册成ؓ
windows
的启动服务,需要到
?/span>
服务
?/span>
里查看,如果有这个选项把它设|ؓ手动启动Qƈ且先停止q个服务?/span>
[
试
]
Q?/span>
startup.bat
命oQ服务正常启动之后,
ie
览器里输入
http://localhost:8080/
如果出现正常的小猫页面,那就应该没有问题?/span>
3
?/span>
eclipse
安装
eclipse
的安装很单,只要解压Q然后把
eclipse
目录复制C惛_装的盘符下就可以了,启动的时候,pȝ会自动寻?/span>
JVM
?/span>
具体的安装和汉化q程见我的另一:?/span>
Eclipse 3.1.x
汉化q程
?/span>
4
?/span>
tomcat
插g安装
tomcatPluginV3.1zip
解压后将文g?/span>
com.sysdeo.eclipse.tomcat_3.1
拯C?/span>
eclipse\plugins
目录下就可以?/span>
.
5
?/span>
lomboz
或?/span>
myeclipse
的安?/span>
?/span>
lomboz
的安?/span>
首先?/span>
eclipse
的安装目录下新徏一个名?/span>
lomboz
的文件夹
把?/span>
lomboz-eclipse-emf-gef-jem-3.1RC
三?/span>
eclipse
配置
如果q几个插件安装成功,左边的列表里应该?/span>
lomboz
?/span>
tomcat
的选项。如果没有,查上面的步骤是不是正。点?/span>
java->Installed JREs
Q然后显C如下,如果是初始安装的Q只有显C第一?/span>
JRE
Q那是系l默认的安装?/span>
C
盘的
jre
Q如果系l当中安装了多个
jdk
Q那么最好还是新Z个,点击
add
Q然后选择你需要用的
jdk
的位|,然后它会自动L其他的参敎ͼ点击
ok
。返回界面之后,不要忘记炚w刚刚添加的
jdk
Q要不然是没有用的。然后点?/span>
ok
关闭q个H口?/span>
2
?/span>
tomcat
配置Q具体见Q?/span>
我的另外一:?/span>
[原创]My eclipse 4.1(eclipse3.1X插g eclipse企业U工作^?/span>) ?/span>myeclipse插g安装说明
Q?/span>
q里主要是配|?/span>
tomcat
的参敎ͼҎ你安装的
tomcat
的版本,选择
tomcat version
Q然后找到该
tomcat
的主目录Q输入在
tomcat home
Q下面的参数会自动配|,点击
apply
?/span>
然后在左辚w择
advanced
Q同h
tomcat
的主目录复制?/span>
tomcat base
Q点?/span>
apply
。最后在左边选择
JVM setting
Q选择刚刚加入?/span>
jre
Q点?/span>
apply
Q点?/span>
ok
。这样就可以了。如果在启动
eclipse
的时候出C个小猫图标,׃?/span>
tomcat
配置成功了。见下图
3
?/span>
lomboz/myeclipse
配置
基本上不用什么配|,如果在启?/span>
eclipse
的时候,在“文件?/span>
->
“新建?/span>
->?/span>
其它
?
列表中多Z
:J2EE,EJB, Web Services,Xml
{?/span>
,
说明
lomboz
安装成功
.
见下?/span>
(lomboz
安装成功标志
)
:
?/span>
myclipse
只要安装正确
,
在启?/span>
eclipse
时?/span>
,
只要在菜单栏中多Z
”myeclipse?/span>
?/span>
,
则说?/span>
myeclipse
安装成功?/span>
.
xQ?/span>
Java Web
开发环境已l配|搭建完毕?/span>
String name = new String(request.getParameter("name"));
2.数据库连接:
~~MYSQL
//讄数据库的URL
String url = "jdbc:mysql://localhost:3306/jspsky";
try
//加蝲驱动E序
Class.forname("org.gjt.mm.mysql.Driver").newInstance();
//建立q接
java.sql.Connection connection = java.sql.DriverManager.getConnection(url);
java.sql.Statement statement = connection.createStatement();
//SQL语句
String sqlStringi ="insert into commu(name,tel,mobile,oicq,email)values(?+name+"',?+tel+"',?+mobile+"',?+oicq+"',?+email+"')";
//q行SQL语句Qƈ建立l果?
java.sql.ResultSet rsi = statement.executeQuery(sqlStringi);
//在屏q上输出库中的内?
while(rss.next())
{
String a_name = rss.getString(1);
out.println(a_name);
{}
//关闭q接
connection.close();
}
//捕捉异常
catch(java.sql.SQLException e)
out.println(e.getMessage());
{}
catch(ClassNotFoundException e)
out.println(e.getMessage());
{}
~~DB2
//定义数据库的URL
String url = "jdbc:db2:portal";
try
//加蝲驱动E序
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
//建立q接Q?
java.sql.Connection connection = java.sql.DriverManager.getConnection(url,"user","password");
java.sql.Statement statement = connection.createStatement();
//SQL语句
String sqlString = "select * from client";
//执行SQL语句
java.sql.ResultSet rs = statement.executeQuery(sqlString);
//在屏q上昄所q表中的内容
while(rs.next())
{
String name = rs.getString(1);
out.println(name);
{}
//关闭q接
connection.close();
}
//捕捉异常
catch(java.sql.SQLException e)
out.println(e.getMessage());
{}
catch(ClassNotFoundException e)
out.println(e.getMessage());
{}
3.文g操作
~~一个字W串写到一个指定的文g中,如果该文件不存在Q则新徏一个文Ӟq完成写入;如果存在Q则用此字符串覆盖原文g的所有内?
import java.io.*;
String str = "print me 雪峰!";
//定义好打印的目标文g?
//取得当前L存放WEB面的绝对\?
String hostdir = System.getProperty("user.dir");
//取得当前L所采用的\径分隔符
String fileBar = System.getProperty("file.separator");
//书写完整的目标文件存放\?
String nameOfFile=hostdir+fileBar+"test.html";
try
//实例化一个文件输出流对象
FileOutputStream afile = new FileOutputStream(nameOfFile);
//文件输出流Q创Z个打印输出流对象
PrintWriter pw = new PrintWriter(afile);
pw.println(str);
//clean up
pw.close();
{}
catch(IOException e)
out.println(e.getMessage());
{}
~~列出指定目录下的文g列表
import java.io.*;
String cdur = System.getProperty("user.dir");
String fileBar = System.getProperty("file.separator");
String mydir =cdur+fileBar+"doc"+fileBar+"jspsky";
File my = new File(mydir);
String d[] = my.list();
int i;
int l=d.length;
for(i=0;i out.print(d);
{}
4.计数?
Integer count = null;
synchronized (application)
count =(Integer) application.getAttribute("d");
if (count ==null)
count =new Integer("0");
count = new Integer(count.intValue()+1);
application.setAttribute("d",count);
{}
out.println(count);
// 首先定义一个整形对象,q初始化为:NULLQ?
// 取回APPLICATION对像的属性D的|q强制{化ؓ整Ş对象Q赋lCOUNT
// 判断COUNT是否为空QؓI时Q将O赋给COUNT对象Q?
// 否则Q通过COUNT。INTVALUEQ)ҎQ实现COUNT对象?Qƈ赋值给COUNT
// 最后,COUNT对象保存在APPLICATION对象的D变量中?/font>
]]>
q里使用的是
jdk1.5
Q推荐?/span>
JDK1.4
及以上版本)下蝲地址
:
http://java.sun.com/javase/downloads/index.html
,
我这里用的?/span>
tomcat 5.5
的,
(
推荐使用
5.0
以上版本
),
下蝲地址Q?/span>
http://tomcat.apache.org/
4
?/span>
tomcat
插g
我这里用的是与
eclipse3.1
对应?/span>
tomcat
插g
tomcatPluginV3.1.zip(
下蝲之前需要查看插件是否适合
eclipse
的版?/span>
),
下蝲地址
:
http://www.sysdeo.com/sysdeo/eclipse/tomcatplugin
地址: http://www.myeclipseide.com/Downloads%2Bindex-req-viewsdownload-sid-10.html
CLASSPATH
Q?/span>
JAVA_HOME:
Q?/span>
PATH
然后使用
links
方式来安?/span>
lomboz
插g
:
?/span>
links
文g夹下新徏一?/span>
lomboz.start(
后缀名Q?/span>
)
?br />
?/span>
Myeclipse
的安?br />
见我的另外一:?/span>
[原创]My eclipse 4.1(eclipse3.1X插g eclipse企业U工作^?/span>) ?/span>myeclipse插g安装说明
?/span>
1
?/span>
Installed JREs
配置
打开配置界面
myeclipse安装成功
?/span>
(lomboz
安装成功标志-列表中多Z:J2EE,EJB, Web Services,Xml{?/span>
)
]]>
]]>
一、J2EE的模?视图-控制QMVCQ体pȝ?/b>
模型-视图-控制l构是交互式应用E序q泛使用的一U体pȝ构。它有效地在存储和展C数据的对象中区分功能模块以降低它们之间的连接度Q这U体pȝ构将传统的输入、处理和输入模型转化为图形显C的用户交互模型Q或者换一U说法,是多层次的Web商业应用QMVC体系l构h三个层面Q模型(ModelQ、视?View)和控?Controller)Q每个层面有其各自的功能作用QMVC体系l构如下Q?br />
模型层负责表辑֒讉K商业数据Q执行商业逻辑和操作。也是_q一层就是现实生zM功能的Y件模拟;在模型层变化的时候,它将通知视图层ƈ提供后者访问自w状态的能力Q同时控制层也可以访问其功能函数以完成相关的d?br />
视图层负责显C模型层的内宏V它从模型层取得数据q指定这些数据如何被昄出来。在模型层变化的时候,它将自动更新。另外视囑ֱ也会用L输入传送给控制器?br />
控制层负责定义应用程序的行ؓ。它可以分派用户的请求ƈ选择恰当的视图以用于昄Q同时它也可以解释用L输入q将它们映射为模型层可执行的操作Q在一个图形界面中Q常见的用户输入包括点击按钮和菜单选择。在Web应用中,它包括对Web层的HTTP GET和POST的请求;控制层可以基于用L交互和模型层的操作结果来选择下一个可以显C的视图Q一个应用程序通常会基于一l相兛_能设定一个控制层的模块,甚至一些应用程序会Ҏ不同的用L型具有不同的控制层设定,q主要是׃不同用户的视图交互和选择也是不同的?br />
在模型层、视囑ֱ和控制层之间划分责Q可以减少代码的重复度Qƈ使应用程序维护v来更单。同时由于数据和商务逻辑的分开Q在新的数据源加入和数据昄变化的时候,数据处理也会变得更简单?br />
二、J2EE设计模式
一个设计模式描qC对于特定设计问题被验证的解决ҎQ它l合了所有开发者对q个问题所在领域的知识和见解;同时也是对于常见问题的可重用ҎQ它们一般适用于单个问题,但是l织在一起就可以提供整个企业pȝ的解x案。下面我们列丑օU常用于J2EEq_的设计模式,q对每种模式作简单的介绍Q便于大家学习、理解与灉|应用?br />
1、前控制?br />
前控制器(front controller)主要提供一U可以集中式理h的控制器Q一个前控制器可以接受所有的客户hQ将每个h递交l相应的h句柄Qƈ适当地响应用戗?br />
前控制器也是表示层的设计模式Q它的出C要是׃表示层通常需要控制和协调来自不同用户的多个请求,而这U控制机制又Ҏ不同的需要,可能会集中式控制或分散式控制。换句话_是应用pȝ需要对于表C层的请求提供一个集中式控制模块Q以提供各种pȝ服务Q包括内Ҏ取、视囄理和览Q如果系l中没有q种集中式控制模块或控制机制Q每个不同的pȝ服务都需要进行单独的视图处理Q这样代码的重复性就会提高,致ɾpȝ开发代h高;同时Q如果没有一个固定模块管理视图之间的览机制Q致使其览功能下放于每个不同的视图中,最l必得系l的可维护性受到破坏;本文中我们主要讨论的是集中式控制模块Q而不是分散式控制Q因为前者更适合于大型的应用pȝ?br />
Z上面所说的问题Q研Ih员提Z前控制器的设计模式。在q种模式中,控制器提供一个处理不同请求的控制点,q里的处理工作包括安全事务、视N择、错误处理和响应内容的生成;通过这些处理工作集中在一点进行,大大地减低了Java代码量,同时q种Ҏ也可以减在视图模块的程序逻辑Q保证了在不同请求之间可以重用大量的逻辑代码。通常Q控制器都是和一个分z件联合工作的Q分z件主要是用于视图理和浏览,也就是ؓ用户选择下一个应该显C的视图Qƈ同时提供对于相关昄资源的控制。分z件可以包含在控制器之内,或是在另外一个单独的lg中;虽然前控制器模式推荐对于全部的请求用统一处理Q但是它也没有限制在一个系l中只能h一个控制器Q在pȝ中的每个层次都可以具有多个控制器Qƈ且映至不同的系l服务,下图2昄了前控制器的cd?br />
?昄了前控制器的序列图,表示一个控制器如何处理相关的请求?br />
下面我们来讨Z下图3的各个组件?br />
2、控制器
控制?controller)是负责处理各U客戯求的控制点,q可以将一定的职能(如用戯证等)下放l帮助类?br />
(1)分派lg(Dispatcher)。一个分z件主要是用于视图的管理和览Qؓ用户选择下一个可以显C的视图Qƈ理相关的显C源;分派lg可以在一个控制器内运行,或者作Z个单独的lg与控制器协同工作Q开发h员可以在分派lg中实现静态的视图分派技术,或是复杂的动态分z?br />
(2)帮助c?Helper)。帮助类负责帮助一个视图或控制器来完成其处理工作,因此Q帮助类h多项职责Q包括收集数据、存储中间数据模型等Q另外,帮助cM可以在保证数据完整性和准确性的情况下,Z同显C需求修Ҏ据模型;也就是说Q根据用LhQ帮助类可以向视图提供未l处理的原始数据Q或是已l格式化后的Web内容Q一个视囑时可以和多个帮助cd同工作,而后者通常是由JavaBeans和标{?tag)实现的?br />
3、视?br />
视图(view)负责向用hCZ息,而帮助类则负责支持视囄工作Q即打包和徏立相应的数据模型Q下面我们介l几U可以实现控制器的方法?br />
1Q基于Servlet前控制器
q种Ҏ使用servlet来实C个控制器Q尽在语法上相差无几,但是它比使用JSP来实现要优越一些;因ؓ控制器所q行的请求处理,多数都是与程序运行和控制动相关的,q些处理工作虽然与显C模式相养I但是实际上是逻辑独立的,所以它们更适合在servlet中实玎ͼ而不是JSP技术中Q用这U方法也存在一些弱点,比如说servlet无法使用JSPq行环境的资源,如请求参数等Q但是这个弱点也不是不能解决的,我们可以在servlet中徏立相关的句柄来访问同L资源Q当然其代码会变得繁琐一炏V?br />
2Q基于JSP的前控制?br />
q种Ҏ使用JSP面实现控制器,管语法上相同,但是ServletҎ要比其优一些;因ؓ控制器所处理的逻辑一般都不是有关昄模式的,所以在JSP面中实现控制器g有点风马牛不相及Q用这U方法也不利于开发团队的角色和职责的分配Q即软g开发h员需要在负责昄逻辑的JSP面中修改请求处理的代码Q通常Q这U工作都是相当复杂的Q尤其考虑整个JSP面的编E、编译、测试和调试错误?br />
3Q控制器之中的分z?br />
如果分派lg没有较多功能Q开发h员可以在控制器实现该lg?br />
4Q基前端
Z使用servlet实现前控制器Q这U方案徏议实C个控制器作ؓ基础c,q样其他的控制器可以在其之上扩展Q这个基cd以包含一些通用的逻辑实现Q它的子cd会重载这些实C码,q种Ҏ也有一定的~陷Q当有许多子cȝ承这个基c,q大量地重用代码Ӟ那么有可能出现一个类的改变会影响到所有子cȝ情况?br />
5Q用qo器实现前控制?br />
qo器提供了与用戯求的中心处理相类似的功能Q也是_控制器的一些功能可以由qo器来实现Q这U方案的qo器主要负责处理请求的截取和解释,而不是请求的处理和响应的生成Q通常可以为应用系l提供一个核心控制点Q以处理所有的pȝ服务和程序逻辑Q核心控制也p明了所有的h都可以简单地被跟t和记录Q从而方便各U服务功能的实施Q当Ӟ它也存在一些缺点,一个核心控制点的小问题可能会引发系l的崩溃Q但在应用系l的实际开发中Q这q不是个问题Q因为通常我们都会在同一个层面上实现多个控制器,从而避免了q个~陷Q在控制器中Q开发h员可以很方便地实C个检查安全机制的lgQ从而可以在最外层屏蔽对系l的恶意讉KQ另外用控制器也会提高pȝ模块的可重用性,其在控制器同时使用帮助cȝ时候?br />
4、视囑ָ?br />
视图帮助(View helper)是属于表C层的设计模式,一个视囑ָ助可以包含相兌图中的数据访问和内容昄的逻辑Qƈ可以_化视图;昄逻辑主要是关于如何格式化面上的数据Q而访问逻辑则是关于如何取出数据Q视囑ָ助通常用来昄数据的JSP标记(tag)或是d数据的JavaBean?br />
q种设计模式的出C要是׃目前的应用系l通常需要实时地开发显C内容,q且能处理动态的E序数据。如果这些程序数据的讉K逻辑和显C逻辑的关p过于紧密,则系l的表示层就会经帔R要改动,从而系l的灉|性、重用性会大大地受到破坏;同时在相同的模块中实现访问逻辑和显C逻辑会影响pȝ的模块化
]]>
2QY件开发学习\U?/b>
两千多年的儒家思想孔孟之道Q中庸的思想透入骨髓Q既不冒q也不保守ƈ非中怹道,而是扑֯学习软g开发的正确路线与规律?br />
从Y件开发h员的生规划来讲Q我们可以大致分Z个阶D,软g工程师→软g设计师→架构设计师或目理师。不惛_元帅的士兵不是好士兵Q不惛_架构设计师或目理师的E序员也不是好的E序员。我们应该努力往上走。让我们先整理一下开发应用Y仉要学习的主要技术?br />
AQ基理论知识Q如操作pȝ、编译原理、数据结构与法、计机原理{,它们q不重要。如不想成ؓ计算机科学家的话Q可以采?用到的时候再来学"的原则?br />
BQ一门编E语aQ现在基本上都是面向对象的语aQJAVA/C++/C#{等。如果做WEB开发的话还要学习HTML/JavaScript{等?br />
CQ一U方法学或者说思想Q现在基本都是面向对象思想QOOA/OOD/设计模式Q。由此而衍生的Zlg开发CBD/面向斚w~程AOP{等?br />
DQ一U关pd数据库,ORACLE/SqlServer/DB2/MySQL{等
EQ一U提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET{?br />
FQ一UUML建模工具Q用ROSE/VISIO/钢笔q行建模?br />
GQ一UY件过E,RUP/XP/CMM{等Q通过软gq程来组lY件开发的众多zdQ开发流E专业化规范化。当然还有其他的一些Y件工E知识?br />
HQ项目管理、体pȝ构、框架知识?br />
正确的\U应该是QB→C→E→F→G→H?br />
q需要补充几点:
1Q.对于A与C要补充的是,我们应该在实践中逐步领悟~程理论与编E思想。新技术虽然不断涌玎ͼ更新速度令hD燎ؕN看花Q但万变不离其宗Q编E理Z~程思想的变化却很慢。掌握了~程理论与编E思想你就会有拨云见日之感。面向对象的思想在目前来讲是相当关键的,是强势技术之一Q在上面需要多投入旉Q给你的回报也会让你惊喜?br />
2Q.对于数据库来说是独立学习的,q个时机q你来军_吧?br />
3Q.~程语言作ؓ学习软g开发的ȝQ而其余的作ؓ辅线?br />
4Q.软g工程师着重于B、C、E?DQY件设计师着重于B、C、E?D、FQ架构设计师着重于C、F、H?br />
3Q如何学习JAVA?
3.1 JAVA学习路线
3.1.1 基础语法及JAVA原理
基础语法和JAVA原理是地基,地基不牢靠,犹如沙地上徏摩天大厦Q是相当危险的。学习JAVA也是如此Q必要有扎实的基础Q你才能在J2EE、J2ME领域游刃有余。参加SCJPQSUN公司认证的JAVAE序员)考试不失Z个好ҎQ原因之一是ؓ了对得v你交?200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基打得很牢靠,它要求你跟JDK一L悉JAVA基础知识Q但是你千万不要认ؓ考过了SCJP有多了不vQ就能够获得软g公司的青睐,p够获取高薪,q样的想法也是很危险的。获?真正"的SCJP只能证明你的基础q过得去Q但d际开发还有很长的一D\要走?br />
3.1.2 OO思想的领?br />
掌握了基语法和JAVAE序q行原理后,我们可以用JAVA语言实现面向对象的思想了。面向对象,是一U方法学;是独立于语言…?br />…?br />…?br />3.2.5 不局限于JAVA
很不q,很幸q,要学习的东西q有很多。不q的是因学的东西太多且多变,没时间陪老婆家h或女朋友Q导致n心疲惫,严重者甚臛_致抑郁症。幸q的是别抢你饭碗l非易事Q他们或她们需要付出很多才能达成心ѝ?br />
JAVA不要孤立地去学习Q需要综合学习数据结构、OOP、Y件工E、UML、网l编E、数据库技术等知识Q用横向U向的比较联想的方式d习会更有效。如学习JAVA集合的时候找数据l构的书看看Q学JDBC的时候复习数据库技术;采取的依然是"需要的时候再?的原则?br />
4Q结束语
需要强调的是,学习软g开发确实有一定的隑ֺQ也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在JAVA殿之外的朋友有所帮助的话Q笔者也ƣ慰了。哈哈,怎么听v来老气横秋呀Q没办法Q在电脑的长期辐之下,都快变成老头了。最后奉劝各位程序员其是MME序员,完成工作后赶快远ȝ脑,据《胡播ؕ报》报道,电脑辐射会在白皙的皮肤上面点~一些小黑点Q看h鲜艳无比…?img src ="http://www.tkk7.com/kobe09/aggbug/52752.html" width = "1" height = "1" />
]]>
在ChinaITLAB导师制辅gQ笔者发现问得最多的问题莫过?如何学习~程QJAVA该如何学习?"。类似的问题回答多了Q难免会感觉厌烦Q就萌生了写下本文的x。到时候再有h问vcM的问题,我可以告诉他Q她Q,请你ȝ看《JAVA学习之\》。拜读过****蔡学镛先生的《JAVA夜未眠》,有些文章如《JAVA学习之道》等让我们确实有共鸣Q本文题目也由此而来?br />
软g开发之路是充满荆棘与挑战之?也是充满希望之\。JAVA学习也是如此Q没有捷径可走。梦惛_《天龙八部》中虚竹一栯无崖子醍醐灌而轻松获得一甲子功力Q是很不现实的。每天Ԓ天大?天神啊,误l我一本葵花宝典吧"Q殊不知即你获得了葵花宝典Q除了受自宫其n之苦外,你也不一定成得了"东方不|"Q倒是?西方p|"的几率高一炏V?br />
"不走弯\Q就是捷?Q佛l说的不无道理?br />
1Q如何学习程序设计?
JAVA是一U^収ͼ也是一U程序设计语aQ如何学好程序设计不仅仅适用于JAVAQ对C++{其他程序设计语a也一L用。有~程高手认ؓQJAVA也好C也好没什么分别,拿来q。ؓ什么他们能辑ֈ如此境界Q我x因ؓ~程语言之间有共通之处,领会了编E的_NQ自然能够做C通百通。如何学习程序设计理所当然也有许多共通的地方?br />
1.1 培养兴趣
兴趣是能够让你坚持下ȝ动力。如果只是把写程序作生的手段的话Q你会活的很累,也太对不赯׃。多兛_一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但h要是没有了梦惻I你觉得有味道吗?可能像许多深x地农民一P打打dQ喝喝功夫茶Q拜拜胦爷Q每个月有几万十几万甚x多的q帐Q凭I多Z"食利阶层"。你认ؓQ这h味道吗?有空多到一些程序员论坛转{Q你会发玎ͼ他们其实很乐观幽默,时不时会冒出智慧的火花?br />
1.2 慎选程序设计语a
h入错行Q女怕嫁错郎。初学者选择E序设计语言需要}慎对待。Y件开发不仅仅是掌握一门编E语a了事Q它q需要其他很多方面的背景知识。Y件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落?br />
如果你对g比较感兴,你可以学习C语言/汇编语言Q进入硬件开发领域。如果你对电信的行业知识及网l比较熟悉,你可以在C/C++{之上多花时_以期q入电信软g开发领域。如果你Ҏ作系l比较熟悉,你可以学习C/Linux{等,为Linux内核开?驱动E序开?嵌入式开发打基础。如果你想介入到应用范围最q泛的应用Y件开发(包括电子商务电子政务pȝQ的话,你可以选择J2EE?NETQ甚至LAMPl合。每个领域要求的背景知识不一栗做应用软g需要对数据库等很熟悉。MQ你需要根据自q特点来选择合适你的编E语a?br />
1.3 要脚t实?快餐式的学习不可?/b>
先分享一个故事?br />
有一个小朋友Q他很喜Ƣ研I生物学Q很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会飞?有一ơ,他走到草原上面看见一个蛹Q便取了回家Q然后看着Q过了几天以后,q个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,x破蛹壳飞出来?q个q程达数时之久Q蝴蝶在蛚w面很辛苦地拼命挣扎,怎么也没法子走出来。这个小孩看着看着不忍心,想不如让我帮帮它吧Q便随手拿v剪刀在蛹上剪开Q蝴蝶破蛹而出?但蝴蝶出来以后,因ؓ膀不够力,变得很臃肿,飞不h?br />
q个故事l我们的启示是:Ʋ速则不达?br />
躁是现代h最普遍的心态,能怪谁Q也许是贫穷落后了这么多q的~故Q就像当q的大跃q一P都想大步跨入****MC会。现在的软g公司、客戗?***、学校、培训机构等{到处I漫着躁之气。就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣U?参加培训Q?00%׃"Q居然报名的学生不少Q简直是藐视天下E序员。社会环境如是,我们不能改变Q只能改变自?闹市中的安宁QI珍c许多初学者C++/JAVA没开始学Q立马用VC/JBuilder,会用VC/JBuilder开发一个Hello WorldE序Q就忙不q的向世界宣告,"我会软g开发了"Q简历上也大a不惭地写?_NVC/JAVA"。结果到软g公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。到处碰壁之后才知道捧v《C++~程思想》《JAVA~程思想》仔l钻研,早知如此何必当初呀?br />
"你现在讲I简单方便,你以后的路就长了"Q好象也是佛l中的劝戒?br />
1.4 多实?快实?/b>
彭端淑的《ؓ学一首示子侄》中有穷和尚与富和尚的故事?br />
从前Q四川边境有两个和尚Q一个IP一个有钱。一天,I和对富和说Q?我打去南v朝圣Q你看怎么P"富和说Q?q里dh几千里远Q你靠什么去呢?"I和说Q?我只要一个水钵,一个饭就够了?富和ؓ隑֜_"几年前我打买条船dP可至今没LQ你q是别去吧!" 一q以后,富和还在ؓU赁船只{wQ穷和尚却已l从南v朝圣回来了?br />
q个故事可解MؓQQ何事情,一旦考虑好了Q就要马上上路,不要{到准备周全之后Q再d事情。假如事情准备考虑周全了再上\的话Q别人恐怕捷_M。Y件开发是一门工E学U,注重的就是实践,"君子动口不动?对Y件开发h员来讲根本就是错误的Q他们提?动手至上"Q但别害怕,他们大多温文雅Q没有暴力們Q虽然有时候蓬头垢面的一?比尔盖茨"栗有前辈高h认ؓQ学习编E的U诀是:~程、编E、再~程Q笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要{到你完全理解了才动手敲代码Q而是应该在看书的同时敲代码,E序q行的各U情况可以让你更快更牢固的掌握知识点?br />
1.5 多参考程序代?/b>
…?br />…?br />…?br />
1.9 使用合适的工具
工欲善其事必先利其器。Y件开发包含各U各LzdQ需求收集分析、徏立用例模型、徏立分析设计模型、编E实现、调试程序、自动化试、持l集成等{,没有工具帮忙可以说是寸步难行。工具可以提高开发效率,使Y件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤h的境界就很高了,无招胜有招,手中无剑心中有剑q样的境界几乎不可企及。在W者另外一文章中会专门阐q如何选择合适的工具Q该文章也可作ؓ本文的姊妹篇Q?br />
]]>
Eclipse 是什么?
Eclipse 是一个开放源代码的、基?Java 的可扩展开发^台。就其本w而言Q它只是一个框架和一l服务,用于通过插glg构徏开发环境。幸q的是,Eclipse 附带了一个标准的插g集,包括 Java 开发工PJava Development ToolsQJDTQ?/p>
虽然大多数用户很乐于?Eclipse 当作 Java IDE 来用,?Eclipse 的目标不仅限于此。Eclipse q包括插件开发环境(Plug-in Development EnvironmentQPDEQ,q个lg主要针对希望扩展 Eclipse 的Y件开发h员,因ؓ它允总们构Z Eclipse 环境无缝集成的工兗由?Eclipse 中的每样东西都是插gQ对于给 Eclipse 提供插gQ以及给用户提供一致和l一的集成开发环境而言Q所有工具开发h员都h同等的发挥场所?/p>
q种q等和一致性ƈ不仅限于 Java 开发工兗尽?Eclipse 是?Java 语言开发的Q但它的用途ƈ不限?Java 语言Q例如,支持诸如 C/C++、COBOL ?Eiffel {编E语a的插件已l可用,或预计会推出。Eclipse 框架q可用来作ؓ与Y件开发无关的其他应用E序cd的基Q比如内容管理系l?/p>
Z Eclipse 的应用程序的H出例子?IBM ?WebSphere Studio WorkbenchQ它构成?IBM Java 开发工L列的基础。例如,WebSphere Studio Application Developer d了对 JSP、servlet、EJB、XML、Web 服务和数据库讉K的支持?/p>
Eclipse 是开放源代码的Y?/strong>
开放源代码软g是这样一UYӞ它们在发布时附带了旨在确保将某些权利授予用户的许可证。当Ӟ最明显的权利就是源代码必须可用Q以便用戯自由C改和再分发该软g。这U用h利的保护是通过一U称?copyleft 的策略来完成的:软g许可证主张版权保护,除非明确授予用户q样的权利,否则用户不得分发该Y件。copyleft q要求同一许可证涵盖Q何被再分发的软g。这实际上倒置了版权的目的——用版权来授予用户权利Q而不是ؓ软g的开发者保留版权——copyleft l常被描qCؓ“保留所有版权”?/p>
曄四处蔓g的对开放源代码软g的许多恐惧、担忧和疑虑Q都与某?copyleft 许可证的所谓“病毒”性质有关——如果用开放源代码软g作ؓ您开发的E序的一部分Q您失去自q知识产权Q因许可证将“传染”您开发的专有部分。换句话_该许可证可能要求与开放源代码软g一h包的所有YӞ都必d相同的许可证之下发布。虽然这Ҏ著名?copyleft 许可证(?GNU 通用公共许可证,例如 Linux 是在该许可证之下发布的Q来说可能是事实Q当时还有其他许可证在商业化和社虑之间提供了较好的q?/p>
开放源代码计划QOpen Software InitiativeQ是一安营利机构Q它明确定义了开放源代码的含义及满其标准的认证许可证。Eclipse 是在 OSI 认可的通用公共许可证(CPLQ?.0 版之下被授予许可证的QCPL“旨在促q程序的商业化用……”(Ʋ获得指向通用公共许可?1.0 版完整文本的链接Q请参阅本文E后?参考资料)?/p>
?Eclipse 创徏插g或将 Eclipse 用作软g开发应用程序基的开发h员,需要发布他们在 CPL 下用或修改的Q?Eclipse 代码Q但是他们可以自由决定自己添加的代码的许可证授予方式。与 Eclipse 的Y件一h包的专有代码不需要作为开放源代码来授予许可证Q该源代码也不需要提供给用户?/p>
管大多数开发h员不会?Eclipse 来开发插Ӟ或创建基?Eclipse 的新产品Q但?Eclipse 的开放源代码性质所意味的,q不只是它?Eclipse 免费可用Q尽便于商业化的许可证意味着插g可能要花钱)。开放源代码鼓励创新QƈȀ励开发h员(甚至是商业开发h员)为公共开放源代码库A献代码。对此存在许多原因,不过最本质的原因或许是个项目作贡献的开发h员越多,q个目׃变得Ҏ个h都越宝贵。随着q个目变得更加有用Q更多的开发h员将会用它Qƈ围绕它Ş成一个社区,像那些围绕 Apache ?Linux 形成的社Z栗?/p>
Eclipse 是什么机构?
Eclipse.org 协会理和指?Eclipse 正在q行中的开发。在据说 IBM ׃ 4000 万美元开?EclipseQƈ把它作ؓ一个开放源代码目发布之后QEclipse.org 协会吸收了许多Y件工h供商Q包?Borland、Merant、Rational、RedHat、SuSE、TogetherSoft ?QNX。从那以后还有其他公司相l加入,包括 Hewlett Packard、Fujitsu、Sybase。这些公司分别向理事会派了一名代表,q个理事会负责确?Eclipse 目的方向和范围?/p>
在最高层Q项目管理委员会QProject Management CommitteeQPMCQ管理着 Eclipse 目。这个项目被划分为多个子目Q每个子目都有一名负责h。大型子目又被划分为组Q每个组也有一名负责h。目前,q其中的大多数管理角色都由最初开?Eclipse ?IBM 子公?Object Technology International (OTI)的h担QQ但是作Z个开放源代码的项目,它欢qQ何h的参与。Q何特定部门的职责是通过该部门对目的A献来争取的?/p>
现在我们已经考察?Eclipse 背后的一些理论、历史和理Q下面让我们考察该品本w?/p>
Eclipse 工作?/strong>
在第一ơ打开 Eclipse Ӟ首先看到的是下面的欢q屏q:
?1. Eclipse 工作?/p>
Eclipse 工作台由几个UCؓ 视图QviewQ?的窗格组成,比如左上角的 Navigator 视图。窗格的集合UCؓ 透视图(perspectiveQ。默认的透视图是 Resource 透视图,它是一个基本的通用视图集,用于理目以及查看和编辑项目中的文件?/p>
Navigator 视图 允许您创建、选择和删除项目。Navigator 右侧的窗格是 ~辑器区?/strong>。取决于 Navigator 中选定的文档类型,一个适当的编辑器H口在q里打开。如?Eclipse 没有注册用于某特定文档类型(例如QWindows pȝ上的 .doc 文gQ的适当~辑器,Eclipse 设法用外部编辑器来打开该文档?/p>
Navigator 下面?Outline 视图 在编辑器中显C文档的大纲Q这个大U的准确性取决于~辑器和文档的类型;对于 Java 源文Ӟ该大U将昄所有已声明的类、属性和Ҏ?/p>
Tasks 视图 攉关于您正在操作的目的信息;q可以是 Eclipse 生成的信息,比如~译错误Q也可以是您手动d的Q务?/p>
该工作台的大多数其他Ҏ,比如菜单和工hQ都应该和其他那些熟悉的应用E序cM。一个便利的Ҏ就是不同透视囄快捷方式工具栏,它显C在屏幕的左端;q些Ҏ随上下文和历史的不同而有显著差别。Eclipse q附带了一个健壮的帮助pȝQ其中包?Eclipse 工作C及所包括的插Ӟ比如 Java 开发工P的用h南。至浏览一遍这个帮助系l是值得的,q样可以看到有哪些可用的选项Q同时也可更好地理解 Eclipse 的工作流E?/p>
为l这个短暂的 Eclipse 之旅Q我们将?Navigator 中创Z个项目。右键单?Navigator 视图Q然后选择 New=>Project。当 New Project 对话框出现时Q选择左面?Java。标?Eclipse 只有一U?Java 目cdQ名为“Java Project”。如果安装了插g来提?JSP ?servlet 支持Q我们会从这里看C个用?Web 应用E序的附加选项。眼下,请选择 Java ProjectQ在提示目名称时输入“Hello”,然后?Finish?/p>
接下来,我们检查一?Java 透视图。取决于您喜Ƣ的屏幕理方式Q您可以通过选择 Window=>Open Perspective=>Java 来改变当前窗口中的透视图,也可以通过选择 Window=>New WindowQ然后再选择q个新的透视图,从而打开一个新的窗口?/p>
正如您可能预期的那样QJava 透视囑含一l更适合?Java 开发的视图。其中之一是左上角的视图Q它是一个包含各U?Java 包、类、jar 和其他文件的层次l构。这个视囄?Package Explorer。还要注意主菜单已经展开了——ƈ且出C两个新的菜单:Source ?Refactor?/p>
Java 开发环境(JDEQ?/strong> 验一?Java 开发环境,我们创建ƈq行一个“Hello, world”应用程序。?Java 透视图,右键单击“Hello”项目,选择 New=>ClassQ如?2 所C。在随后出现的对话框中,键入“Hello”作为类名称。在“Which method stubs would you like to create?”下面,选中“public static void main(String[] args)”复选框Q然后按 Finish?/p>
q样在~辑器区域创Z个包?Hello cdI的 main() Ҏ?.java 文gQ如?3 所C。然后向该方法添加如下代码(注意其中 i 的声明是有意省略了的Q:
您会在键入时注意?Eclipse ~辑器的一些特性,包括语法查和代码自动完成。在 2.1 版(我曾下蝲 M2 版来试用q)中,当您键入开括号或双引号ӞEclipse 会自动提供配对的W号Qƈ光标置于符号对之内? 在其他情况下Q您可以通过?Ctrl-Space 来调用代码自动完成功能。代码自动完成提供了上下文敏感的列表Q您可通过键盘或鼠标来从列表中选择。这些徏议可以是针对某个特定对象的方法列表,也可以是Z不同的关键字Q比?for ?whileQ来展开的代码片断?/p>
语法查依赖增量编译。每当您保存代码Q它在后台接受~译和语法检查。默认情况下Q语法错误将以红色下划线昄Q一个带?“X?的红点将出现在左Ҏ。其他错误在~辑器的左边沉K过灯状的图标来指C;q些是~辑器或许能为您修复的问题——即所谓的Quick FixQ快速修复)Ҏ?/p>
上面的代码例子在 for 语句后面有一个灯泡状图标Q因?i 的声明被省略了。双击该图标调出徏议的修复列表。在此例中,它将提供创徏一个类字段 i、一个局部变?i 或一个方法参?i 的徏议;单击其中的每一个徏议都会显C将要生成的代码。图 4 昄了该列表和徏议创Z个局部变量之后生成的代码?/p>
双击该徏议就会把代码插入C码中的恰当位|? 一旦代码无错误地编译完成,您就能够?Eclipse 菜单上选择 Run 来执行该E序Q注意这里不存在单独的编译步骤,因ؓ~译是在您保存代码时q行的。如果代码没有语法错误,它就可以q行了)。这时会出现一个具有适当默认讄?Launch Configurations 对话框;h右上角的 Run 按钮。一个新的选项卡式H格出现在下面的窗|控制収ͼ中,其中昄了程序的输出Q如?5 所C?/p>
也可以在 Java 调试器中q行E序。首先双ȝ辑器视图左端的灰色边沿,从而在调用 System.out.println() 之后?main() System.out.println() 中设|一个断炏V一个蓝色的点将会出现在那里。然后从 Run 菜单上选择 Debug。正如上面描q的Q这时会出现一?Launch Configurations 对话框。请选择 Run。透视囑ְ自动切换?Debug 透视图,其中h许多有趣的新视图Q如?6 所C:
首先Q请注意该透视囑ַ上角?Debug 视图。这个视图显C用堆栈,q且标题栏中有一个工hQ它允许您控制程序的执行Q包括l、挂hl止E序、跟t下一个语句、单步执行下一个语句,或者从Ҏq回?/p>
右上角的H格包含许多选项卡式的视图,包括 Variables、Breakpoints、Expressions ?Display。这里我单击?Variables 视图Q以便我们能够看?i 的当前倹{?/p>
可以通过上下文敏感的帮助Q获得关于这些视囄更多信息Q单击视囄标题Q然后按 F1?/p>
附加插g 除了?JDT q样用于~辑、编译和调试应用E序的插件外Q还有些可用的插件支持从建模、生成自动化、单元测试、性能试、版本控制到配置理的完整开发过E?/p>
Eclipse 标准地附带了配合 CVS 使用的插ӞCVS 是用于源代码控制的开放源代码q发版本pȝQConcurrent Versions SystemQ。Team 插gq接?CVS 服务器,允许开发团队的成员操作一l源代码文gQ却不会怺覆盖其他人的更改。这里不打算q一步探讨如何从 Eclipse 内部q行源代码控Ӟ因ؓq需要安?CVS 服务器,不过支持开发团队而不只是独立的开发,q是 Eclipse 的一个重要的必备Ҏ?/p>
已经可用或已宣布要推出的一些第三方插g包括Q?/p>
版本控制和配|管?/strong> ?CVS UML 建模 ?OMONDO EclipseUML 囑Ş ?Batik SVG Web 开发、HTML、XML ?Macromedia Dreamweaver 应用服务器集?/strong> ?Sysdeo Tomcat launcher Ʋ了解可用插件的更完整列表,请参?Eclipse 插g列表?/p>
例子Q一个用?UML 建模的插?/p>
要查看插件的例子Q以及查看它是如何与 Eclipse 集成的,请下载流行的 OMONDO EclipseUMLQ您需要注册,不过该插件是免费的。这个插件依?GEFQ即 Graphical Editor FrameworkQ这是另一?Eclipse 插g。GEF ?Tools 子项目的一部分。要下蝲 GEFQ请转到 Eclipse Web 站点Q选择“downloads”,然后单击“Tools PMC downloads page”链接。注意您需要下?OMONDO 推荐?GEF 版本Q针?OMONDO 1.0.2 的是 GEF 2.0 版)?/p>
下蝲之后Q插件的安装通常是通过解压~下载文Ӟq将其内容复制到 Eclipse 插g目录来完成的。在此例中,GEF 需要解压羃?Eclipse目录Q它自动从该目录进入插件目录)。ؓ安全赯Q您可能惛_它解压羃到某个时目录,再相应地从那里复制相关目录。如?Eclipse 正在q行Q您需要停止它然后再重新启动它Q这样它才能识别新安装的插g?/p>
一?EclipseUMLQ以?GEFQ安装完成,您就能够像创Z?Java cL件一样创Z个类图。在 Java 透视图中Q右键单?Package Explorer 中的“Hello”项目,然后从弹单上选择 New=>Other。New 对话框的左边H格中将会有一个用?UML 的新选项。EclipseUML 的免费版本仅支持cdQ因此右侧的惟一选项?UML Class Diagram。请选择 UML Class DiagramQ然后ؓ该类N入一个名Uͼ比如“Hello”:
~辑器区域中会出现一个图形编辑器Q它带有用于l制cd的画布。您可以通过两种方式创徏cdQ通过?Java 文g?Package Explorer 拖放到类图上Q从而对现有代码q行逆向工程Q或者用空白类图上面工h中可用的l制工具。要试验W一U方法,请创Z个名?Person 的新c(使用 File=>New=>ClassQ,然后赋予它下面列出的两个U有属性:
Q应该承认,我仅键入了针?name ?address 的行。getter ?setter Ҏ是通过 Eclipse 自动生成的,卛_键单L代码Q然后从弹出菜单上选择 Source=>Generate Getter and Setter 。) 请保存ƈ关闭 Person.java Hello.ucd?/p>
要从 UML 创徏 Java c,请单ȝ囄口顶部工h上的“New class”按钮,卛_L三个按钮Q然后单ȝ图。当 New cd导打开Ӟ请键?Adress 作ؓcdUͼ然后?Finish?/p>
您可以右键单ȝ名称q择 New=>AttributeQ从而给cL加属性。在 New 属性对话框中,误入属性名U、类型和可见性。然后右键单ȝ名称q择 New=>Method 来添加方法?/p>
当您更改cdӞ图下面的 Source Editor H口反映所做的更改。最后,您可以单?Association 按钮Q左L五个Q,l制一条从 Person cL?Address cȝU段Q从而绘制这两个cM间的关系图。这样会调出另外一个对话框Q您可以在其中输入关联属性(请参?EclipseUML 帮助Q以了解关于必需信息的更多内容)。完成后的图应该cM如下Q?/p>
q个 UML 插g展示?Eclipse 插g的几个典型特炏V首先,它展CZ工具之间的紧密集成。表面上l对无法看出有多个组件在工作Q与 Eclipse q_?JDT 的集成是无缝的。例如,?Person c被创徏Ӟ它显C法错误是因ؓ它的一个属?Address 没有定义。一?Address cd UML 图中创徏完成Q这些组件就会分开昄出来?/p>
另一个特Ҏ EclipseUML 利用其他插g提供的功能的能力——在此例中是 GEF 插gQ它提供用于开发可视化~辑器的工具?/p>
q有另一个特Ҏ?EclipseUML 插g使用多层ơ功能来分发的方式。支持类囄基本插g是免费的Q但是更成熟的版本要付费才能使用?/p>
Eclipse q_体系l构
q_ 工作? 工作? SWT 已被证明?Eclipse 最具争议的部分。SWT ?Swing ?SWT 更紧密地映射到底层操作系l的本机囑Ş功能Q这不仅使得 SWT 更快速,而且使得 Java E序h更像本机应用E序的外观和感觉。用这个新?GUI API可能会限?Eclipse 工作台的可移植性,不过针对大多数流行操作系l的 SWT UL版本已经可用?/p>
Eclipse ?SWT 的用只会媄?Eclipse 自n的可UL性——?Eclipse 构徏的Q?Java 应用E序都不会受到媄响,除非它们使用 SWT 而不是?Swing/AWT?/p>
团队支持 帮助 Eclipse 的前?br /> 围绕 Eclipse 的开发正处于关键阶段。主要Y件工h供商都参与进来了Qƈ且开放源代码 Eclipse 插g目的数量正在与日俱增?/p>
可移植、可扩展、开放源代码的框架ƈ不是个新思想Q您会想?EmacsQ,但是׃它成熟、健壮和优雅的设计,Eclipse 带来了全新的动力。IBM 价?4000 万美元的世界UY件在开放源代码领域的发布,l业界带来了久违的震撹{?/p>
?2. ?Java 透视图中创徏新类
?3. Java ~辑器中?Hello c?/p>
?4. Quick Fix
?5. E序的输?/p>
?6. Debug 透视?/p>
?Merant PVCS
?Rational ClearCase
?Rational XDE (代替 Rose)
?Together WebSphere Studio Edition
?Macromedia Flash
?XMLBuddy
?7. Class Diagram ~辑?/p>
/** Person.java
* @author david
*/
public class Person {
private String name;
private Address address;
/**
* Returns the address.
* @return Address
*/
public Address getAddress() {
return address;
}
/**
* Returns the name.
* @return String
*/
public String getName() {
return name;
}
/**
* Sets the address.
* @param address The address to set
*/
public void setAddress(Address address) {
this.address = address;
}
/**
* Sets the name.
* @param name The name to set
*/
public void setName(String name) {
this.name = name;
}
}
?8. Person cd
?9. 兌
Eclipse q_是一个具有一l强大服务的框架Q这些服务支持插Ӟ比如 JDT 和插件开发环境(PDEQ。它由几个主要的部分构成Q^台运行库、工作区、工作台、团队支持和帮助?/p>
?10. Eclipse q_体系l构
q_q行库是内核Q它在启动时查已安装了哪些插Ӟq创建关于它们的注册表信息。ؓ降低启动旉和资源用,它在实际需要Q何插件时才加载该插g。除了内核外Q其他每样东襉K是作为插件来实现的?/p>
工作区是负责理用户资源的插件。这包括用户创徏的项目、那些项目中的文Ӟ以及文g变更和其他资源。工作区q负责通知其他插g关于资源变更的信息,比如文g创徏、删除或更改?
工作Cؓ Eclipse 提供用户界面。它是用标准窗口工具包QSWTQ和一个更高?APIQJFaceQ来构徏的;SWT ?Java ?Swing/AWT GUI API 的非标准替代者,JFace 则徏立在 SWT 基础上,提供用户界面lg?/p>
团队支持lg负责提供版本控制和配|管理支持。它Ҏ需要添加视图,以允许用户与所使用的Q何版本控制系l(如果有的话)交互。大多数插g都不需要与团队支持lg交互Q除非它们提供版本控制服务?/p>
帮助lgh?Eclipse q_本n相当的可扩展能力。与插g?Eclipse d功能相同Q帮助提供一个附加的Dl构Q允许工具以 HTML 文g的Ş式添加文档?/p>
W一?配置ActionServlet
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.appache.structs.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<uri-pattern>*.do</url-pattern>
</servlet-mapping>
注意:不管应用中包含多个子应?都只需配置一个ActionServlet,因ؓActionServlet支持多线E?目前的Structs框架只允许在应用中配|一个ActionServlet?br />
W二步:初始化参数对Servlet的运行环境进行初始化配置?br />
<servlet>
<servlet-name> action</servlet-name>
<servlet-class> org.appache.structs.ActionServlet </servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/structs-config.xml</param-value>
</init-param>
</servlet>
?-1. Struts1.1中用到的初始化参?br />
参数名 含义/默认?br /> config 以相对\径的方式指明Struts应用E序的配|文件位|。如不设|,则默认gؓ/WEB-INF/struts-config.xml?br /> config/sub1 以相对\径的方式指明子应用程序的配置文g位置Q一般来_很少用到子应用程序,在此不多描述?br /> debug 讄Servlet的debugU别Q控制日志记录的详细E度。默认ؓ0Q记录相Ҏ的日志信息?br /> detail 讄Digester的debugU别QDigester是Struts框架所使用的用来解析xml配置文g的一个框Ӟ通过该设|,可以查看不同详细{的解析日志。默认ؓ0Q记录相Ҏ的日志信息?br />
W三步:配置Ƣ迎清单
当客戯问Web应用Ӟ如果仅仅l出Web应用的Root URLQ没用指定具体的文g名,Web容器会自动调用Web应用的欢q文件?br />
<welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-fiel-list>
说明Q?lt;welcome-file-list>可以包含多个<welcome-file>子元素,首先查找W一?lt;welcome-file>文g?br />
׃<welcome-file-list>元素中不能配|Servlet映射Q因此不能直接把Structs的Action作ؓƢ迎文gQ可以采用一U变通的Ҏ来实现在Ƣ迎文g中调用Structs Action。首先,在Structs配置文g中ؓ被调用的Action创徏一个全局的{发项Q例如:
<global-forwards>
<forward name=”welcome?path=”HelloWord.do?>
</global-forwords>
创徏一个welcome.jsp的文?br />
最后在web.xml文g中把welcome.jsp文g配置为欢q文Ӟ代码如下Q?br /> <welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
</welcome-file-list>
W四步:配置错误处理
<error-page>
<error-code>404</error-code>
<location>/commom/404.jsp</location>
</error-page>
<error-page>
<error-code>505</error-code>
<location>/commom/505.jsp</location>
</error-page>
也可以ؓWeb容器捕获的Java异常配置<error-page>,需要设|?lt;exception-type>子元素,它用于指定Java异常cRWeb容器可能捕获如下异常Q?br />
RuntimeException或Error ServletException或它的子cRIOException或它的子c?br />
<error-page>
<exception-type>java.io.IOException</exception-type>
<location>/common/system_ioerror.jsp</location>
</error-page>
W五步:配置Structs标签?br />
使用客户化的标签库,要配|它?br />
<taglib>
<tag-uri>/WEB-INF/structs-html.tld<tag-uri>
<taglib-location>/WEB-INF/structs-html.tld</taglib-location>
</taglib>
<tag-uri>用于指定标签库的相对或者绝对URI地址QWeb应用Ҏq一URI来访问标{ֺ?br />
<taglib-location>指定标签描述文g在文件资源系l中的物理位|?br />
2.Structs配置文g
Structs框架在启动时会读入其配置文gQ根据它来创建和配置各种Structslg?br />
1<Structs-config>元素
<structs-config>元素是Structs配置文g的根元素Q?lt;structs-cofig>元素?个子元素。它的DTD定义如下Q?br />
<!ELEMENT structs-config(data-sources?,formbean?,global-exeception?,global-forward?,action-mapping,controller?,message-resources*,plug-in*)>
在Struts配置中,必须按照以上的DTD指定的先后顺序来配置<Structs-config>元素的各个子元素Q如果颠倒了q些元素的配|文件中的位|,在Structs应用启动时会生成错误?br />
<data-sources>元素
<data-sources>元素包含零个、一个或者多?lt;data-sources>子元素,<data-sources>用于配置特定的数据源Q它可以包含多个<set-property>子元素,用于讄数据源的各种属性?br /> 。。?br />
配置了数据源后,可以在ActioncM讉K数据源,在org.apache.structs.action.ActioncM定义了getDataSource(HttpRequrst)ҎQ它用于获取数据源对象的引用?br />
DataSource dataSource;
Connection connection;
dataSource =getDataSource(request);
connection=dataSource.getConnection();
也可以在配置文g中声明多个数据源Q此旉要ؓ每一个数据源分配唯一的key|通过改值来标识特定的数据源?br />
2<form-beans>元素
<form-beans>元素用来配置多个ActionForm BeanQ?lt;form-beans>包含多个<forom-bean>子元素,,每个<from-bean>包含多个属性,ClassName , name,type
<form-beans>
<form-bean name="HelloForm" type="hello.HelloForm"/>
</form-beans>
注意Q配|动态ActionForm BeanQ还必须配置<form-bean>元素?lt;form-property>元素?br />
<form-beans>
<form-bean name="HelloForm" type="hello.HelloForm"/>
<form-bean name="userForm" type="org.apache.structs.action.DynaAction">
<from-property name="firstname" type="java.lang.String"/>
<form-property name="secondname" type="java.lang.String">
<form-property name="age" type="java.Integer" initial="18">
</form-beans>
3<global-exception>元素
<global-exception>用于配置异常处理Q?lt;global-exception>元素可以包含零个或者多?lt;exception>元素?br />
<exception>元素用来讄java异常和异常处理类org.apache.structs.action,Exception Hander之间的映?br />
4<gloable-forwards>元素
<global-forwards>元素用来声明全局的{发关p,<global-forwards>有零个或多个<forward>元素l成?lt;forward>元素用于把一个逻辑映射到特定的URL
属性 描 q?br />
className ?lt;forward>元素对应的配|类Q默认ؓorg.apache.structs.action.ActionForWard
name 转发路径的逻辑名,此项时必ȝ
path 指定或者重定向的URI。此Ҏ必须的,必须以?”开?br />
redirect 此项是trueQ表C是执行重定向的****作,此项是falseӞ表示h转发?br />
<global-forwards>
<forward name="forward1" path="/Action1.do"/>
<forward name="forward1" path="/Action2.do"/>
</global-forwards>
如果jsp1.jsp把请求{发给Action1,可以使用以下代码Q?br />
<html:link forward=”forward1?gt;
或?lt;logic:forward name=”forward1?gt;
如果Action1的executeQ)Ҏ把请求{发给JSP2.jspQ可以用一下代码:
return(mapping.findForward(“forward2?)
5<action-mapping>元素
<action-mapping>元素包含零个或者多?lt;action>元素?lt;action>元素描述了从特定的请求\径到相应的Actioncȝ映射?br />
6<controller>元素
<controller>元素用于配置ActionServlet?br />
7< message-resources>元素
<message-resources>元素用于配置Resource BundleQResource Budle用于存放本地化消息文件?br />
Structs标签
HTML标签
标签名 描述
base 包装HTML的base元素
button 包装HTML?buttoncd的input元素
cancel 包装HTML cancel 按钮
checkbox 包装HTML checkbox cd的输入域
errors 有条件地昄一些error消息Q显CActionErrors信息
file 包装HTML文g上传输入?br /> form 定义HTML form 元素
frame 包装HTML frame 元素
hidden 包装HTML hidden 输入?br /> html 包装 HTML中的 html 元素
image 包装 "image"cd的输入域
img 包装HTML?img 元素
javascript 包装ҎValidatorPlugIn提供的校验规则所提供的javascript校验脚本
link 包装链?br /> messages 有条件地昄一些提CZ息,昄ActionMessages信息
multibox 包装多选输入框
option 包装一个选择输入?br /> options 包装一扚w择输入?br /> optionsCollection 包装一扚w择输入框集
password 包装密文输入?br /> radio 包装单选输入框
reset 包装“重|”功能的按钮
rewrite 包装一个URL
select 包装一个选择输入?br /> submit 包装一个提交按?br /> text 包装一个文本输入框
textarea 包装一个备注输入框
ActionForm
ActionForm 的要?br />
创徏一个ActionForm q不困难Q但是你的类必须W合一些要求:
ActionForm 必须扩展自org.apache.struts.ActionForm。基cActionForm 是不能实例化的?br />
ActionForm 必须为每个应该从h中收集的HTML控g定义一个公共属性?br />
(Struts 1.0 要求每个属性都要mutator 和accessor 。Struts 1.1 则没有如此严?
ActionFormq可能要W合一些可选的要求:
如果你要求ActionForm 在传递属性到Action之前校验它们Q你必d现validate
ҎQ?br />
如果惛_l装前初始化属性,必须实现reset , 它在ActionForm l装前被调用Q?br />
动态ActionForm
ActionForm 作ؓcd转换?br />
ActionForm的一个强制点是应该用String 和boolean属性。实际上Q这意味着属?br />
必须得从一U{换到另一U类型。大部分应用也需要一些属性,比如电话L或者数量,?br />
一U格式化的方式出现。核心Java 包提供一些工h做这U事情,但是要清楚地他们集
成到应用中仍然是一个挑战?br />
Struts 开发h员经常在ActionForm中包含helperҎQ来q行cd转换。helper Ҏ
可以有很多种实现方式Q这我们?.6U叙q?br />
5.2.6 ActionForm 作ؓ防火?br />
当请求提交时QActionServlet 使用一个自动组装机制来从请求参C讄h?br />
ActionForm属性。这让你可以通过控制哪个ActionForm 属性被暴露来控制哪个请求参?br />
是可接受的。这也意味着如果你的ActionForm 的粗心设计你可能失去控制哪个参数可以?br />
受的能力。ActionForm 一定不能包含看h像是一个JavaBean 属性,但不能从HTTP ?br />
求设|的属性方法?br />
5.3.4 ActionForm 可以嵌套其它bean
因ؓStruts 标签扩展和自动组装机刉支持点号语法来从ActionForm讉K其它
bean。这是一个方便的方式Q可以通过ActionForm来组装存在的bean。在JSP 面, 你可
以象q样引用一个嵌套的beanQ?br />
<html:text
propety="values.telephoneText"
size="14"
maxlength="14"/>
5.7.2 分发QDispatch Q?br />
Struts 开发h员通常使用同一个Action处理相关?***作。一个通常做法来选择****作是在HTML表单中用隐藏属性。BaseForm 的dispatch 属性也可用作这个目的:
public void setDispatch(String dispatch);
public String getDispatch();
Struts 配置提供q个U别嵌套的ActionForward:
Global Q全局Q?ActionForwardҎ个应用中的所有Action 对象均有效;
Local Q局部) ActionForward 则在ActionMapping 元素中定义。仅寚w些在q个
ActionMapping中调用的Action对象有效?br />
从Action 对象内部来看Qforward 通常像这h选择Q?br /> ActionForward forward = mapping.findForward("continue");
]]>
J2SE是Java2的标准版Q主要用于桌面应用Y件的~程Q?
J2ME主要应用于嵌入是pȝ开发,如手机和PDA的编E;
J2EE是Java2的企业版Q主要用于分布式的网l程序的开发,如电子商务网站和ERPpȝ?
先学习j2se
要学习j2eep先学习j2seQ刚开始学习j2se先徏议不要用IDEQ然后渐渐的q渡C用IDE开发,毕竟用它方便嘛。学习j2se推荐两本书,《java2核心技术一二卷》,《java~程思想》,《java模式》。其中《java~程思想》要研读Q精诅R这一D|间是基本功学习,旉会很长,也可能很短,q要看学习者自w水q定?
不要被IDEU缠
在学习java和j2eeq程中,你会遇到五花八门的IDEQ不要被他们qhQ学JAVA的时候,要学语言本n的东西,不要太在意IDE的附加功能,JAVA~程在不同IDE之间的{换是很容易的Q过于的在意IDE的功能反而容易耽误对语a本n的理解。目前流行的IDE有jbuilderQeclipse和eclipse的加强版WSAD。用好其中一个就可以了,推荐从eclipse入手j2ee。因为Jbuilder更适合于写j2seE序?
选择和学习服务器使用配置
当你有了j2se和IDE的经验时Q可以开始j2ee的学习了Qweb服务器:tomcatQ勿庸置疑,tomcat为学习web服务首选。而应用服务器目前主要有三个:jboss、weblogic、websphere。有很多目开始采用jbossQƈ且有大量的公司开始做websphere或weblogic向jboss应用服务器的ULQ节省成本)Q这里要说的是,学习tomcat和jboss我认为是首选,也是最Ҏ上手的。学习服务器使用配置最好去询问有经验的人(有条件的话)Q因Z们或怸句话p解决问题Q你自己上网摸烦可能要一两天Q我干q这U傻事)Q我们应该把主要旉攑֜学习原理和理ZQ一特定技术的使用永远代替不了一个h的知识和学问?
学习web知识
如果你是在做电子商务|站{时Q你可能要充当几个角Ԍq是你还要学习:
htmlQ可能要用到dreamwave{IDE?
javascriptQ学会简单的数据校验Q数据联动显C等{?
J2eeAPI学习
学习j2eeAPI和学习服务器应该是一个P代的q程?
先学习jsp和servlet~程Q这斚w的书很多Q我建立看oreilly公司的两本《jsp设计》和《java servlet~程》,oreilly出的书L那本优秀Q不得不佩服?
学习jdbc数据库编E,j2ee目大多都是MISpȝQ访问数据库是核心。这本应属于j2se学习中,q里拿出来强调一下?
学习jndi apiQ它和学习ejb可以l合h?
学习ejb apiQ推荐书《精通ejb?
l过上面的这些的学习Q大概可以对付一般的应用了?
有h说跟着sun公司的《j2ee tutorial》一路学下来Q当然也可以?
学习ejb设计模式和看代码Q最重要Q?
设计模式是练内功Q其重要性可以这么说吧,如果你不会用设计模式的话Q你写Z堆用了ejb的垃圾,又慢又是一堆bugQ其l果不如不用ejb实现Qejb不等于j2eeQ?
无论学习什么语aQ都应该看大量代码,你看的代码量不到一定数量,是学不好j2ee?
目前有很多开源的工程可以作ؓ教材Q?
jive论坛
petstore sun公司
dune sun公司
{等Q研M个,q把它用到自q工程中来?
J2ee其他学习
当你渐渐对j2ee了解C定深度时Q你要开始关注当前领域中的一些技术变化,J2ee是一块百家争鸣的领域Q大安在这里提q解决ҎQ例如structsQhiberateQofbiz{等Q学习这些东西要你的目和目标而定Q预先补充一下未不可,但不用涉及太深,毕竟学习原理和理论是最最重要的事?
目前常见j2eeAPI
JavaServer Pages(JSP)技?.2
Java Servlet技?.3
JDBC API 2.0
Java XML处理API(JAXP)1.1
Enterprise JavaBeans技?.0
Java消息服务(JMS)1.0
Java命名目录接口(JNDI)1.2
Java事务API(JTA) 1.0
JavaMail API 1.2
JavaBeansȀzL?JAF)1.0
J2EEq接器体pȝ?JCA)1.0
Java认证和授权服?JAAS)1.0
学习上面的某些API要以你的目而定Q了解所有他们M是有好处?
上面印证了大家说的一句话Qjava语言本n不难学,但是技术太多,所以学java很费劌Ӏ回想一下,基本上每个初学者,在刚学习java的时候可能都会问别hq么一句话Q你怎么知道的哪个方?api)在哪个包里的Q呵呵,无他Q唯手熟?