JAVA教程之网上搜集的一些Java使用
不得不提一下的是:.net是看到java红,而开发出来的工具。我先说说在JBUILDER中将程序表面变的更酷的举措!JAVA程序默许的表面(LOOKANDFEEL)能够改动为JAVA表面、MOTIF表面、WINDOWS表面、MAC表面;
而JAVA表面又有五种作风分离是海蓝宝石作风、祖母绿作风、红宝石作风、柴炭作风、
高对照作风。
表面改动详细办法以下:
1:能够间接在程序中挪用上面三其中的一个:
importjavax.swing.*;
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
2:或接纳菜单来变更:
importjavax.swing.*;
JMenuBarmb=newJMenuBar();
JMenufile=newJMenu("Look&Feel",true);
ButtonGroupbuttonGroup=newButtonGroup();
finalUIManager.LookAndFeelInfo[]info=UIManager.getInstalledLookAndFeels();
for(inti=0;i<info.length;i++){
JRadioButtonMenuItemitem=new
JRadioButtonMenuItem(info.getName(),i==0);
finalStringclassName=info.getClassName();
item.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventae){
try{UIManager.setLookAndFeel(className);}
catch(Exceptione){System.out.println(e);}
SwingUtilities.updateComponentTreeUI(TouchyFeely.this);}
});
buttonGroup.add(item);
file.add(item);
}
mb.add(file);
setJMenuBar(mb);
}
之前宣布过内容的豪富翁伴侣请将内容改成JBUILDER相干内容。感谢。
但愿多多写进精髓,不要注水!
来自:humanc2d4,工夫:2003-5-1614:45:00,ID:1867298
我再说一下JBUILDER中APPLET的数字署名(转载自:编程喜好者)
自从Java手艺入手下手使用以来,人们对Java平台的平安性和因为部署Java手艺所激发的平安成绩赐与了极年夜的存眷。出格是在1998年11月Java2公布后,Java的平安系统布局产生了基本的改善,关于终端用户而言,它能够回护文件和公家数据不被歹意的程序或病毒传染和损坏,判别代码供应者的身份。关于开辟者而言,经由过程利用API办法,可以将平安性功效集成到使用程序中,由于API的系统布局可以界说和集成对特定的资本的利用权限、加密、平安性办理、战略办理,并供应了一些类来办理公钥/密钥对及信托用户群的公钥证书。同时体系办理员、开辟者和用户可使用它供应的工具办理钥匙库,在JAR文件中天生数字署名、署名的完全性检测、创立和修正战略文件。依照Java计划者的概念,Java平安包含2个方面的内容,起首将Java作为一种平安的平台供应给用户,在此平台上,可平安地运转Java程序;其次供应用Java编程言语完成的平安工具和服务,它使得诸如企业界如许一些对平安十分敏感的范畴也可使用Java手艺。本文迁就这二个方面先容Java2的平安性新特征和该新特征下的Applet数字署名的详细完成办法。
Java2接纳了如所示的新的平安系统布局,并基于这类平安系统布局供应了良多新特?
1.1 密纹会见把持
这类才能从一入手下手就在JDK中存在。但要利用它,使用程序的编写者不能不做大批的编程事情比方,创立SecurityManager和Classloader类的子类并使其用户化。HotJava1.0就是一个如许的使用程序,它同意扫瞄器用户在几个分歧的平安品级长进行选择。但是,这类编程触及十分敏感的平安成绩,它请求程序员对盘算机平安有博识的了解和纯熟的技能。新的平安系统布局将使这些变得复杂而平安。
1.2 易于设置的平安战略
与上述情形类似,这类才能在本来的JDK中也是存在的,可是方便于利用,并且编写平安代码也不是复杂了然的事变。因而,人们希冀可以同意使用程序的编写者和用户可以欠亨过编程来设置平安战略。
1.3 便于扩大的会见把持布局
一向到JDK1.1为止,为了创立1个新的会见允许,你必需在SecurityManager类中增添1个新的check办法。新的平安系统布局则同意设置各种会见允许(每一个都暗示对1个体系资本的会见),并能对一切准确会见允许(包含不决义的允许)举行主动处置。
1.4 平安反省扩大至一切Java程序
那种一切当地代码是可托的内置观点将不复存在,取而代之的将是当地代码(比方非体系代码,安装在当地的使用程序包等)从命于与Applet不异的平安把持,可是能够声明对当地代码的政策是最宽大的,从而使这些代码可被以为是完整可托而无效地运转。上述准绳也可使用于已具名的Applet和任何Java使用程序。
2 Java2平安系统的观点及运转机制
2.1 回护域
Java2平安系统布局中的一个基础的观点是回护域(ProtectedDomain)。1个域可经由过程对象集来分别局限,这些对象以后可由1个主体间接会见。而主体是在盘算机体系中被授与允许的实体。JDK1.0所使用的沙箱就是一个有着流动界限的回护域实例。回护域的观点是一种在回护单位间起着分组和断绝感化的便当机制。比方,我们能够将回护域分隔以免它们之间的间接交互感化,因而,任何同意的交互感化必需经由过程可托体系代码或被有关的域所明白同意。
回护域一般分为明白的2个种别,体系域和使用程序域。一切被回护的内部资本如:文件体系、收集举措措施和屏幕和键盘等仅能经由过程体系域来会见。中显现了1个Java使用情况的域的构成。从观点上讲,1个域包含1组类,这些类的实例被授与不异的一组允许。回护域是由现行战略所断定的。Java使用程序情况坚持了来自代码(类和实例)到它们的回护域然后再到它们的允许的映照,如所示。1个线程的实行大概完整产生在1个单一的回护域中,也大概触及1个使用程序域或是体系域。比方:1个打印动静的使用程序将不能不与体系域产生交互感化,由于体系域是独一对输入流的会见点。在此种情形下的任什么时候候,使用程序域都不克不及经由过程挪用体系域取得除打印动静外的任何分外允许,不然将是一个严峻的平安性隐患。在相反的情况下,1个体系域从1个使用程序域中挪用1个办法,如当1个AWT体系域挪用1个Applet的绘画办法来显现这个Applet时,无效会见权限与使用程序域所同意确当前权限在任什么时候候都不异,这一点也是一样相当主要的。换句话说,一个具有较低权限的域不克不及经由过程挪用一个更高权限的域,或被一个更高权限的域所挪用来取得分外的允许。上述有关1个线程触及2个回护域的会商天然地归结为1个遍历多重回护域的线程,盘算允许的一个复杂而审慎的履历做法是:
(1)一个实行线程的允许集可被以为是由该线程所遍历的一切回护域的允许的交集。
(2)当1条代码挪用doPrivileged办法时,实行线程的允许集被以为是包含一切代码的回护域和由它间接或直接挪用的回护域的权限。即经由过程doPrivileged办法可以使1条可托代码能一时会见更多的资本,这在某些情形下是需要的。比方,1个使用程序大概不被同意间接会见包括字体的文件,可是,显现文本的体系有用程序必需代表用户取得那些字体。
在实行时代,当哀求会见1个关头体系资本(如文件I/O和收集I/O)大概API办法必要实行1个敏感的操纵时,比方读1个文件,资本处置代码间接或直接地挪用1个特别的称为会见把持(AccessController)类的办法,会见把持类经由过程反省挪用栈来作出决意是不是准予该哀求或操纵产生。在挪用栈中是实行该操纵必要挪用的一些类的成员办法,由于每一个类都属于一些回护域,每一个回护域都创建了一些战略,因而在挪用栈的每一个办法都被分派了1组权限。会见把持类由栈顶入手下手,自顶向下反省每一个办法,看是不是办法被地点的回护域所同意,假如发明一个办法权限没有失掉同意,会见把持
就抛出平安性非常;反之,假如抵达栈底仍未抛出非常,即申明挪用栈中的一切办法均满意回护域的权限请求,会见把持同意操纵产生。个中有一种特别的情形,即当会见把持遍历挪用栈时,将查找是不是存在优先域(PrivilegedDomain),假如存在优
域,即便没有抵达栈底,会见把持也将中断遍历挪用栈并同意操纵产生。固然新的安
机制初看上往增添了很多挪用API办法的损耗,可是Java2的确利用了一些手艺往减速
查权限的历程,比方会见把持将过滤失落反复的域并在碰到第一个优先域时中断反省,
申明分外的操纵将是一个当地的办法挪用,SUN的基准测试显现了新的平安反省是相称快的。
最初,每一个域包含体系或使用程序域能够对其域界限内的外部资本举行附加保。比方,一个银行体系的使用程序大概必要撑持并回护其外部的一些观点,如查帐、存
和存款等。因为此种回护的语义不像那些可展望的语义能够被JDK预置,因此,在这个
次上的回护最好留给体系或使用程序开辟员来做。
今朝,1个域独自地由1个代码来历(CodeSource)判别,它封装了在该域中运转的代码的2个特征:代码基址和大众密钥证书集,大众密钥对应于在该域中为一切代码具名的公有密钥。因此,由不异的密钥具名和来自不异URL的类被放在统一个域中。1个域还包括在该域中授与代码的允许,它是由现行平安战略所决意的。
2.2 证书、钥匙库及其相干工具
在Java2的平安系统下,1个Applet开辟和运转的历程以下:
在代码的分发端:
(1)开辟Java源程序并对其举行编译。
(2)用JAR工具对类文件和资本文件举行封装。
(3)用keytool创立公钥和密钥,天生X。509V1署名证书,输入证书。
(4)经由过程jarsigner工具用天生的密钥对JAR文件举行数字署名。
在代码的吸收端:
(1)用keytool输出证书视其为可托任。
(2)用policytool创立和修正平安性战略设置文件,受权哀求的会见权限。
(3)从收集获得字节码,用公钥考证数字署名证书和文档代码的完全性。
(4)考证字节码的正当性,依据战略文件分派响应权限。
(5)实行代码,完成后被渣滓接纳器接纳内存。
在用公钥考证数字署名证书之前,吸收方必要确认公钥本身的牢靠性,因而一般情形是供应一个包括公钥的证书而不是公钥本身。1个证书包含:
(1)1个公钥。
(2)1个独一的名字实体(团体或公司),它是证书的一切者,包括用户名字、公司、构造、乡村、地点、国度代码、省分等信息。
(3)数字署名:1个证书被1个分发者的实体署名,包管证书的确包括另1个
实体(一切者)的公钥。
(4)分发者的标识名信息。
关于吸收者能够用分发者的公钥来考证他的数字署名,反省证书的正当性。但是公钥大概包括在另外一个证书中,而数字署名必要用另外一个证书的分发者的公钥来考证,如许嵌套下往,直到一个公钥被吸收者确认是可托任的。假如吸收者不克不及创建信托链,比方:1个分发者的证书分歧法,那末能够用keytool-import命令来盘算指纹,每一个指纹是一个相干的短数字,它独一牢靠地标识证书(指纹是一个用信息择要算法盘算的证手札息的哈希值),吸收者能够呼唤证书的一切者,并对照收回的证书和吸收证书的指纹,假如指纹不异,则证书分歧。因而可以包管证书在传送的过程当中未被修正。另外一个潜伏的成绩是发送者身份的标识,偶然一个证书是自署名的,即便用证书中的公钥绝对应的密钥举行署名,假如吸收者已晓得或信托发送者,那末就没有任何成绩。不然发送者必要从一个可托任的第3方失掉证书,这个第3方一般是一个证书的受权机构CA,那末起首发送一个自署名的证书署名哀求CSR给CA,由CA考证CSR的署名及发送CSR的身份、允许证和别的信息。然后CA经由过程一个用CA的密钥举行署名的证书,受权CSR的发送者作为公钥的一切者,任何人只需信托CA的公钥,都能够用之来考证证书的署名,良多情形下CA本身有一个来自更高一级的CA的证书,从而组成证书链。一切信托的证书实体都能够作为信托证书被引进钥匙库,每一个证书中的公钥都能够用来考证用响应的密钥天生的署名。
发送者在发送署名的代码和文档时还响应供应包括与署名的密钥响应的公钥证书。用keytool-export命令或API函数能够从钥匙库中输入证书到文件中,然后将这个文件发送给必要的吸收者,由吸收者用keytool-import命令或API函数将其引进钥匙库中。假如用jarsigner工具为JAR文件天生署名,他会从钥匙库中掏出证书及证书链,并和署名一同放进JAR文件。
密钥和响应的公钥证书寄存在一个由口令回护的数据库中,称为钥匙库(keystore)。1个钥匙库包括2品种型的条目,可托任的证书条目,钥匙和证书条目,每一个都包括1个密钥和与密钥响应的公钥证书,在钥匙库中的每一个条目都有1一般名举行标识。1个钥匙库的一切者在钥匙库中能够有多个钥匙,能够经由过程分歧的别号举行会见,每一个别号一般是用钥匙库的一切者利用的钥匙的特定脚色来定名,别号也能够标识钥匙的目标。比方:
SignPersonalEmail能够被用来标识1个钥匙库的条目,它的密钥用于署名团体邮件,SignJarFiles用于标识1个条目,它的密钥用于署名JAR文件。
3 Applet的数字署名认证明现的详细办法、步骤
3.1分离我本人开辟的基于JAVA2的Applet
我的项目是利用APPLET制造一个及时动静行列监控程序,因为触及到了当地资本,对APPLET必定要举行数字署名和认证。我利用的情况是WINDOWS2000,使用服务器是WEBLOGIC6.0,开辟情况是JBUILDER4.0。之前我提示人人必定要注重服务器端和客户真个观点。那些文件应当在服务器端,那些文件应当在客户端。
起首在客户端利用JRE1.3.0_01(JAVA运转情况1.3.0.1版本)以代替IE的JVM(JAVA假造机),能够到WWW.JAVA.SUN.COM网站上往下载,下载好了先在客户端安装好,安装历程十分复杂。
在服务器真个挪用APPLET的HTML文件中也必要将它包括出去,以便没有事前安装JRE的客户端下载,详细的写法,请接着往下看;
详细步骤以下:
服务器端:
1.将程序必要用到的各类包文件全体解压(我这儿要用到WEBLOGIC的JMS包利用命令jarxfweblogicc.jar),然后利用JDK的打包命令将编译好的监控程序.class和方才解压的包一同打包到一个包中。(条件我已将监控程序息争开的包都放在统一个目次下了),都是dos形态下的命令,详细命令见jdk1.3(1.2)的bin目次下,命令以下:
jarcvfmonitor.jar*.class
此命令天生一个名为monitor.jar的包
2.为方才创立的包文件(monitor.jar)创立keystore和keys。个中keystore将用来寄存密匙(privatekeys)和大众钥匙的认证,alias别号这儿取为monitor。
命令以下:
keytool-genkey-keystoremonitor.keystoreCaliasmonitor
此命令天生了一个名为monitor.keystore的keystore文件,接着这条命令,体系会问你很多多少成绩,好比你的公司称号,你的地点,你要设定的暗码等等,都由本人的任意写。
3.利用方才天生的钥匙来对jar文件举行署名
命令以下:
jarsigner-keystoremonitor.keystoremonitor.jarmonitor
这个命令将对monitor.jar文件举行署名,不会天生新文件。
4.将大众钥匙导进到一个cer文件中,这个cer文件就是要拷贝到客户真个独一文件
。
命令以下:
keytool-export-keystoremonitor.keystore-aliasmonitor-file
monitor.cer
此条命令将天生monitor.cer认证文件,固然这几步都有大概问你方才设置的暗码。
如许就完成了服务器真个设置。这时候你就能够将jar文件和keystore文件和cer文件(我这儿是monitor.jar,monitor.keystore,monitor.cer)拷贝到服务器的目次下了,我用的是weblogic6.0,以是就拷贝到C:eawlserver6.0configmydomainapplicationsDefaultWebApp_myserver下的本人建的一个目次下了。
客户端:
1.起首应当安装jre1.3.0_01,然后将服务器端天生的monitor.cer文件拷贝到jre的特定目次下,我这儿是:
c:programfilesjavasoftjre1.3.0_01libsecurity目次下。
2.将大众钥匙倒进到jre的cacerts(这是jre的默许keystore)
命令以下:
keytool-import-aliasmonitor-filemonitor.cer
-keystorecacerts
注重这儿要你输出的是cacerts的暗码,应当是changeit,而不是你本人设定的keystore的暗码。
3.修正policy战略文件,在dos形态下利用命令policytool体系会主动弹出一个policytool的对话框,如所示,在这内里起首选择file菜单的open项,
翻开c:program
filesjavasoftjre1.3.0_01libsecurity目次下的java.poliy文件,然
后在edit菜单当选择Changekeystore,在对话框中newkeystoreurl:中输出file:/c:/programfiles/javasoft/jre/1.3.0_01/lib/security/cacerts,这儿要注重反斜杠,在newkeystoretype中输出JKS,这是cacerts的流动格局,然后单击AddPolicyEntry,在呈现的对话框中CodeBase中输出:
http://URL:7001/*
个中的URL是服务器的IP地点,7001是我的weblogic的端口,假如你是在其余使用服务器上好比说是apache,那端标语就能够省略失落。在SignedBy中输出(别号alias):这儿是Monitor然后单击addpeimission按钮,在呈现的对话框中permission当选择你想给这个applet的权限,这儿详细有很多权限,读者能够本人找材料看看。我这儿就选用allpeimission,右侧的signedBy中输出别号:monitor最初保留,在file菜单的save项。固然你能够瞥见我已对多个包完成了署名认证。
如许客户真个设置就完成了。在客户端用ie运转该applet程序时,会扣问你是否是对该署名受权,选择受权后,包会主动从服务器下载到当地盘算机,并且ie会主动启动jre,在右下栏中能够瞥见,相称于ie的java把持台。
4.挪用applet的html文件
人人都晓得因为java2的平安性,对applet的一般挪用的html文件已不克不及再利用了,而改成ActiveX范例的挪用。详细的又分ie和nescape的分歧写法,这一些在sun网上都能找到现成的教程。我就未几说了,只是将我的这个小程序为ie写的的html给人人看看。
<html>
<METAHTTP-EQUIV="Content-Type"CONTENT="text/html;CHARSET=gb2312">
<center>
<h3>动静中央及时监控平台</h3>
<hr>
<OBJECTclassid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="900"height="520"align="baseline"
codebase="http://192.168.2.217:7001/j2re-1_3_0_01-win-i.exe#Version=1,3,0,0">
<PARAMNAME="java_code"VALUE="wise.monitor.applet.monitorApplet">
<PARAMNAME="java_codebase"VALUE="monitor/classes">
<PARAMNAME="java_type"VALUE="application/x-java-applet;version=1.3">
<PARAMNAME="ARCHIVE"VALUE="monitor.jar">
<PARAMNAME="scriptable"VALUE="true">
</OBJECT>
</center>
</html>
个中我要夸大一点,由于applet每次的修改都必要从头打包署名,手续十分烦琐,以是在详细的完成中要将一些会变更参数放到html文件中来,传到applet中往,这一点网上文章很多多少,本人往看吧。
别的一个就是有伴侣问我,那如许不是太贫苦了,每个客户端都要举行庞大的dos命令操纵,我只能说一今朝我的程度只能将一个已做好的客户端文件cer文件和java.policy和cacerts文件间接拷贝到客户端,固然这也出缺陷,假如他人的盘算机已有了认证,就会丧失。就这些成绩我们能够一同切磋。
别的另有一点优化,就是在打包的时分,我这儿只讲了把一切要用的触及到平安性的包和源程序到要打到一个包中。如许假如包十分年夜的话,会十分影响下载的速率,假如可使用当地盘算机的包就行了,这一点jre也做到了,详细的要到把持面板的jre把持台上往设置。这个就留着读者本人往探索吧。
来自:humanc2d4,工夫:2003-5-1614:47:00,ID:1867304
我说一下JAVA把持EXCEL的办法之一。(BORLAND.COM)
利用Windows操纵体系的伴侣对Excel(电子表格)必定不会生疏,可是要利用Java言语来利用Excel文件并非一件简单的事。在Web使用日趋流行的明天,经由过程Web来操纵Excel文件的需求愈来愈激烈,今朝较为盛行的操纵是在JSP或Servlet中创立一个CSV(commaseparatedvalues)文件,并将这个文件以MIME,text/csv范例前往给扫瞄器,接着扫瞄器挪用Excel而且显现CSV文件。如许只是说能够会见到Excel文件,可是还不克不及真实的利用Excel文件,本文将给人人一个欣喜,向人人先容一个开放源码项目??JavaExcelAPI,利用它人人就能够便利地利用Excel文件了。
JAVAEXCELAPI简介
JavaExcel是一开放源码项目,经由过程它Java开辟职员能够读取Excel文件的内容、创立新的Excel文件、更新已存在的Excel文件。利用该API非Windows操纵体系也能够经由过程纯Java使用来处置Excel数据表。由于是利用Java编写的,以是我们在Web使用中能够经由过程JSP、Servlet来挪用API完成对Excel数据表的会见。如今公布的不乱版本是V2.0,供应以下功效:
?从Excel95、97、2000等格局的文件中读取数据;
?读取Excel公式(能够读取Excel97今后的公式);
?天生Excel数据表(格局为Excel97);
?撑持字体、数字、日期的格局化;
?撑持单位格的暗影操纵,和色彩操纵;
?修正已存在的数据表;
?如今还不撑持以下功效,但不久就会供应了:
?不克不及够读取图表信息;
能够读,可是不克不及天生公式,任何范例公式最初的盘算值都能够读出;
使用示例
从Excel文件读取数据表
JavaExcelAPI既能够从当地文件体系的一个文件(.xls),也能够从输出流中读取Excel数据表。读取Excel数据表的第一步是创立Workbook(术语:事情薄),上面的代码片断举例申明了应当怎样操纵:(完全代码见ExcelReading.java)
importjava.io.*;
importjxl.*;
…………
try
{
//构建Workbook对象,只读Workbook对象
//间接从当地文件创立Workbook
//从输出流创立Workbook
InputStreamis=newFileInputStream(sourcefile);
jxl.Workbookrwb=Workbook.getWorkbook(is);
}
catch(Exceptione)
{
e.printStackTrace();
}
一旦创立了Workbook,我们就能够经由过程它来会见ExcelSheet(术语:事情表)。参考上面的代码片断:
//猎取第一张Sheet表
Sheetrs=rwb.getSheet(0);
我们既大概经由过程Sheet的称号来会见它,也能够经由过程下标来会见它。假如经由过程下标来会见的话,要注重的一点是下标从0入手下手,就像数组一样。
一旦失掉了Sheet,我们就能够经由过程它来会见ExcelCell(术语:单位格)。参考上面的代码片断:
//猎取第一行,第一列的值
Cellc00=rs.getCell(0,0);
Stringstrc00=c00.getContents();
//猎取第一行,第二列的值
Cellc10=rs.getCell(1,0);
Stringstrc10=c10.getContents();
//猎取第二行,第二列的值
Cellc11=rs.getCell(1,1);
Stringstrc11=c11.getContents();
System.out.println("Cell(0,0)"+"value:"+strc00+";type:"+
c00.getType());
System.out.println("Cell(1,0)"+"value:"+strc10+";type:"+
c10.getType());
System.out.println("Cell(1,1)"+"value:"+strc11+";type:"+
c11.getType());
假如仅仅是获得Cell的值,我们能够便利地经由过程getContents()办法,它能够将任何范例的Cell值都作为一个字符串前往。示例代码中Cell(0,0)是文本型,Cell(1,0)是数字型,Cell(1,1)是日期型,经由过程getContents(),三品种型的前往值都是字符型。
假如有必要晓得Cell内容切实其实切范例,API也供应了一系列的办法。参考上面的代码片断:
Stringstrc00=null;
doublestrc10=0.00;
Datestrc11=null;
Cellc00=rs.getCell(0,0);
Cellc10=rs.getCell(1,0);
Cellc11=rs.getCell(1,1);
if(c00.getType()==CellType.LABEL)
{
LabelCelllabelc00=(LabelCell)c00;
strc00=labelc00.getString();
}
if(c10.getType()==CellType.NUMBER)
{
NmberCellnumc10=(NumberCell)c10;
strc10=numc10.getValue();
}
if(c11.getType()==CellType.DATE)
{
DateCelldatec11=(DateCell)c11;
strc11=datec11.getDate();
}
System.out.println("Cell(0,0)"+"value:"+strc00+";type:"+
c00.getType());
System.out.println("Cell(1,0)"+"value:"+strc10+";type:"+
c10.getType());
System.out.println("Cell(1,1)"+"value:"+strc11+";type:"+
c11.getType());
在失掉Cell对象后,经由过程getType()办法能够取得该单位格的范例,然后与API供应的基础范例相婚配,强迫转换成响应的范例,最初挪用响应的取值办法getXXX(),就能够失掉断定范例的值。API供应了以下基础范例,与Excel的数据格局绝对应。
每品种型的详细意义,请拜见JavaExcelAPIDocument。
当你完成对Excel电子表格数据的处置后,必定要利用close()办法来封闭先前创立的对象,以开释读取数据表的过程当中所占用的内存空间,在读取大批数据时显得尤其主要。参考以下代码片断:
//操纵完成时,封闭对象,开释占用的内存空间
rwb.close();
JavaExcelAPI供应了很多会见Excel数据表的办法,在这里我只扼要地先容几个经常使用的办法,别的的办法请参考附录中的JavaExcelAPIDocument。
?Workbook类供应的办法
1.intgetNumberOfSheets()
取得事情薄(Workbook)中事情表(Sheet)的个数,示例:
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
intsheets=rwb.getNumberOfSheets();
2.Sheet[]getSheets()
前往事情薄(Workbook)中事情表(Sheet)对象数组,示例:
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
Sheet[]sheets=rwb.getSheets();
3.StringgetVersion()
前往正在利用的API的版本号,仿佛是没甚么太年夜的感化。
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
StringapiVersion=rwb.getVersion();
?Sheet接口供应的办法
1.StringgetName()
猎取Sheet的称号,示例:
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
StringsheetName=rs.getName();
2.intgetColumns()
猎取Sheet表中所包括的总列数,示例:
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
intrsColumns=rs.getColumns();
3.Cell[]getColumn(intcolumn)
猎取某一列的一切单位格,前往的是单位格对象数组,示例:
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
Cell[]cell=rs.getColumn(0);
4.intgetRows()
猎取Sheet表中所包括的总行数,示例:
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
intrsRows=rs.getRows();
5.Cell[]getRow(introw)
猎取某一行的一切单位格,前往的是单位格对象数组,示例子:
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
Cell[]cell=rs.getRow(0);
6.CellgetCell(intcolumn,introw)
猎取指订单元格的对象援用,必要注重的是它的两个参数,第一个是列数,第二个是行数,这与一般的行、列组合有些分歧。
jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
Cellcell=rs.getCell(0,0);
天生新的Excel事情薄
上面的代码次要是向人人先容怎样天生复杂的Excel事情表,在这里单位格的内容是不带任何润色的(如:字体,色彩等等),一切的内容都作为字符串写进。(完全代码见ExcelWriting.java)
与读取Excel事情表类似,起首要利用Workbook类的工场办法创立一个可写进的事情薄(Workbook)对象,这里要注重的是,只能经由过程API供应的工场办法来创立Workbook,而不克不及利用WritableWorkbook的机关函数,由于类WritableWorkbook的机关函数为protected范例。示例代码片断以下:
importjava.io.*;
importjxl.*;
importjxl.write.*;
…………
try
{
//构建Workbook对象,只读Workbook对象
//Method1:创立可写进的Excel事情薄
jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile(targetfile));
//Method2:将WritableWorkbook间接写进到输入流
/*
OutputStreamos=newFileOutputStream(targetfile);
jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(os);
*/
}
catch(Exceptione)
{
e.printStackTrace();
}
API供应了两种体例来处置可写进的输入流,一种是间接天生当地文件,假如文件名不带全路径的话,缺省的文件会定位在以后目次,假如文件名带有全路径的话,则天生的Excel文件则会定位在响应的目次;别的一种是将Excel对象间接写进到输入流,比方:用户经由过程扫瞄器来会见Web服务器,假如HTTP头设置准确的话,扫瞄器主动挪用客户真个Excel使用程序,来显现静态天生的Excel电子表格。
接上去就是要创立事情表,创立事情表的办法与创立事情薄的办法几近一样,一样是经由过程工场形式办法取得响应的对象,该办法必要两个参数,一个是事情表的称号,另外一个是事情表在事情薄中的地位,参考上面的代码片断:
file://创立Excel事情表
jxl.write.WritableSheetws=wwb.createSheet("TestSheet1",0);
"这锅也支好了,质料也筹办完全了,能够入手下手下锅了!",如今要做的只是实例化API所供应的Excel基础数据范例,并将它们增加到事情表中就能够了,参考上面的代码片断:
file://1/.增加Label对象
jxl.write.LabellabelC=newjxl.write.Label(0,0,"ThisisaLabelcell");
ws.addCell(labelC);
//增加带有字型Formatting的对象
jxl.write.WritableFontwf=newjxl.write.WritableFont(WritableFont.TIMES,18,
WritableFont.BOLD,true);
jxl.write.WritableCellFormatwcfF=newjxl.write.WritableCellFormat(wf);
jxl.write.LabellabelCF=newjxl.write.Label(1,0,"ThisisaLabelCell",wcfF);
ws.addCell(labelCF);
//增加带有字体色彩Formatting的对象
jxl.write.WritableFontwfc=newjxl.write.WritableFont(WritableFont.ARIAL,10,
WritableFont.NO_BOLD,false,
UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);
jxl.write.WritableCellFormatwcfFC=newjxl.write.WritableCellFormat(wfc);
jxl.write.LabellabelCFC=newjxl.write.Label(1,0,"ThisisaLabelCell",wcfFC);
ws.addCell(labelCF);
//2.增加Number对象
jxl.write.NumberlabelN=newjxl.write.Number(0,1,3.1415926);
ws.addCell(labelN);
//增加带有formatting的Number对象
jxl.write.NumberFormatnf=newjxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormatwcfN=newjxl.write.WritableCellFormat(nf);
jxl.write.NumberlabelNF=newjxl.write.Number(1,1,3.1415926,wcfN);
ws.addCell(labelNF);
//3.增加Boolean对象
jxl.write.BooleanlabelB=newjxl.write.Boolean(0,2,false);
ws.addCell(labelB);
//4.增加DateTime对象
jxl.write.DateTimelabelDT=newjxl.write.DateTime(0,3,newjava.util.Date());
ws.addCell(labelDT);
//增加带有formatting的DateFormat对象
jxl.write.DateFormatdf=newjxl.write.DateFormat("ddMMyyyyhh:mm:ss");
jxl.write.WritableCellFormatwcfDF=newjxl.write.WritableCellFormat(df);
jxl.write.DateTimelabelDTF=newjxl.write.DateTime(1,3,newjava.util.Date(),wcfDF);
ws.addCell(labelDTF);
这里有两点人人要引发人人的注重。第一点,在机关单位格时,单位格在事情表中的地位就已断定了。一旦创立后,单位格的地位是不克不及够变动的,只管单位格的内容是能够改动的。第二点,单位格的定位是依照上面如许的纪律(column,row),并且下标都是从0入手下手,比方,A1被存储在(0,0),B1被存储在(1,0)。
最初,不要健忘封闭翻开的Excel事情薄对象,以开释占用的内存,拜见上面的代码片断:
file://写进Exel事情表
wwb.write();
//封闭Excel事情薄对象
wwb.close();
这大概与读取Excel文件的操纵有极少分歧,在封闭Excel对象之前,你必需要先挪用write()办法,由于先前的操纵都是存储在缓存中的,以是要经由过程该办法将操纵的内容保留在文件中。假如你先封闭了Excel对象,那末只能失掉一张空的事情薄了。
拷贝、更新Excel事情薄
接上去扼要先容一下怎样更新一个已存在的事情薄,次要是上面二步操纵,第一步是机关只读的Excel事情薄,第二步是使用已创立的Excel事情薄创立新的可写进的Excel事情薄,参考上面的代码片断:(完全代码见ExcelModifying.java)
file://创立只读的Excel事情薄的对象
jxl.Workbookrw=jxl.Workbook.getWorkbook(newFile(sourcefile));
//创立可写进的Excel事情薄对象
jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile(targetfile),rw);
//读取第一张事情表
jxl.write.WritableSheetws=wwb.getSheet(0);
//取得第一个单位格对象
jxl.write.WritableCellwc=ws.getWritableCell(0,0);
//判别单位格的范例,做出响应的转化
if(wc.getType()==CellType.LABEL)
{
Labell=(Label)wc;
l.setString("Thevaluehasbeenmodified.");
}
//写进Excel对象
wwb.write();
//封闭可写进的Excel对象
wwb.close();
//封闭只读的Excel对象
rw.close();
之以是利用这类体例构建Excel对象,完整是由于效力的缘故原由,由于下面的示例才是API的次要使用。为了进步功能,在读取事情表时,与数据相干的一些输入信息,一切的格局信息,如:字体、色彩等等,是不被处置的,由于我们的目标是取得行数据的值,既使没有了润色,也不会对行数据的值发生甚么影响。独一的倒霉的地方就是,在内存中会同时保留两个一样的事情表,如许当事情表体积对照年夜时,会占用相称年夜的内存,但如今仿佛内存的巨细并非甚么关头要素了。
一旦取得了可写进的事情表对象,我们就能够对单位格对象举行更新的操纵了,在这里我们不用挪用API供应的add()办法,由于单位格已于事情表傍边,以是我们只必要挪用响应的setXXX()办法,就能够完成更新的操纵了。
尽单位格原本的格局化润色是不克不及往失落的,我们仍是能够将新的单位格润色加上往,以使单位格的内容以分歧的情势体现。
重生成的事情表对象是可写进的,我们除更新原本的单位分外,还能够增加新的单位格到事情表中,这与示例2的操纵是完整一样的。
最初,不要健忘挪用write()办法,将更新的内容写进到文件中,然后封闭事情薄对象,这里有两个事情薄对象要封闭,一个是只读的,别的一个是可写进的。
上面是在一个Excel表格中创立一个矩阵的复杂例子:
importorg.apache.poi.hssf.usermodel.*;
importjava.io.FileOutputStream;
//coderunagainstthejakarta-poi-1.5.0-FINAL-20020506.jar.
publicclassPoiTest{
staticpublicvoidmain(String[]args)throwsException{
FileOutputStreamfos=newFileOutputStream("foo.xls");
HSSFWorkbookwb=newHSSFWorkbook();
HSSFSheets=wb.createSheet();
wb.setSheetName(0,"Matrix");
for(shorti=0;i<50;i++){
HSSFRowrow=s.createRow(i);
for(shortj=0;j<50;j++){
HSSFCellcell=row.createCell(j);
cell.setCellValue(""+i+","+j);
}
}
wb.write(fos);
fos.close();
}
}
这段代码起首创立一个Workbook,从该Workbook中失掉一个表格、定名,然后持续写进一个50x50的矩阵。最初输入到一个名为foo.xls的Excel文件,乃至在AppleMac机上也能够翻开。
POI项目是Java使用的使人镇静的一步,为用户供应了Windows文档集成的新功效,同意Java开辟职员便利地扩大其产物的功效。
来自:humanc2d4,工夫:2003-5-1614:49:00,ID:1867310
我说一下JAVA中收发EMAIL的办法(转载自:Java喜好者)
本文将会商怎样用Java来编写可依据SMTP和POP3协定来收发E-mail的JavaApplet。
一.Java收集编程开端
1.创建TCP/IP毗连
Socket类中的机关函数Socket(Stringhost,intport)用于创立一个Socket,并与指定的主机(host)及端口(port)毗连。因为遭到JavaApplet平安机制的限定,主机名不成以恣意指定,而应和被挪用的Applet地点主机的名字不异。因而,可先由GetCodeBase办法获得扫瞄器以后读取的CLASS文件地点的URL,再经由过程GetHost办法从该URL前往用字符串暗示的该主机的称号。比方从http://person.zj.cninfo.net/~caveman/这个URL中能够前往用字符串暗示的主机名"person.zj.cninfo.net"。
关于尺度端口地点的值通常为:SMTP为25、POP3为110、FTP为21等,固然也有的主机用的长短尺度的端口,在利用之前最好先断定一下。
2.数据的发送与吸收
利用Socket类中的GetOutputStream办法能够获得与以后Socket对应的输入数据流,用DataOutputStream类中的WriteBytes办法能够逐一字符地将数据写进到输入数据流中。
利用Socket类中的GetInputStream办法能够获得与以后Socket对应的输出数据流,用DataInputStream类中的ReadLine办法能够逐行地读取输出数据流中的数据。
3.封闭TCP/IP毗连
能够用Socket类中的close办法来封闭TCP/IP毗连。
二.基于SMTP协定发送E-mail的JavaApplet
1.SMTP协定和服务器
SMTP(SimpleMailTransferProtocol)协定是今朝网下流行的发送E-mail的协定,SMTP协定共有14条命令。不外,发一封E-mail只需用以下5条命令就充足了(见表1)。
表1
命令功能
HELO<SP><domain><CRLF>与SMTP服务器握手,传送本机域名
MAIL<SP>FROM:<reverse-path><CRLF>传送发信者的信箱称号
RCPT<SP>TO:<forward-path><CRLF>传送吸收者的信箱称号
DATA<CRLF>发送函件数据(包含信头和信体)
QUIT<CRLF>加入与SMTP服务器的毗连
除ISP供应的SMTP服务器之外,国际一些寄存收费团体主页的服务器的SMTP端口也是翻开的,假如该服务器对外来的E-mail没有增添RELAY限定(比方网易nease.net就有此限定),那末也能够把它看成SMTP服务器来用。如Person.zj.cninfo.net等,在这些服务器上放一个上面要编的JavaApplet和挪用它的htm文件,用户就能够完成在线发送E-mail了。
2.SMTPtester.java中的次要程序
该JavaApplet用了三个文本条(TextField)部件tf1、tf2和tf3,它们分离用来供用户输出发信者的信箱称号、吸收者的信箱称号和函件的题目;还用了两个文本区(TextArea)部件ta1和ta2,ta1供用户输出信体内容,ta2用来显现Smtp服务器的应对信息和堕落信息等;固然还用了一个按钮(Button)部件bu1,用户输出准确的信息后,用鼠标点击一下它,函件就能够被收回往了。
事务捕捉处置程序见程序1:
publicbooleanhandleEvent(Eventevent1){
if((event1.target!=bu1)||(event1.id!=1001))
/*假如不是按钮bu1被鼠标按下*/
{
returnfalse;
}
if((tf1.getText().length()!=0)&&(tf2.getText().length()!=0))
/*假如发信者和收信人的信箱称号都填好了,实行发信程序Bu1run*/
{bu1.disable();
bu1run();
returntrue;
}
else{
ta2.appendText("Pleasegivemeenoughinformationtosendyouremail!
");
returntrue;
}
(程序1)
发送E-mail程序bu1run见程序2:
publicvoidbu1run(){
try{
Socketsocket1=newSocket(getCodeBase().getHost(),25);
/*创建与smtp服务器的毗连*/
DataOutputStreamdataout2=newDataOutputStream(socket1.getOutputStream());
DataInputStreamdataIn3=newDataInputStream(socket1.getInputStream());
GetReply(dataIn3);
dataout2.writeBytes("HELOperson.zj.cninfo.net
");
/*入手下手按SMTP协定发信*/
GetReply(dataIn3);
dataout2.writeBytes("MAILFROM:"+tf1.getText()+"
");
GetReply(dataIn3);
dataout2.writeBytes("RCPTTO:"+tf2.getText()+"
");
GetReply(dataIn3);
dataout2.writeBytes("DATA
");
GetReply(dataIn3);
dataout2.writeBytes("From:"+tf1.getText()+"
");
dataout2.writeBytes("To:"+tf2.getText()+"
");
dataout2.writeBytes("Subject:"+tf3.getText()+"
"+ta1.getText()+"
.
");
GetReply(dataIn3);
dataout2.writeBytes("QUIT
");
GetReply(dataIn3);
socket1.close();
/*加入毗连*/
bu1.enable();
return;
}
catch(java.io.IOExceptionIOException0)/*捕捉IO毛病*/
{
ta2.appendText("Error!
");
bu1.enable();
return;
}
}
(程序2)
吸收服务器应对程序GetReply见程序3:
voidGetReply(DataInputStreamdataIn1)
{
Stringstring2;
string2="";
try
{
string2=dataIn1.readLine();
ta2.appendText(string2+"
");
}
catch(java.io.IOExceptionIOException0)
{
ta2.appendText("Error!
");
bu1.enable();
return;
}
}
(程序3)
3.实例运转
在http://person.zj.cninfo.net/~caveman上已放了编译好的SMTPtester.class和挪用它的smtp.htm,是该Applet在运转时的画面,这时候这封信已被发往caveman@nease.net了!
三.基于POP3协定读取E_mail的JavaApplet
1.POP3协定和服务器
POP3(PostOfficeProtocolversion3)是一种经常使用的收集协定,用于从远程服务器的信箱里收取E_mail,它的经常使用命令依据毗连时的分歧形态有:
(1)受权形态(AUTHORIZATIONstate)
User<SP><name><CRLF>用户名
Pass<SP><string><CRLF>用户暗码
Quit<CRLF>加入
(2)实行形态(TRANSACTIONstate)
STAT<CRLF>信箱形态,即信箱内共有几封信,统共巨细(8进制暗示)等。
LIST<SP><msg><CRLF>不必msg参数时显现每封信的巨细列表,用msg参数时显现编号为msg的函件的长度(8进制暗示)。
TOP<SP><msg><SP><n><CRLF>取编号为msg的函件的信头(head)和部分信体(body),n=0时只失信头,n≠0时失信头和信体的前n行。该命令为可选命令,有些POP3服务器软件不撑持它。
RETR<SP><msg><CRLF>读取编号为msg的函件。
DELE<SP><msg><CRLF>删编号为msg的函件,实在只是作个标志,真正删除要到更新形态。
(3)更新形态(UPDATEstate)
QUIT<CRLF>加入并把做过DELE标志的邮件删失落。
别的另有NOOP、LAST、RSET、RPOP等命令用得较少。
与SMTP服务器的情形类似,除ISP供应的POP3服务器外,国际的一些寄存收费团体主页的服务器也供应POP3服务(比方网易nease.net)。用户在取得收费主页的同时也能够失掉一个POP3信箱,比方我的信箱为caveman@nease.net,在服务器上放一个上面要编写的Applet和挪用它的htm文件,在线运转它,输出准确的用户名和暗码后就能够读取E-mail了。
2.POP3tester.java中的次要程序
该JavaApplet共用了三个文本条(TextField)部件tf1、tf2和tf3,它们分离用来供用户输出用户名、暗码和要读取的E-mail的编号(为0时,只失信箱形态不读信);还用了一个文本区(TextArea)部件ta2,用来显现POP3服务器的应对信息、函件内容和堕落信息等;固然还用了一个按钮(Button)部件bu1,用户输出准确的信息后,用鼠标点击一下它,就能够读取指定的函件了。
事务捕捉处置程序与SMTPtester中的一样,读取E-mail程序bu1run见程序4:
publicvoidbu1run()
{
try
{
Socketsocket1=newSocket(getCodeBase().getHost(),110);
/*毗连POP3服务器*/
DataOutputStreamdataout2=newDataOutputStream(socket1.getOutputStream());
DataInputStreamdataIn3=newDataInputStream(socket1.getInputStream());
GetReply(dataIn3);
dataout2.writeBytes("USER"+tf1.getText()+"
");
GetReply(dataIn3);
dataout2.writeBytes("PASS"+tf2.getText()+"
");
GetReply(dataIn3);
dataout2.writeBytes("STAT
");
/*信箱形态*/
GetReply(dataIn3);
dataout2.writeBytes("LIST
");
/*函件长度列表*/
GetReply2(dataIn3);
ta2.appendText("
");
if(tf3.getText().equals("0")==false)
{
dataout2.writeBytes("RETR"+tf3.getText()+"
");
/*读取指定函件*/
GetReply2(dataIn3);
ta2.appendText("
");
}
dataout2.writeBytes("QUIT
");
GetReply(dataIn3);
socket1.close();
bu1.enable();
return;
}
catch(java.io.IOExceptionIOException0)
{
ta2.appendText("Error!
");
bu1.enable();
return;
}
}
(程序4)
吸收服务器应对程序GetReply和GetReply2见程序5:
voidGetReply2(DataInputStreamdataIn1)
{
Stringstring2;
string2="";
try
{
for(string2=dataIn1.readLine();
(string2.equals(".")=false);
string2=dataIn1.readLine())
/*List和Retr命令的应对固然有多行,但都用一句"."作为停止,可据此取应对信息*/
{
ta2.appendText(string2+"
");
}
}
catch(java.io.IOExceptionIOException0)
{
ta2.appendText("Error!
");
bu1.enable();
return;
}
}
(程序5)
读取单句应对的程序GetReply和SMTPtester中的不异,由于在与POP3服务器对话时,List和Retr的应对不但一句,因而又编了一个GetReply2程序来处置这个成绩。
3.实例运转
在http://www.netease.com/~caveman上已放了编译好的POP3tester.class和挪用它的POP3.html,是该Applet运转时的画面,方才在person.zj.cninfo.net上用SMTPtester收回的那封信已到了我网易的信箱里了。
四.程序的改善
以上两个JavaApplet还很不完美,在增强毛病捕捉、对邮件附件的撑持等方面必要改善的中央还良多。别的,依据下面提到的一些基础办法,只需略加变更,还能够用Java来完成其他收集协定,如FTP、NEWS等。
在性能方面,在windows平台下,.net可能是占强项,要是把.net放在sun开发的操作系统上去运行呢?根本就运行不了,.net对其它操作系统的支持也很弱,性能也可能比不上java。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 是一种将安全性(Security)列为第一优先考虑的语言 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 是一种使用者不需花费很多时间学习的语言 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
页:
[1]