??xml version="1.0" encoding="utf-8" standalone="yes"?> q个E序我写的是两个ҎQ支持从命o行操作?br>例一Q?br>package org.stonecn.kernel; } 我们来看W二个例?/p>
例二Q?br>package org.stonecn.kernel; public class FileCopy2{ 同样的方式,两种实现Q这是我们所说的l果一P而过E也是千变万化?br>例二所涉及的包是我以前所没有接触到的?br>Ƣ迎朋友们来指正?/p>
每个E序员都会有一些由于经常被当作专业资料参阅而磨坏的书。下列书c应该是 Java 语言E序员的书架上必备的。书很贵Q所以我有意这份列表弄得很短,仅限于重要书c?/p> Thinking in Java (Bruce Eckel) Thinking in Java, 3rd edition QBruce Eckel; Prentice Hall PTRQ?002 q_ Effective Java: Programming Language GuideQJoshua Bloch; Addison-WesleyQ?001 q_ <a href=http://www.dearbook.com.cn/book/16377 target="_blank"><i>J2EE服务器高U编E?lt;/i></a> The Java Programming LanguageQKen ArnoldQJames GoslingQDavid Holmes; Addison-WesleyQ?000 q_ Concurrent Programming in Java: Design Principles and Patterns (Doug Lea) Concurrent Programming in Java: Design Principles and Patterns, 2nd editionQDoug Lea; Addison-WesleyQ?999 q_ Expert One-On-One J2EE Design and Development (Rod Johnson) Expert One-On-One J2EE Design and DevelopmentQRod JohnsonQ?br />WROX: J2EE 设计开发编E指?/i> Q魏 译,电子工业出版C,2003 q_ Refactoring (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts) Refactoring: Improving the Design of Existing CodeQMartin FowlerQKent BeckQJohn BrantQWilliam OpdykeQDon Roberts; Addison-WesleyQ?999 q_ Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) Design Patterns: Elements of Reusable Object Oriented SoftwareQErich GammaQRichard HelmQRalph JohnsonQJohn Vlissides; Addison-WesleyQ?997 q_ Patterns of Enterprise Application Architecture (Martin Fowler) Patterns of Enterprise Application ArchitectureQMartin Fowler; Addison-WesleyQ?002 q_ UML Distilled: A Brief Guide to the Standard Object Modeling LanguageQMartin Fowler; Addison-Wesley 2003 q_ Test-Driven Development: By Example (Kent Beck) Test-Driven Development: By ExampleQKent Beck; Addison-Wesley 2002 q_ The Pragmatic Programmer: From Journeyman to Master (Andy Hunt and Dave Thomas) The Pragmatic Programmer: From Journeyman to MasterQAndrew Hunt ?David Thomas; Addison-Wesley 1999 q_ Peopleware: Productive Projects and Teams (Tom DeMarco and Timothy Lister) Peopleware: Productive Projects and TeamsQTom DeMarcoQTimothy Lister; Dorset HouseQ?999 q_ Web 站点的数目浩如烟P如果您想要消化其中的内容Q穷毕生之力也难以全部访问。包?Java 语言某方面内容的详尽的网站列表会大得谱。下列站炚w是可靠、真实的?/p> Sun ?Java 语言站点 IBM ?developerWorks Apache Software Foundation Eclipse Eclipse 插g中心 ?Eclipse 插g JUnit.org TheServerSide.com Bruce Eckel's MindView, Inc. ONJava.com java.net C Java最初是在浏览器和客L机器中粉墨登场的。当Ӟ很多疑它是否适合做服务器端的开发。现在,随着对Java2q_企业?J2EE)W三Ҏ持的增多QJava被广泛接Uؓ开发企业服务器端解决Ҏ的首选^C一?/p>
J2EEq_׃整套服务(Services)、应用程序接?APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。在本文中将解释支撑J2EE?3U核心技术:JDBC,JNDI,EJBs,RMI,JSP,Javaservlets,XML,JMS,JavaIDL, JTS,JTA,JavaMail和JAFQ同时还描q在何时、何处需要用这些技术。当Ӟ我还要介l这些不同的技术之间是如何交互的。此外,Z让您更好地感受J2EE的真实应用,在WebLogic应用服务?来自BEA Systems公司的一U广为应用的产品环境下来介绍q些技术。不论对于WebLogic应用服务器和J2EE的新手,q是那些想了解J2EE能带来什么好处的目理者和pȝ分析员,怿本文一定很有参考h倹{?/p>
宏观印象:分布式结构和J2EE q去Q二层化应用--通常被称为client/server应用--是大家谈论的最多的。在很多情况下,服务器提供的惟一服务是数据库服务。在q种解决Ҏ中,客户端程序负责数据访问、实C务逻辑、用合适的样式昄l果、弹出预讄用户界面、接受用戯入等。client/serverl构通常在第一ơ部|的时候比较容易,但难于升U或改进Q而且l常Z某种专有的协议,通常是某U数据库协议。它使得重用业务逻辑和界面逻辑非常困难。更重要的是Q在Web时代Q二层化应用通常不能体现出很好的伸羃性,因而很N应Internet的要求?/p>
Sun设计J2EE的部分v因就是想解决二层化结构的~陷。于是,J2EE定义了一套标准来化N层企业应用的开发。它定义了一套标准化的组Ӟqؓq些lg提供了完整的服务。J2EEq自动ؓ应用E序处理了很多实现细节,如安全、多U程{?/p>
用J2EE开发N层应用包括将二层化结构中的不同层面切分成许多层。一个N层化应用A能够Z下的每种服务提供一个分开的层Q?/p>
׃J2EE建立在Java2q_标准?J2SE)的基上,所以具备了J2SE的所有优点和功能。包括“编写一ơ,到处可用”的可移植性、通过JDBC讉K数据库、同原有企业资源q行交互的CORBA技术,以及一个经q验证的安全模型。在q些基础上,J2EE又增加了对EJB(企业U?Javalg)、Javaservlets、Java服务器页?JSPs)和XML技术的支持?/p>
分布式结构与WebLogic应用服务?/strong> J2EE提供了一个框?-一套标准API--用于开发分布式l构的应用,q个框架的实际实现留l了W三方厂商。部分厂商只是专注于整个 J2EE架构中的的特定组Ӟ例如Apache的Tomcat提供了对JSP和servlets的支持,BEApȝ公司则通过其WebLogic应用服务器品ؓ整个J2EE规范提供了一个较为完整的实现?br /> WebLogic服务器已使徏立和部v伸羃性较好的分布式应用的q程大ؓ化。WebLogic和J2EE代你处理了大量常规的~程dQ包括提供事务服务、安全领域、可靠的消息、名字和目录服务、数据库讉K和连接池、线E池、负载^衡和定w处理{?/p>
通过以一U标准、易用的方式提供q些公共服务Q象WebLogic服务器这L产品造就了具有更好~性和可维护性的应用pȝQ其ؓ大量的用h供了增长的可用性?/p>
J2EE技?/strong> 在接下来的部分里Q我们将描述构成J2EE的各U技术,q且了解WebLogic服务器是如何在一个分布式应用中对它们q行支持的。最常用的J2EE技术应该是JDBC、JNDI、EJB、JSP和servletsQ对q些我们作更仔l的考察?/p>
Java Database Connectivity(JDBC) JDBCAPI以一U统一的方式来对各U各L数据库进行存取。和ODBC一PJDBC为开发h员隐藏了不同数据库的不同Ҏ。另外,׃JDBC建立在Java的基?因此q提供了数据库存取的q_独立性?/p>
JDBC定义?U不同的驱动E序Q现分述如下Q?/p>
在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的Q通过JDBC-ODBC桥,开发h员可以用JDBC来存取ODBC数据源。不的是,他需要在客户端安装ODBC驱动E序Q换句话_必须安装MicrosoftWindows的某个版本。用这一cd你需要牺牲JDBC的^台独立性。另外,ODBC驱动E序q需要具有客L的控制权限?/p>
JDBC本地驱动E序桥提供了一UJDBC接口Q它建立在本地数据库驱动E序的顶层,而不需要用ODBC。JDBC驱动E序对数据库的API从标准的JDBC调用转换为本地调用。用此cd需要牺牲JDBC的^台独立性,q要求在客户端安装一些本C码?/p>
JDBC|络桥驱动程序不再需要客L数据库驱动程序。它使用|络上的中间服务器来存取数据库。这U应用得以下技术的实现有了可能Q这些技术包括负载均衡、连接缓冲池和数据缓存等。由于第3U类型往往只需要相Ҏ的下蝲旉Q具有^台独立性,而且不需要在客户端安装ƈ取得控制权,所以很适合于Internet上的应用?/p>
W?U类型通过使用一个纯Java数据库驱动程序来执行数据库的直接讉K。此cd实际上在客户端实C2层结构。要在N-层结构中应用Q一个更好的做法是编写一个EJBQ让它包含存取代码ƈ提供一个对客户端具有数据库独立性的服务?/p>
WebLogic服务器ؓ一些通常的数据库提供了JDBC驱动E序Q包括Oracle,Sybase,MicrosoftSQLServer以及Informix。它也带有一UJDBC驱动E序用于CloudscapeQ这是一U纯Java的DBMSQWebLogic服务器中带有该数据库的评估版本?br /> 以下让我们看一个JDBC实例Q在q个例子中我们假定你已经在Cloudscape中徏立了一个PhoneBook数据库,q且包含一个表Q名?CONTACT_TABLEQ它带有2个字D:NAME和PHONE。开始的时候先装蝲CloudscapeJDBCdriverQƈh drivermanager得到一个对PhoneBookCloudscape数据库的q接。通过q一q接Q我们可以构造一个Statement对象q用它来执行一个简单的SQL查询。最后,用@环来遍历l果集的所有数据,q用标准输出NAME和PHONE字段的内容进行输出?/p>
OK。接着来看一看JDBC是如何在企业应用中的q行使用?/p>
JDBC在企业应用中的应用。以上实例其实是很基本的Q可能有些微不道。它假定了一?层结构。在一个多层的企业U应用中Q更大的可能是在客户端和一个EJBq行通信Q该EJB徏立数据库q接。ؓ了实现和改进可~性和pȝ性能Q?WebLogic服务器提供了对连接缓冲池connection pool的支持?/p>
Connection pool减少了徏立和释放数据库连接的消耗。在pȝ启动以后卛_建立q样的缓冲池Q此后如故再有对数据库的hQWebLogic服务器可以很单地从缓冲池中取出数据。数据缓冲池可以在WebLogic服务器的 weblogic.properties 文g中进行定义?/p>
在企业应用的另一个常见的数据库特性是事务处理。事务是一l申明statementQ它们必d为同一个statement来处理以保证数据完整性。缺省情况下JDBC使用 auto-commit 事务模式。这可以通过使用ConnectioncȝsetAutoCommit() Ҏ来实现。现在已l对JDBC有了一些认识,下面该{向JNDI了?/p>
Java Naming and Directory Interface (JNDI) JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业U的资源如DNS和LDAPQ本地文件系l,后者在应用服务器中的对象。在JNDI 中,在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来_它可以通过使用 InitialContext cL得到其第一个context:
应用可以通过q个初始化的contextl有q个目录树来定位它所需要的资源或对象。例如,假设你在Weblogic服务器中展开了一个EJBq将home接口l定到名?myApp.myEJB Q那么该EJB的某个客户在取得一个初始化context以后Q可以通过以下语句定位home接口Q?/p>
在这个例子中Q一旦你有了对被h对象的参考,EJB的home接口可以在它上面调用方法。我们将在下面的"Enterprise Java Beans"章节中做更多的介l?/p>
以上关于JNDI的讨论只是冰׃一角而已。如果要更进一步地在context中查扑֯象,JNDI也提供了一些方法来q行以下操作Q将一个对象插入或l定到context。这在你展开一个EJB的时候是很有效的。从context中移d象。列出context中的所有对象。创建或删除子一U的context。接下来Q要开始关注EJB了?/p>
Enterprise Java Beans (EJB) J2EE技术之所以赢得某体广泛重视的原因之一是EJB。它们提供了一个框架来开发和实施分布式商务逻辑Q由此很显著地简化了h可~性和高度复杂的企业应用的开发。EJB规范定义了EJBlg在何时如何与它们的容器进行交互作用。容器负责提供公用的服务Q例如目录服务、事务管理、安全性、资源缓冲池以及定w性?/p>
EJB规范定义了三U基本的beancd: 管有以上的区别Q所有的EJBq是有许多的共同之处。它们都处理homeinterface。它定义了一个客L是如何创Z消亡EJB的。可以在bean中对定义了客LҎ的远E接口进行调?beancd执行了主要的商务逻辑。描qEJB的开发已l超Z本文的范围。但是,如果一?EJB已经被开发了或者从W三方进行了购买Q它必d应用服务器中q行发布。WebLogic Server 5.1带有一个EJB Deployer Tool来协助处理EJB的发布。当你用EJB Deployer Tool的时候,你要定义客户端所用的JNDI名字来定位EJB。Deployer Tool生成wrappercL处理和容器的通信以及在一个jar文g中把被请求的Javacȝ定在一赗?/p>
一旦EJB被发布,客户端就可以使用它的JNDI名字来定位EJB。首先,它必dC个到home接口的reference。然后,客户端可以用该接口Q调用一个create() Ҏ来得到服务器上运行的某个bean实例的句?最后,客户端可以用该句柄在bean中调用方法。了?EJB后,让我们再来看JSP?br /> JavaServer Pages (JSPs) 可能已经有许多h已经熟悉Microsoft的Active Server Pages(ASP)技术了。JSP和ASP相对应的Q但更具有^台对立性。他们被设计用以帮助Web内容开发h员创建动态网,q且只需要相对较的代码?即Web设计师不懂得如何~程也可以用JSPQ因为JSP应用是很方便的?JSP面由HTML代码和嵌入其中的Java代码所l成。服务器在页面被客户端所h以后对这些Java代码q行处理Q然后将生成的HTML面q回l客L的浏览器?/p>
下面来看一个JSP的简单实例。它只显CZ服务器的当前日期和时间。虽Ӟ对语法的具体解释已经出了本文的范围Q但我们q是可以很直观地看到QJava代码被放?W号的中_而Java的表辑ּ则放在符号之间?/p>
下面? Java servlets Java Servlets Servlet提供的功能大多与JSPcMQ不q实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码Q?servlets全部由Java写成q且生成HTML。Servlet是一U小型的JavaE序Q它扩展了Web服务器的功能。作ZU服务器端的应用Q当被请求时开始执行,q和CGI Perl脚本很相伹{Servlets和CGI脚本的一个很大的区别是:每一个CGI在开始的时候都要求开始一个新的进E?-- 而servlets是在servlet引擎中以分离的线E来q行的。因此servlets在可伸羃性上提供了很好的改进?/p>
在开发servlets的时候,您常帔R要扩展javax.servlet.http.HttpServletc,q且override一些它的方法,其中包括Q?/p>
其它的方法还包括处理不同cd的HTTPh -- 可以参考HttpServlet API文。以上描q的是标准J2EE Servlet API的各U方法。WebLogic服务器提供了一个该API完整的实现途径。一旦你开发了一个servletQ你可以在 weblogic.properties 中加以注册ƈ由此可以在WebLogic服务器中对它q行配置?/p>
通过Java servlets,我们已经到达了J2EE主要技术的末尾了。但J2EE所提供的ƈ不止于这些。下面的D落中我们将要地看一下现存的一些技术,包括RMI,Java IDL和CORBA, JTA, 以及XMLQ等{?br /> Remote Method Invocation (RMI) 正如其名字所表示的那PRMI协议是在q程对象上调用一些方法。它使用了连l序列方式在客户端和服务器端传递数据。RMI是一U被EJB使用的更下层的协议?/p>
Java IDL/CORBA 在Java IDL的支持下Q开发h员可以将Java和CORBA集成在一赗?他们可以创徏Java对象q之可在CORBA ORB中展开, 或者他们还可以创徏Javacdƈ作ؓ和其它ORB一起展开的CORBA对象的客戗后一U方法提供了另外一U途径Q通过它Java可以被用于将你的新的应用和legacypȝ盔R成?/p>
Java Transaction Architecture (JTA)/Java Transaction Service (JTS) JTA定义了一U标准的APIQ应用系l由此可以存取各U事务监控。JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务理器是在高层支持Java Transaction API (JTA)规范Qƈ且在较底层实现OMG OTS specification的Java映像。JTS事务理器ؓ应用服务器、资源管理器、独立的应用以及通信资源理器提供了事务服务?/p>
JavaMail and JavaBeans Activation Framework JavaMail是用于存取邮件服务器的APIQ它提供了一套邮件服务器的抽象类。仅支持SMTP服务器,也支持IMAP服务器?JavaMail利用JavaBeans Activation Framework (JAF)来处理MIME-~码的邮仉件。MIME的字节流可以被{换成Java对象Q或者{换自Java对象。由此大多数应用都可以不需要直接?JAF?/p>
Java Messaging Service (JMS) JMS是用于和面向消息的中间g怺通信的应用程序接?API)。它既支持点对点的域Q有支持发布/订阅 (publish/subscribe)cd的域Qƈ且提供对下列cd的支持:l认可的消息传?事务型消息的传递,一致性消息和h持久性的订阅者支持。JMSq提供了另一U方式来Ҏ的应用与legacy backendpȝ盔R成?/p>
Extensible Markup Language (XML) XML是一U可以用来定义其它标记语a的语a。它被用来在不同的商务过E中׃n数据。XML的发展和Java是相互独立的Q但是,它和Java h的相同目标正是^台独立性。通过Java和XML的组合,您可以得C个完的hq_独立性的解决Ҏ。目前正有许多不同的公司在ؓJava?XML的组合而努力。如果要了解更多的这斚w的信息,可以讉KSun的Java-XML面Q或者IBM developerWorks的XML Zone?/p>
选择对应的Solaris版本Q目前需要安装的版本是Solaris 10 SPARC 64-bit
2 解压MySQL
转到下蝲目录Q目前本机器攑֜ /u02/mysqltemp 目录?br />
#gunzip -d mysql-5.1.49-solaris10-sparc-64bit.pkg.gz
3 创徏mysql 的用L和用?q指定目?br />
#groupadd mysql
#useradd -G mysql mysql
Q=Q=
mkdir /export/home/mysql
chgrp mysql /export/home/mysql
chown mysql /export/home/mysql
usermod -d /export/home/mysql mysql
Q=Q=
如果觉得不需要指定目录,可以个略q创建步骤?br />
4 使用pkgadd 安装MySQl ?br />
#pkgadd -d mysql-5.1.49-solaris10-sparc-64bit.pkg
安装后的MySQL 位于 /opt/mysql/mysql 目录?br />
如果不用此文件可以略q此步骤?br />
4.1 建立目录q接
#cd /usr/local
#ln -s /opt/mysql/mysql/mysql
如果不需要,可以略过此步骤?br />
5 在目?etc下创建mysql.cnf 文gQ内如如下:
[mysqld]
basedir=/opt/mysql/mysql
datadir=/opt/mysql/mysql/data
6 q行MySQL 的post-install 文gQ创建数据库 repository 或者叫初始化MySQL
#cd /opt/mysql/mysql
#./scripts/mysql_install_db --defaults-file=/etc/mysql.cnf --user=mysql
或者用:
#./scripts/mysql_install_db --user=mysql
7 启动MySQL
#cd /opt/mysql/mysql
#./bin/mysql_safe -defaults-file=/etc/mysql.cnf -user=mysql
也可以用如下的Ҏ启动MySQL
#/etc/init.d/mysql start
8 更改MySQL root用户的口?br />
#/opt/mysql/mysql/bin/mysqladmin -u root password 'new-password'
#/opt/mysql/mysql/bin/mysqladmin -u root -h 机器名称 password 'new-password'
或者登录MySQL 之后用如下的Ҏ更改Q?br />
update user set password=PASSWORD('root') where user='root';
9 dMySQL 命o
#mysql -p
输入新的密码Q?br />
或者用如下Ҏd
mysql -u root mysql
10 停止MySQL
#/etc/init.d/mysql stop
重大修改Q占据霸权地位的3层和4层应用模型,重量U运行时runtimeq_Q和l典的面向服务的架构已经d了近十年Q现在几乎被四分五裂QY仉域出C一pd新的方式来设计架构Y件?/strong>
主要变化是,架构师面Ҏ的应用需求,比如可以重复使用的^収ͼ开放APIQ可以即时支持全球分布,处理数百TB量数据Q以及数以千万用L?
战的时候,在寻找新的解军_法。这些创新尤其在今天最大的pȝ上得到验证,其运行面对独特的挑战Q规模,性能Q或者特性设|。这些Y件的q步Q跨q日常Y
Ӟ企业pȝQ到互联|应用,新的Ud讑֤和新兴的C会化网l应用?
应用架构的支q似关pd数据库模型,单块q行时run-timesQ和定的行为,已经被非关系型系l,云计,和新的以拉式为基的pull-based pȝ所挑战Q一致性和数据完整性的重要性有时让位于正常q行旉和效率?
让我们不要忘记web 2.0ҎQ和在线应用和企业架构的设计模式已经来稳定。社会化架构Q群众外包crowdsourcingQ开放供应链open supply chains 已经在最新的软gpȝ众成范,速度比预期快的多?
另外QSaaS的迅速发展,越了传l商业应用的领域Q大q度q入云计领域;Ud|络的普及,无线技术的发展Q虚拟化和便力的增强Q让存储和应用发生了巨大的变化。Web 2.0|络提供的工具和协作性也进入主的企业应用Q提供富有创意的沟通交互方式?br />
1。云计算Q这个概늛前非常火爆,但是概念不是那么清楚Q涉及面从常规的L到^C为服务Platform-as-a-service (PaaS)。我在DZNET上详l定义了云计,q对厂商q行了分c,云计就是下一代的操作pȝ之战Q?/strong>
2。非关系型数据库QTony
Bain写一文?#8220;关系型数据库已死Q?#8221;虽然得出q个l论可能为时q早Q但是很多数据库应用一开始更改用非关系型数据库Q尤其是文本的资源ؓ中心的存
储需求。新数据库,比如QCouchDBQAmazon SimpleDBQDrizzleQ来自MySQLQ,MongoQ以及Scalaris
现在来成熟?
3。下一代分布式计算QJavaEye新闻以前曾报道过“Yahoo! 启动了世界上最大的Hadoop生应用”Q分布式计算能够处理大量的超乎想象的数据能力。同时商业Y件GridGain 和开源的 Disco 也在分布式运领域发展强劌Ӏ?
4。Web-Oriented Architecture (WOA)QREST架构应用更加q泛Q在此基上包括数据代表,安全Q完_l合和分布,q样的应用更加自Ӟ富有效率的徏讑֟于互联网的应用?
5。MashupsQmashup是糅合,是当今网l上新出现的一U网l现?两U以上用公共或者私有数
据库的web应用Q加在一P形成一个整合应用。一般用源应用的api接口Q或者是一些rss输出Q含atomQ作为内ҎQ合q的web应用?
Mashup概念已经融入SOAQؓ企业架构带来价倹{我认ؓMashup是下一个最主要的新应用开发模?
6。Open Supply Chains via APIsQ有来多的企业开始开放APIQ将填^传统IT应用和互联网应用之间的`沟。通过提供API开放供应链pȝ?
7。动态语aQ动态语acMJavascript, Perl, ErlangQ以及动态语a框架RailsQCakePHPQGrails{都发展非常q速?
8。Social computingQ通过C会化开发的软g比非C会化开发的软g更加优秀Q比如很多开源项目,Wiki{?
9Q群众外包crowdsourcing ?q生架构 peer production architecturesQ很适合部vC联网的业务模式,通过互联|聚合群体的智慧和力量?
10。新的应用模?/strong>Q随着Facebook和下一代移动应用的出现Qwidget行QY件原子化势预示者微型应用的时代必将到来。不同的微型应用嵌入到其他应用中,能够快速^行扩展?br />
原文查看Q?a target="_blank">http://hinchcliffe.org/archive/2009/03/17/16712.aspx
import java.io.*;
public class FileCopy {
/**
* 试E序
*/
public static void main(String[] args){
if(args.length!=2)
System.err.println("Usage: java FileCopy<source><destination>");
else{
try{
copy(args[0],args[1]);
}
catch(IOException e){
System.err.println(e.getMessage());
}
}
}
public static void copy(String from_name,String to_name)throws IOException{
File from_file=new File(from_name);
File to_file=new File(to_name);
if(!from_file.exists())
abort("no such source file:"+from_name);
if(!from_file.isFile())
abort("can't copy directory:"+from_name);
if(!from_file.canRead())
abort("source file is unreadable:"+from_name);
/**
* 如果目标是一个目录,则用源文g名作为目标文件名
*/
if(to_file.isDirectory())
to_file=new File(to_file,from_file.getName());
/**
* 如果目标文g存在Q则保它是可写?q且在覆盖之前先询问
* 如果目标文g不存在,则确保存在目录,而且是可写的?br> */
// 此处支持命o行,如果不用可以注视掉?nbsp; sart
if(to_file.exists()){
abort("destination file is unwriteable:"+to_name);
//询问是否覆盖
System.out.print("Overwrite existing file:"+to_file.getName()+"?(Y/N):");
//得到用户响应
System.out.flush();
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String response=in.readLine();
//查响应,如果不是yes(未做认),则终止复?br> if(!response.equals("Y") && !response.equals("y"))
abort("existing file was not overwritten.");
}
else{
/**如果文g不存在,查是否存在目录且是否可写
* 如果getParent()q回nullQ则目录是当前dirQ?br> * 因此查找user.dirpȝҎ,以得出它是什?br> */
String parent=to_file.getParent(); //目标目录
if(parent == null)
parent=System.getProperty("user.dir");
File dir=new File(parent);
if(!dir.exists())
abort("destination directory doesn't exist:"+parent);
if(dir.isFile())
abort("destination is not a directory:"+parent);
if(!dir.canWrite())
abort("destination directory is unwriteable:"+parent);
}
//到此l束 end
/**
* 如果走到q了Q则一切正常?br> * 因此可以复制文gQ一ơ复制一个字节缓冲区
*/
FileInputStream from=null; //从源d的流
FileOutputStream to=null; //写至目标的流
try{
from=new FileInputStream(from_file); //创徏输入?br> to=new FileOutputStream(to_file); //创徏输出?br> byte[] buffer=new byte[4096];
int bytes_read;
/**
* 一块字节读入缓冲区Q然后将其写?br> * 如果循环Q知道达到文件结?read()q回-1)
* 注意Q在此while循环中结合了赋值和比较
*/
while((bytes_read=from.read(buffer))!=-1) //读,直到EOF
to.write(buffer,0,bytes_read); //?br> }
finally{
if(from!=null)
try{
from.close();
}
catch(IOException e){
;
}
if(to!=null)
try{
to.close();
}
catch(IOException e){;}
}
}
/**
* q是抛出异常的一个便利方?br> */
private static void abort(String msg)throws IOException{
throw new IOException("FileCopy:"+msg);
}
q个E序的好处是一个安全的。因为有一个静态的copyҎ。其他程序也可以使用此方法来复制文g
import java.io.*;
import java.nio.channels.*;
public static void main(String[] args){
FileInputStream fin=null; //两个文g的流
FileOutputStream fout=null; //q些要在finally块中关闭
try{
//打开输入文g的一个流Qƈ从中得到一个通道
fin=new FileInputStream(args[0]);
FileChannel in=fin.getChannel();
//下面得到输出通道
WritableByteChannel out;
//如果有第二个文g?br> if(args.length>1){
fout=new FileOutputStream(args[1]);
out=fout.getChannel();
}
else{
//没有目标文g?br> out=Channels.newChannel(System.out); //包装stdout?br> }
//查询输入文g的大?br> long numbytes=in.size();
/**
*采用扚w传输的方式将所有字节从一个通道传输到另一个通道
*q是fileChannel通道的一个特D特?br> *参见FileChannel.transferForm()
*/
in.transferTo(0,numbytes,out);
}
catch(IOException e){
System.out.println(e);
}
finally{
try{
if(fin!=null) fin.close();
if(fout!=null) fout.close();
}
catch(IOException e){
}
}
}
}
而这个程序将其第一个参C指定的文件复制到W二个参数所指定的文件中?br>如果没有W二个参数则复制到标准输出?/p>
Java ~程思想Q第3?/i> Q陈昊鹏 {译; 机械工业出版C,2005 q_
Eckel 的书对于学习如何?Java 语言环境中用好面向对象技术极其实用。书中大量的代码样例解释了他所介绍的概c文字出自一个ƈ不认?Java 技术L正确{案的hQ所以相当地实用。Eckel h多种语言的大量经验,q有用面向对象方式进行思考的扎实技能。本书将q些技能放到实用的 Java 语言环境中。他q在写一本新书,名ؓ Thinking in Enterprise Java?/p>
Effective Java 中文?/i> Q潘爱民 ? 机械工业出版C,2003 q_
本书是理解优U Java E序设计原则的最佳书c。大多数材料从其他的 “学?Java ?的书中根本找不到。例如,Bloch 书中关于覆盖 equals()
q一章是我读q的最好的参考资料之一。他也在书中包括了很实用的徏议:用接口替代抽象类和灵zM用异常。Bloch ?Sun 公司 Java q_库的架构师,所以他透彻C解这门语a。事实上Q他~写了该语言中大量有用的库。本书必读!
Java Examples in a NutshellQ()弗拉Ux 著)
<a href=http://www.dearbook.com.cn/book/29570target="_blank"><i>
Java 实例技术手?/font></i></a>(林剑Q王宇飞 ?site>中国电力出版C?/font> 2005q?
作者精心打造了q样一本实战型Java图书Q全书都围绕着真实世界Java~程实例展开Q?br />你将从中L多多。如果你更們于“通过例子”来学习Q那么这本书正是你的首选?br />全新的第三版늛了Java 1Q?Qƈ收入?93个完整的实战CZQ?br />其中包括过21900行认真编写ƈ作了详尽注释的Java代码Q在此涉?0个不同的客户端和服务器端 API?br />有关XML和servlet的章节已l重写,以涵盖相应规范的最新版本,
q展C对于Java 1Q?的最佛_c书中还增加和更C一些实例,以展C其他一些新的JavaҎ和API?br />
Q闻道工作室)
本书主要讲解了开发者如何用J2EE体系l构为各事务lg~写关键逻辑。通过对Java servlet、JavaServer面及EJB技术的理解Q本书示例了如何设计和构建安全且可扩展的Java n层应用。内容包括:如何使用JSP面分割事务和表C逻辑Q如何用EJB创徏可扩展的应用Q及如何使用CORBA、XML和Java Message Service与其他系l集成?br />
The Java Programming Language (Ken Arnold, James Gosling, David Holmes)
Java ~程语言Q第 3 版) Q虞万荣 {译Q中国电力出版社Q?003 q_
q也许是能弄到的最好的 Java 入门ȝ。它q不是一个标准规范,而是一本介l每门语aҎ的可读书籍。这本书在严谨性和教育性方面权衡得很好Q能够让懂编E的速被 Java 语言Q和其丰富的cdQ所吸引?/p>
Java q发~程—设计原则与模式Q第二版Q?/i> Qn?{译Q中国电力出版社Q?004 q_
不是每个开发h员都需要如此细致地了解q发性,也不是每个工E师都能辑ֈ本书的水准,但却没有比本书更好的关于q发性编E的概述了。如果您Ҏ感兴,请从q里开始。Lea ?SUNY 的一名专业程序员Q他的和q发性有关的作品和想法都包含在了 JDK 5.0 规范Q引?JSR166Q中Q所以您大可攑ֿQ他所说的关于有效使用 Java 语言的徏议是值得一听的。他是一个很善于沟通的人?/p>
对于刚接?J2EE 的h来说Q这是唯一的一本如实反映这Ҏ术的书。本书收录了多年的成功经验和p|l验Q不同于其他许多作者,Johnson 乐于失败的l验公诸于众。J2EE 常常都被q度使用。Johnson 的书能帮您避免这一炏V?
重构Q改善既有代码的设计Q中文版Q?/i> Q侯?{译Q中国电力出版社 Q?003 q_
Fowler 写了几本现已出版的最行的编E书Q包?Analysis Patterns。他的关?i>重构 的书是这一主题的基本书c。重构代码是被程序员忽略的训l,但却是程序员最直观的想法。重构是在不改变代码l果的前提下改进现有代码的设计。这是保持代码整z的最x式,用这U方法设计的代码L很容易修攏V什么时候进行重构呢Q当代码“散发出味道”时。Fowler 的书里满?Java 语言代码的例子。许?Java 语言集成开发环境(IDEQ(包括?IBM ?EclipseQ都?Fowler 的重构包含了q去Q每一个都使用他的重构名命名,所以熟悉如extract method {重构方法还是很值得的?/p>
设计模式Q可复用面向对象软g的基 Q李英军 {译Q机械工业出版社 Q?005 q_
q是一本在专业E序员圈子里更ؓ有名的书Q基于作者共同的l号Q这本书被认为是 “四人帮QGOFQ之书”。模式是思考和解决普通编E问题时可以重用的方式。学习模式是一门学U。用好模式Q或知道什么时?i>?/i> 使用模式Q是一Ҏ能。忽略模式则是错误的。书中所有的例子都以 C++ 表示Q但 Java 语言是从那里诞生的,?Java 语言E序员由此联pd如何?Java 语言中实现这些模式相对简单一些。熟悉模式ƈ了解如何使用好模式ɾ~程更加单。这使得和其他程序员交流也更单,因ؓ在针寚w用问题的通用解决Ҏ中,模式是描q解x案中彼此协作的大量相关编E概늚快捷方式。一些更为通用的方式,?i>工厂Ҏ 则是普便存在的,甚至存在?Java 语言本n。关于明Z用模式的q个主题Q也可以阅读 Joshua Kerievsky ?Refactoring to PatternsQ该书称可以让代码来告诉您何时实现模式?/p>
企业应用架构模式 Q王怀?{译Q机械工业出版社 Q?004 q_
比v型、一ơ性项目来_企业开发当然代表了更大的挑战。那q不意味着企业开发带来的所有挑战都是新挑战。事实上有些时候,q项开?i>已经 是以前完成过的了。Fowler 做了很多个这L目。他的书提到了一些通用解决ҎQƈ提供了关于用、折中和可选方案的指导。Fowler 在书中包含了一些熟悉的模式Q如模型视图控制器(MVCQ,他也提供了一些您也许不了解的模式Q如处理 Web 站点上特定页面请求或行ؓh?Page Controller 模式。正如您对待大多数模式一P一旦您读过许多模式Q您׃认ؓ “我已经知道那个模式了?。也许是q样Q但有一个用来引用模式的通用表达方式q是很有帮助的。在有多个组Ӟ׃同h开发)的大型项目中Q该cd用是一很好的帮助?/p>
UML_aQ标准对象语a明指南(W?版) Q徐家福 译,清华大学出版C?Q?005 q_
对于专业的程序员来说QUML 是一门很重要的通用可视化沟通语aQ但是它被过度用和草率地滥用了。您无需对?UML 沟通了解太多。Martin ?UML 的提gؓ您提供了最核心的东ѝ事实上Q前后的页提供了常规基上可能用到的所有东ѝ该书中 UML 例子的代码都?Java 代码?/p>
试驱动开发(中文版) Q崔?译,中国电力出版C?Q?004 q_
试优先~程ɾ~程发生革命性变化,能助您成为更好的E序员。在写代码之前编写测试开始很难,但却是一威力强大的技能。通过优先~写试Q可使代码更加简单,q确保从一开始它p工作QBeck 实践着他提倡的试优先Q与人合写了 JUnitQ这?Java 语言最行的测试框Ӟ。Beck 的书是权威的参考资料,扩展了的 Money 例子也用 Java 语言写成。Beck 详述了如何用试优先q行 思?/b>Q这也许是许多程序员首先遇到的障)?/p>
E序员修g道——从工C?Q马l达 译,电子工业出版C?Q?004 q_
做一个纯_的面向对象开发h员有其优势所在。在当今复杂的社会中Q作?Java 语言开发h员,为完成Q务常要妥协。Hunt ?Thomas 探讨了如何不真正重要的东西妥协掉而完成Q务。这不是一本关?Java 语言的书Q而是 Java 语言开发h员重要的思想ȝ。例如,我认为没从“要解决问题Q而不是推卸责仠Z这句忠a中受益的E序员,不能像个自豪的艺术家一样在他的C上签上大名?/p>
ZgQ第2版) QUMLChina 译l?译,清华大学出版C?Q?003 q_
q䆾列表中的其他所有书c都臛_和技术有些相兟뀂这本书却不是。在所有技术行话和首字母羃略词的vz中Q有时Y件开发h员和l理们会忘记Q是?/i> 刉了软g。DeMarco ?Lister 向我们提醒了q一事实Q也向我们提醒了形成q一区别的原因。这不是一本关于一门特定编E语a的书c,但却是每?Java 语言E序员都应该ȝ书。关?“篏ȝ序员如何让经理们适得其反?q有许多其他的好书,但这是最好的一本?br />
q是 Sun ?Java 语言ȝ。作?Java 语言开发h员,您会发现自己频繁地访问此站点。下列链接特别重要,特别是对新入行的 Java 语言开发h员:
New to Java Center
New to Java Center 存放了许多@序渐q的 Java 技术资源链接。如果您刚接触这门语aQ这是一个好的v炏V?
Java Tutorial
q里有大名鼎鼎的 Java TutorialQ以及关?Java 语言各个斚wQ例?CollectionQ的其他教程?
推销自己也许有些厚脸皮,?developerWorks 是一巨大的资源Q收录了大量 Java 语言工具和技术的教程和文章。其内容从初学者指南到学习q门语言到高Uƈ发性技术。可以根据主题搜索内容,然后Ҏcd览?/p>
Apache 站点是许多可重用库(通用领域Q和工具的主,q些库和工具帮助 Java 开发h员进行开发。这里的内容全都是开放源码,所以尽下载想要的吧!许多极其行?Java 语言库和工具Q如 Struts、Ant ?TomcatQ都始于 Apache 目。Jakarta 专区汇聚了大多数新兴?Java 语言材料?/p>
有几个好?Java 语言集成开发环境(IDEQ。EclipseQ来?IBMQ是最新的 IDE 之一Q它很快成ؓ Java 语言开发的首要 IDE。它完全是开源的Q这意味着它是免费的。该站包含了学习如何有效使用 Eclipse 的各U参考资料。这里还有关?Standard Widget ToolkitQSWTQ的信息QSWT 是相对于 Swing 来说更加轻量U的选择?/p>
Eclipse Z插g架构。事实上Q插件是 Eclipse ?Java 语言开发组件。但有差不多上千个插Ӟ?Web 开发的插g到在 Eclipse 环境中玩游戏的插件。这两个站点分类列出了大多数插gQ可以进行搜索。它们是很棒的资源。如果您惛_ Eclipse 开发环境中弄点C西,q运的话有某个插件可能已l实玎ͼ从这两个站点能找到想要的插g。这两个站点都允许评论插Ӟq样您就可以知道哪些插g好,哪些值得一试?/p>
Junit ?Java 语言中一个基本的单元试框架。该站点包含?Junit 最新最的版本Q外加大量有x试(Java 语言或者其他语a的)各个层面上(针对桌面应用E序、Web 应用E序、J2EE 应用E序{)的其他资源。如果您x试资源Q这里就是最佌v炏V?
如果您要(或将?从事服务器端 Java 语言的开发,此站Ҏ一处D重的资源。您可以到这里找到有?JBoss、J2EE、LDAP、Struts 和大量其他主题的文章Qƈ且都是完全可索的。这些文章不仅仅是简单描q?Java 语言的特征或者支持的库。它们更q一步地描述了库的新奇用法(如?Jakarta Velocity 作ؓ规则引擎Q而不是模板引擎)。它们也提供了有?Java 语言现状的连l评论(当前的一文章是?Tim Bray 所写的 Java is boring Q。该站点更好的通用功能之一是对 Java 语言工具和品(应用服务器等Q的矩阵式比较?
Eckel 写了几本 “用 …?q行思考?的书Q内容关?Java 语言、Python ?C++ Q当我学?Java 语言Ӟ他的 Thinking in Java Ҏ其有帮助。它很实用ƈ切中要害Q在“在 Java 语言环境中如何面向对象思考”方面具有卓识。您可以从此站点免费下蝲他所有书c的电子版。他也写了许多好文章Qƈ且他把这些文章的链接都放Cq里Q包括关?Jython、Java ?.NET 比较{内容的文章Q?/p>
O'Reilley 历年来出版了一些有关编E语a和工L优秀书籍。他们的专注?Java 语言的网站也不错。它有些有关各种 Java 语言工具Q如 JDOM ?HibernateQ、Java q_Q如 J2SE ?J2EEQ不同领域不同部分的文章。全部都可以被检索到。他们有优秀的文章和教程。该站点按主题排列。例如有 Java ?XML、Java Security、Wireless Java ?Java SysAdmin。该站点也有?O'Reilley Learning Lab 的链接,在那里您能获得在U参考资料(Java 语言相关和其他的Q。那些不是免费的Q但是许多都面向大学认证。因此您可以以一U很方便的方式来学习技能,q得C些认证?
java.net C有多个“社区”,有特定于主题的论坛和文章。例?Java Desktop C有各cM Java 语言桌面开发相关的资料。Java Patterns C作ؓ一个门P也许Ҏ?Java 语言的模式资源相当感兴趣。还有一?Java User Groups (JUG) CQ在那里能找到有兛_建、加入和理一?JUG 的信息?
l束语:本文是参?a >http://www-128.ibm.com/developerworks 的文章整理的?br />以后ql收集,因ؓ毕竟不是所有的文章都是最全的Q这个我想不然Q只能说看到好的在l添加?br />在本文中解释支撑J2EE?3U核心技术:JDBC,JNDI,EJBs,RMI,JSP,Javaservlets,XML,JMS,JavaIDL,JTS,JTA,JavaMail和JAFQ同时还描q在何时、何处需要用这些技术?/h5>
import java.sql.*;
public class JDBCExample...{
public static void main( String args[] )
...{
try...{
Class.forName("COM.cloudscape.core.JDBCDriver");
Connection conn = DriverManager.getConnection("jdbc:cloudscape:PhoneBook"); Statement stmt = conn.createStatement();
String sql = "SELECT name, phone FROM CONTACT_TABLE ORDER BYname";
ResultSet resultSet = stmt.executeQuery( sql );
String name;
String phone;
while ( resultSet.next() )
...{
name = resultSet.getString(1).trim();
phone = resultSet.getString(2).trim();
System.out.println( name + ", " + phone );
}catch ( Exception e )
...{// Handle exception heree.printStackTrace();
}
}
}
Context ctx = new InitialContext();
MyEJBHome home = ctx.lookup( "myApp.myEJB" );
QH1QDate JSP sampleQ?H1Q?br />QH2Q
Q? response.setHeader("Refresh", 5); %Q The current date is Q?= new Date() %Q? Q?H2Q?/font>
1、对象的初始?/strong>
在创建对象时Q对象所在类的所有数据成员会首先q行初始化?/p>
d所有类成员初始化完成之后,才调用本cȝ构造方法创建对象?/p>
构造方法的作用是初始化?/p>
E序中主cȝ静态变量会在mainҎ执行前初始化?/p>
不仅W一ơ创建对象时Q类中的所有静态变量都初始化,q且W一ơ访问某c?注意此时未创建此cd?的静态对象时Q所 有的静态变量也要按它们在类中的序初始化?/p>
2、承时Q对象的初始化过E?/strong>
3、关于构造方?/strong>
4、有关public、private和protected
5、抽象类
6、final关键?/strong>
7、接口interface(用implements来实现接?
8、多重?/strong>
9、接口的嵌入
10、类的嵌?/strong>
手段有两U:
class A ...{ class B ...{} B getB() ...{ B b = new B(); return b; } } static void m() ...{ A a = new A(); A.B ab = a.getB(); // 或者是 A.B ab = a.new B(); } |
(3)一个类l承了另一个类的内部类Q因cL内部c,而内部类的构造方法不能自动被调用Q这样就需要在子类的构造方法中明确的调用超cȝ构造方法。接上例Q?class C extends A.B ...{
class C extends A.B ...{ C() ...{ new A().super(); // q一句就实现了对内部cL造方法的调用。? } } |
构造方法也可这样写Q?
C(A a) ...{ a.super(); } // 使用q个构造方法创建对象,要写成C c = new C(a); a是A的对象?/font> |
11、异常类
JAVA中除了RunTimeExceptionc,其他异常均须捕获或抛出?/p>