Java语言相关的重要术语解析

Java,是一种解释型语言。由SUN公司开发,最初用于移动设备软件开发,结果却因为Internet的发展而成名。   Java 语言基本上属于一个完全面向对象的语言,并且语言的设计仍然以简捷为重点,因此有其它语言基础的朋友学习Java语言会感觉比较简单,对于这个语言学习的难点则是面向对象的相关概念,包括:包、类、对象、实例、接口、继承、重载与覆盖,还有就是类、变量、函数的相关作用域,这些是语言学习的重点和难点。   对于语言的学习可以参考《Java 2参考大全》,对于面向对象的学习可以参考《Think in Java》,先学语言打好基础,再学面向对象的概念以及设计,通过自己设计程序再进一步去了解设计模式,循序渐进地达到Java程序员的基本要求。   学习Java还有个非常重要的就是类库,因为没有人还会从头开发程序,SUN公司提供了一套完整的开发用的基础类库,如何用好这些类才是Java语言学习的重中之重。   JVM (Java Virtual Machine, Java虚拟机)。   就是Java程序运行的虚拟环境,因为Java是解释型的语言,因此需要一个边解释边运行的支撑环境。同时,JVM又是在OS(操作系统)之上的,对于在JVM上运行的Java程序提供了统一的标准接口,从而屏蔽了操作系统的差异性,实现了Java代码的“一次编写,处处运行”的承诺,这个解释说明。NET平台理论上也可以实现这个功能,只是微软没有提供这样的支持。   为了提升程序运行的效率以及代码知识产权的保护,Java代码会使用JDK中的编译器编译成字节码(中间代码),从而运行在JVM之上,但是这个编译结果与C/C++这种编译型语言编译出来的结果不同,Java编译出来的是一种结构中立的中间文件格式,只能在JVM上执行,而C/C++编译出来的已经是最终的执行程序,操作系统只是管理和支撑应用运行,但是编译出来的结果已经是机器码。因此Java的Class文件可以使用反编译工具转换成 Java代码进行分析,推荐的反编译工具是JAD及它的Eclise插件。   许多公司都有开发自己的JVM,据测试数据显示性能都比SUN提供的免费版本要好,但是我实际使用中没有发现明显地区别,而SUN也有高级但是收费的版本,因此性能上没有显示地提升还是使用免费地版本就可以了。   JRE(Java Runtime Environment,Java运行环境)。JRE提供了类库、JVM与其他组件来支持applet和Java应用程序的运行。另外,JRE拥有两个关键的发布技术:Java Plug-in与Java Web Start,Java Plug-in支持applet运行在大部分浏览器上,Java Web Start则可以将一个独立的应用程序发布到网络上。   JRE同时还是J2EE平台企业级应用开发与部署的支撑技术,但是不包括编译器与调试器等各种工具去支持applet和应用程序的开发。   Java Plug-in.这个技术是JRE的一部分,用于连接浏览器与Java平台。这个连接使得WEB站点的applets运行在客户端的浏览器中。   Java Web Start:只要拥有相同版本的JRE,独立的Java应用程序就可以通过这个技术发布到网络上。   JDK(Java Development Kit,Java开发工具)。   包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar),还有Java类库的源代码(src.zip)以及学习用的例子 (sample与demo)。为了使程序安装后就可以运行,许多Java应用服务器会集成JDK,原因可以参考我所写的《JRE与JDK在启动应用服务器中的作用》。   无论是JRE还是JDK最主要是使用他们携带的JVM,以及安装到JDK与JRE目录下的LIB目录里的JAR包。使用JRE还是 JDK都通过JAVA_HOME这个参数完成,而对LIB目录下的JAR包则通过CLASSPATH目录进行添加。值得注意的是如果JAVA_HOME设置成JDK的安装目录,实际上用的是包含在JDK安装目录下的JRE目录里的JVM.   JDK里面还包括了开发所需要用的编译、跟踪、发布等多种工具,这里就不一一描述,大家可以在网上查询资料,如果需要我这边补充,也可以跟帖说明。   J2SE( Java 2 Standard Edition, Java 2 标准版)。   Java 2平台标准版(现在叫Java SE)支持客户端和服务器端的Java应用程序开发,如今还包括了嵌入式和实时系统环境。Java SE还支持Java Web Services的开发,并且还是Java EE平台的基础。   Java SE平台中有两个主要的产品就是JRE与JDK.   J2EE( Java 2 Enterprise Edition, Java 2 企业版)。   J2EE(现在叫Java EE)是一种工业标准,用于支持可移植、可扩展、健壮并安全的服务器端Java程序。Java EE提供了web服务、组件模型、管理和通讯API从而可以实现符合工业标准SOA框架与WEB应用程序。Java EE平台包括符合Java EE规范的应用服务器,以及相关的工具、例子及帮助文件。还有符合Java EE标准的应用程序的发布与调试工具。   简单来说Java EE就是一组规范组成的,这些规范合成到一起组成一个技术标准。这个标准现在是由JCP组织制定,最新的版本是2006年6月发布的Java EE 5.0,所有的应用服务器产品都希望通过这样的认证。因为所有认证过的产品从理论上讲符合J2EE规范开发的应用程序都可以平滑地移植,现实中我做的移植工作也只需要修改不到5%的内容,并且大多是XML配置文件而不涉及到源代码。这样的好处使用户无须绑定到某个厂商的平台上,也为扩展这个市场打下了基础。   Java EE 5.0的认证过程是必须通过SUN公司提供的软件测试包,测试包里面包括了27000多个功能点的验证,验证通过后就可以获得这个标志,并且会在SUN的网站上挂出。http://java.sun.com/javaee/overview/compatibility.jsp   在2006年12月Apusic 5.0全球第四家通过了这个认证,这个事实也就说明中国的应用服务器产品终于在技术上没有了差距,甚至因为Apusic研发产品的态度专注,所以还领先了国外的主要竞争对手。   Java EE SDK就是SUN公司开发的一个符合J2EE标准的应用服务器,可以下载后免费使用来了解Java EE的最新技术,当然也可以下载Apusic 5.0这个也是符合Java EE最新标准的产品,而且会有更加友好的中文界面与中文帮助。   写的过程中,总觉得知识点都在相互关联着,于是写出来的东西好像会越来越多,无法收笔。因此,希望看过的朋友多给提宝贵意见,使我写的东西更加有针对性,能够为学习和使用J2EE技术的朋友,以及使用我们Apusic产品的客户带来收获。 <淘宝热门商品:
 

¥:38.00 

[郭氏鞋坊旗下]四季兜外贸童鞋店

185黑黄 库存外贸 DISNEY/迪斯尼Tigger&pooh童休闲运动鞋 带闪灯

 

¥:29.00 

‖ 淘时尚 ‖入托名字条‖布质可烫可缝‖姓名贴‖

‖四钻‖棉质耐洗‖全彩色免缝姓名条 熨烫入托名字条 迪斯尼

来源:程序员网

小小豆叮

定时执行任务的三种方法

1)java.util.Timer 这个方法应该是最常用的,不过这个方法需要手工启动你的任务: Timer timer=new Timer(); timer.schedule(new ListByDayTimerTask(),10000,86400000); 这里的ListByDayTimerTask类必须extends TimerTask里面的run()方法。 2)ServletContextListener 这个方法在web容器环境比较方便,这样,在web server启动后就可以 自动运行该任务,不需要手工操作。 将ListByDayListener implements ServletContextListener接口,在 contextInitialized方法中加入启动Timer的代码,在contextDestroyed 方法中加入cancel该Timer的代码;然后在web.xml中,加入listener: < listener> < listener-class>com.qq.customer.ListByDayListener< /listener-class> < /listener> 3)org.springframework.scheduling.timer.ScheduledTimerTask 如果你用spring,那么你不需要写Timer类了,在schedulingContext-timer .xml中加入下面的内容就可以了: < ?xml version="1.0" encoding="UTF-8"?> < !DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> < beans> < bean id="timer" class="org.springframework.scheduling.timer.TimerFactoryBean"> < property name="scheduledTimerTasks"> < list> < ref local="MyTimeTask1"/> < /list> < /property> < /bean> < bean id="MyTimeTask" class="com.qq.timer.ListByDayTimerTask"/> < bean id="MyTimeTask1" class="org.springframework.scheduling.timer.ScheduledTimerTask"> < property name="timerTask"> < ref bean="MyTimeTask"/> < /property> < property name="delay"> < value>10000< /value> < /property> < property name="period"> < value>86400000< /value> < /property> < /bean> < /beans> <淘宝热门商品:
 

¥:78.00 

皇冠舒友阁 顶级特效美容护肤 效果才是硬道理

皇冠热销 印疤修复液 消除深浅痘印等色印、有效改善凹凸疤痕

 

¥:50.00 

【北京同仁堂国药】

来源:程序员网

小小豆叮

如何在JBOSS Server上发布EJB

1.准备文件 需要的软件:JDK1.3(for WIN) ,J2EE_1_2_1_SDK,JBoss2.0(www.jboss.org) 需要的文档:J2EE_1_2_1_SDK_DOC,Devguide1_2_1 2.准备环境 安装JDK1.3(支持JBOSS),装完后检查一下环境变量,可以编译运行一个小程序试一下. 安装JBOSS2.0,完成后运行bin un.bat试一下.JNDI 端口是1099,WEB端口是8080,可以用浏览器试一下,1099端口会返回一段乱码,8080端口返回空. 3.编译和打包 按照JavaTM 2 Enterprise Edition Developer´s Guide (v1.2.1)的Getting Started章中说的编译例子程序 ConverterEJB,然后用Deploy Tool打包生成 ConverterApp.ear. 用jar -xvf ConverterApp.ear 从中抽取 ejb-jar-ic.jar 这是打包好的和Bean有关的三个文件和工具生成meta-info*.xml文件(所谓的deployment descriptor). 然后运行JBoss的Deploy Tool打开ejb-jar-ic.jar,设置JNDI Name为MyConverter.然后保存.(该工具会自动生成JBoss的Deployment descriptor) 在把ejb-jar-ic.jar拷到jbossdeploy目录下,jboss会自动发布该Bean.. 4.运行客户端程序测试 按照JBoss的教学文档,修改 ConverterClient.java为 import javax.naming.*; import java.util.Hashtable; import javax.rmi.PortableRemoteObject; import java.util.Properties; import java.io.FileInputStream; import javax.rmi.PortableRemoteObject; import Converter; import ConverterHome; public class ConverterClient { public static void main(String[] args) { try { Properties props = new Properties(); Properties sysProps = System.getProperties(); try { props.load (new FileInputStream ("test.properties")); sysProps.putAll(props); } catch (Exception e) { System.err.println ("Can´t read `test.proprties´"); System.exit (-1); } System.setProperties (sysProps); Context initial = new InitialContext(); Object objref = initial.lookup("MyConverter"); ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(objref, ConverterHome.class); Converter currencyConverter = home.create(); double amount = currencyConverter.dollarToYen(200.00); System.out.println(String.valueOf(amount)); amount = currencyConverter.yenToEuro(200.00); System.out.println(String.valueOf(amount)); } catch (Exception ex) { System.err.println("Caught an unexpected exception!"); ex.printStackTrace(); } } } test.properties文件内容如下 java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=xxx.xxx.xxx.xxx:1099 (写上JBoss所在机器的IP) 然后运行CompileClient.bat和TestClient.bat,就可以享受成功的喜悦了. <淘宝热门商品:
 

 

靓之彩数码影像:柯达数码冲印 刷照片冲印 水晶版画相册 冲洗彩扩

 

188.00 元  

地球都踩在脚下

T-MAC8麦迪8代 麦8 08-09赛季麦迪篮球鞋 白黑红 阿迪达斯adidas

来源:程序员网

小小豆叮

用RMI和CORBA进行分布式Java编程

Java远程方法调用(RMI)机制和公用对象请求代理体系(CORBA)是最重要 和使用最广泛的两种分布式对象系统。每个系统都有其特点和短处。它们在行 业中被用于从电子交易到保健医疗的各个领域。一个项目如果要从这两种分布式 机制中选用一个,往往难以抉择。本文概括地介绍了RMI和CORBA,更重要的是, 它将介绍如何开发一个有用的应用程序,用于从远程主机下载文件。然后它将: 简要介绍分布式对象系统 简要介绍RMI和CORBA 让你对在RMI和CORBA中开发应用程序所涉及的工作有个初步印象 演示如何使用RMI和CORBA,从远程主机传送文件 对RMI和CORBA进行简单比较 客户机/服务器模型 客户机/服务器模型是分布式计算的一种形式,在这种形式中,一个程序(客 户机)与另一个程序(服务器)通讯以便交换信息。在这种模型中,客户机和服 务器通常都说同样的语言--也就是说客户机和服务器能理解同一个协议--这 样它们才能通讯。 虽然客户机/服务器模型的实现方式多种多样,但典型做法是使用底层套接字。 使用套接字开发客户机/服务器系统意味着,我们必须设计一个协议,也就是客户 机和服务器都认识的一组命令集,通过这些命令它们就能通讯了。举例来说, HTTP协议中提供了一个名为GET的方法,所有Web服务器都必须实现这个方法,所 有Web客户机(浏览器)都必须使用这个方法,才能获取文档。 分布式对象模型 基于分布式对象的系统是一组对象的集合,这些对象以一种明确定义封装的接 口把服务的请求者(客户机)和服务的提供者(服务器)分隔开。换言之,客户 机从服务的实现中分离出来,变成数据的呈现和可执行代码。这就是基于分布式 对象的模型与纯粹的客户机/服务器模型的主要区别之一。 在基于分布式对象的模型中,客户机向对象发送消息,然后对象解释该消息以 便决定要执行什么服务。这项服务,也就是方法,可以选择是让对象还是让代理 来执行。Java远程方法调用(RMI)和公用对象请求代理体系(CORBA)就是这种 模型的例子。 RMI RMI是一个分布式对象系统,它使你能够轻松地开发出分布式Java应用程序。 在RMI中开发分布式应用程序比用套接字开发要简单,因为不需要做设计协议这种 很容易出错的工作。在RMI中,开发者会有一种错觉,似乎是从本地类文件调用的 本地方法,其实参数传送给了远程目标,目标解释参数后再把结果发回给调用方。 RMI应用程序初步 使用RMI开发分布式应用程序包括以下步骤: 定义一个远程接口 实现这个远程接口 开发服务器 开发客户机 生成存根和基干,启动RMI注册表、服务器和客户机 下面我们将通过开发一个文件传输程序来实践这些步骤。 范例: 文件传输程序 这个应用程序允许客户机从远程主机上传送(即下载)任何类型的文件(纯 文本或二进制文件)。第一步是定义一个远程接口,这个接口规定了服务器所提 供方法的信号,客户机将调用这些方法。 定义一个远程接口 用于文件下载应用程序的远程接口如代码范例1所示。接口 FileInterface提供了一个方法downloadFile,这个 方法接受String参数(文件名),将文件的数据以字节数组的形式 返回。 代码范例1 1: FileInterface.java import java.rmi.Remote; import java.rmi.RemoteException; public interface FileInterface extends Remote { public byte[] downloadFile(String fileName) throws RemoteException; } 请注意FileInterface的以下特征: 它必须声明为public,这样客户机才能加载实现远程接口 的远程对象。 它必须扩展为Remote接口,以满足使该对象成为远程对象的 要求。 这个接口中的每种方法都必须投出一个java.rmi.RemoteException。 实现远程接口 下一步是实现接口FileInterface。实现的范例见代码范例2。 请注意,除了实现FileInterface之外,还把FileImpl 类扩展为UnicastRemoteObject。这表示FileImpl类 将用于创建一个单独的、不可复制的远程对象,它使用RMI缺省的基于TCP的传送 通道进行通讯。 代码范例2: FileImpl.java import java.io.*; import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class FileImpl extends UnicastRemoteObject implements FileInterface { private String name; public FileImpl(String s) throws RemoteException{ super(); name = s; } public byte[] downloadFile(String fileName){ try { File file = new File(fileName); byte buffer[] = new byte[(int)file.length()]; BufferedInputStream input = new BufferedInputStream(new FileInputStream(fileName)); input.read(buffer,0,buffer.length); input.close(); return(buffer); } catch(Exception e){ System.out.println("FileImpl: "+e.getMessage()); e.printStackTrace(); return(null); } } } 开发服务器 第三个步骤是开发服务器。服务器需要做三件事: 创建RMISecurityManager的一个实例并安装它 创建远程对象(在本例中是FileImpl)的一个实例 在RMI注册表中登记这个创建的对象。实现的范例见代码范例3。 代码范例 3: FileServer.java import java.io.*; import java.rmi.*; public class FileServer { public static void main(String argv[]) { if(System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } try { FileInterface fi = new FileImpl("FileServer"); Naming.rebind("//127.0.0.1/FileServer", fi); } catch(Exception e) { System.out.println("FileServer: "+e.getMessage()); e.printStackTrace(); } } } 语句Naming.rebind("//127.0.0.1/FileServer", fi)假定RMI 注册表在缺省的端口号1099上运行。但是,如果RMI注册表在其他端口号上运行, 就必须在这一句中指定端口号。例如,如果RMI注册表在端口4500上运行,那么 这一句就变成: Naming.rebind("//127.0.0.1:4500/FileServer", fi) 另外,在这里要着重指出,我们假定rmi注册表和服务器是在同一台电脑上运 行。如果不是这样,只需修改rebind方法中的地址即可。 开发客户机 下一步是开发客户机。客户机可以远程调用远程接口 (FileInterface)中指定的任何方法。但是为了能这么做,客户 机首先必须从RMI注册表中获得指向该远程对象的引用。获得引用之后就可以调 用downloadFile方法了。客户机的实现请见代码范例4。在这个实 现中,客户机从命令行接收两个参数: 第一个参数是要下载文件的名称,第二个参数是要下载的文件所在主机的地 址,也就是运行文件服务器的那台电脑的地址。 代码范例4: FileClient.java import java.io.*; import java.rmi.*; public class FileClient{ public static void main(String argv[]) { if(argv.length != 2) { System.out.println("Usage: java FileClient fileName machineName"); System.exit(0); } try { String name = "//" + argv[1] + "/FileServer"; FileInterface fi = (FileInterface) Naming.lookup(name); byte[] filedata = fi.downloadFile(argv[0]); File file = new File(argv[0]); BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file.getName())); output.write(filedata,0,filedata.length); output.flush(); output.close(); } catch(Exception e) { System.err.println("FileServer exception: "+ e.getMessage()); e.printStackTrace(); } } } 运行应用程序 为了运行应用程序,我们需要生成存根和基干,编译服务器和客户机,启动 RMI注册表,最后是启动服务器和客户机。 为了生成存根和基干,请使用rmic编译器: prompt> rmic FileImpl 这将生成两个文件:FileImpl_Stub.class和 FileImpl_Skel.class。存根是一个客户机代理,基干是一个服 务器基干。 下一步是编译服务器和客户机。用javac编译器来做这件事。但是请注意:如 果服务器和客户机是在两台不同的机器上开发的,为了编译客户机,需要把接口 (FileInterface)复制一份。 最后,启动RMI注册表并运行服务器和客户机。为了在缺省的端口号上启动 RMI注册表,请在Windows中使用命令rmiregistry或 start rmiregistry。为了在其他端口号上启动RMI注册表,可以 提供该端口号作为RMI注册表的一个参数: prompt> rmiregistry portNumber 运行RMI注册表之后,就可以启动服务器FileServer了。但是, 因为在服务器应用程序中正在使用RMI安全管理员,所以需要一个安全方针来与之 相配。下面是一个安全方针范例: grant { permission java.security.AllPermission "", ""; }; 注意: 这只是一个方针的例子。它允许任何人做任何事情。对于关键 性事务应用程序,你需要指定更严格的安全方针。 现在,为了启动服务器,需要把除了客户机类 (FileClient.class)之外的所有类(包括存根和基干)复制一 份。请使用以下命令启动服务器,假定安全方针位于文件policy.txt中: prompt> java -Djava.security.policy=policy.txt FileServer 为了在另一台机器上启动客户机,需要复制远程接口 (FileInterface.class)和存根 (FileImpl_Stub.class)。请使用以下命令启动客户机: prompt> java FileClient fileName machineName 其中fileNamefileName是要下载的文件,machineName 是该文件所在的机器(运行文件服务器的那台机器)。如果一切顺利,那么客户 机就存在了,下载完的文件保存在本地的机器上。 <淘宝热门商品:
 

¥:48.00 

纤体·丽颜New Concept茶坊 纯天然美容瘦身品位花饮

超级瘦腿!(迷迭香柠檬马鞭草)袋泡瘦腿茶 1月量2盒 包快递哦!

 

3.50 元  

联达电子音响材料网淘宝分铺

【联达电子】镀银优质九脚电子管管座

来源:程序员网

小小豆叮

jsp处理表单的一些经验分享

之前一直写struts,在页面跳转和表单提交这一类问题上碰了不少钉子,于是想把处理这类问题的经历和见解写出来,供各位业内的同仁参考,有不对的地方,敬请斧正! 1:超连接跳转 我们在超连接的时候,常常连接到一个jsp或者Action,比如: XXX 这样做会有一个问题:在test.jsp中,除你传递的param1和param2参数外,你用request.getParamter()取任何原来页面的表单元素都会为空,这是因为这种方式会产生新的request生命周期,在这个request中只会包含超连接后跟随的?param1这种参数, 因此我的建议是如果不是很简单的页面跳转(比如回登陆页面之类的),尽量不要用这种超连接方式。 2:即传参又提交表单 如果确实既要像上述第一种方式传参数,又要提交表单的话,可以采取如下方式: XXX在脚本中如下处理: function commonSubmit(url) { form1.action="/jsp/managerAction.do?"+url; form1.submit(); } 提交到Action和jsp是一样的原理,但要记住 中method=post不能少,否则它只提交表单而不传param参数了(正好和第一种相反:) ) 3:js和java变量互传 在jsp中经常会遇到把js变量赋给java变量,或者将java变量赋给js变量的情况,在此将通用的处理方法小结如下: java变量传给js好办,var a ="";注意要将引号""加上;js变量给java稍微复杂点,一般是在表单中用一个 的隐藏表单元素,然后在脚本中将js变量值赋给它: var jsParamValue=aaaa; form1.jsParam.value=jsParamValue; 然后就可以request.getPrameter("jsPrama");来取得js变量值了 4:Action中request不会丢掉 不知大家有没有注意到这个好处,Struts架构中是由一个ActionServlet来作为MVC的控制器角色,jsp页面提交后request是传到ActionServelt中的, 而ActionServlet将根据struts-config.xml中的配置调用相应的Action的方法,并将从jsp中获得的request传给Action类,这样request的生命周期是连续的,即你在jsp中提交了表单,在Action中执行了方法,再回到jsp页面,用request.getParamter()取jsp页面的表单元素值会发现它还在,这对于页面下拉列表等选择项防止复位是一个很好实现方法。 5:传参时参数有空格的情况 如果你提交form时带参数,比如form1.action="/jsp/Action.do?param1="+value1,注意如果value1中带有空格的话,你在 Action中request.getParameter("param1"); 取得的只是空格前的值,因此如果有这种带空格的参数在传递时,个人建议是将其转化为特定的字符串,value1=value1.replaceAll(" ","%NULL%"); 然后在Action中将其转回来:request.getParamter("param1").replaceAll("%NULL%"," "); 6:form-data属性 如果你要用来上传文件的话,注意在一个表单中如果有enctype="multipart/form-data"属性的话,是不能接收除type=file外的其他表单元素类型的。 即如果你把和放在同一表单中,而该表单有enctype="multipart/form-data"的话,request.getParamter取text的值会为空, 这个问题的最简单的解决方法是将单独放一个表单,上传文件时只提交该表单即可。 7:jsp中开模式对话框的方式 与Swing中类似,jsp中也有模式对话框这一概念,你可以将一个jsp页面放到一个模式对话框中打开,这样在模式对话框消失前,原jsp页面将不可操作。特别适合父页面中要做一些额外的选择操作,而又没必要跳转到新的jsp页面的时候, 开模式对话框的方式参考如下: Function open() { If(window.showModelDialog()) { Var returnValue = showModelDialog(“/jsp/模式窗口包含的jsp页面路径”; help=0;status=0;center=yes;dialogWidth=100pt;dialogHeight=100pt”); } } <淘宝热门商品:
 

35.00 元 

【天使名妆】100%纯棉休闲瑜珈裤

 

¥:8.80 

『五博』新奥尔良烤鸡腌料

来源:程序员网

小小豆叮

Java语言中常见的十大误解

JAVA 语 言 自 从 应 用 于 Internet, 迅 速 成 为 全 球 热 点。 它 的 平 台 无 关 性 仿 佛 成 为 解 决 互 易 操 作 性 和 可 移 植 性 的 灵 丹 妙 药。 然 而 对 于 JAVA 语 言 的 认 识 仍 有 不 少 误 解。 1.JAVA 是 HTML 的 扩 充 JAVA 是 一 个 编 程 语 言, HTML 是 一 个 页 面 描 述 语 言。 除 了 新 版 本 HTML 可 以 在 WEB 页 中 插 入 JA-VA 小 应 用 外, 它 们 之 间 没 有 任 何 相 同 之 处。 2.JAVA 是 一 种 很 容 易 学 会 的 编 程 语 言 没 有 一 种 和 JAVA 同 样 有 力 的 语 言 是 简 单 的。 当 它 写 演 示 小 程 序 时, 非 常 容 易; 但 当 它 真 正 做 一 些 重 要 的 工 作 时, 却 很 费 力。 JAVA 库 有 150 多 种 类 和 接 口, 虽 然 对 许 多 程 序 用 户 不 需 要 整 个 类 库, 但 每 个 项 目 都 需 要 类。 3.JAVA 是 一 个 简 单 的 编 程 环 境 一 些 人 喜 欢 只 用 vi 编 辑 器 和 dbx 调 试 器 来 写 程 序。 但 是 PC 和 MAC 编 程 者 已 习 惯 用 类 似 VB 风 格 的 拖 拉 式 表 格 设 计 工 具 或 集 成 开 发 环 境, 这 对 他 们 来 说 是 一 团 麻。 但 是, 一 旦 类 似 于 Syman-tec 公 司 的 Cafe 工 具 或 Borland 公 司 的 Latte 工 具 问 世, JAVA 的 开 发 时 间 就 会 大 幅 度 减 少。 4.JAVA 将 成 为 所 有 平 台 的 统 一 编 程 语 言 在 理 论 上, 这 是 可 能 的。 但 这 并 不 是 说 用 户 就 已 得 到 应 用 开 发 的 最 方 便 途 径。 JAVA 应 用 的 开 发 并 不 像 (可 能 永 远 不 像) 用 MFC 或 VB 开 发 的 Windows 应 用 那 样 好, 而 且 JAVA 提 供 的 图 形 开 发 工 具 功 能 也 太 简 单。 我 们 希 望 JAVA 类 库 很 快 变 丰 富。 5.JAVA 是 解 释 型 的, 它 对 于 特 殊 平 台 的 重 要 应 用 太 慢 了 许 多 编 程 者 在 类 似 于 用 户 界 面 方 面 花 了 太 多 的 时 间。 所 有 程 序, 无 论 用 什 么 语 言 编 写, 都 会 有 足 够 的 时 间 对 鼠 标 进 行 检 测。 当 然, 目 前 我 们 尚 未 用 当 前 的 JAVA 版 本 来 做 CPU 密 集 的 任 务。 但 是, 开 发 一 个 将 JAVA 中 间 码 转 换 成 本 地 码 的 编 译 器 是 非 常 容 易 的。 6. 所 有 的 JAVA 程 序 都 在 WEB 页 中 运 行 所 有 的 JAVA 小 程 序 (applet) 都 在 WEB 页 中 运 行。 在 浏 览 器 中 运 行 的 JAVA 程 序, 这 是 applet 的 定 义。 但 编 写 不 依 赖 于 WEB 浏 览 器 运 行 的 JAVA 程 序 是 可 能 的, 也 是 非 常 有 用 的。 这 些 程 序 完 全 可 以 移 植, 而 且 因 为 JAVA 比 C++ 更 方 便、 出 错 更 少, 它 是 编 程 的 一 个 很 好 的 选 择, 也 是 学 习 编 程 的 首 选 入 门 语 言。 一 旦 它 和 界 面 工 具 以 及 数 据 库 存 取 工 具 结 合, 将 更 有 竞 争 力。 7.JAVA 消 除 了 CGI 编 程 的 需 要 绝 对 不。 在 今 天 的 技 术 下, CGI 仍 是 ap-plet 和 服 务 器 之 间 最 方 便 的 通 讯 手 段。 服 务 器 仍 将 需 要 CGI 语 言 来 处 理 applet 发 送 的 信 息。 当 然, 用 户 可 以 用 JAVA 语 言 来 写 CGI, 如 同 Perl 或 C 那 样 简 单。 8.JAVA 将 彻 底 改 变 客 户 / 服 务 器 计 算 这 是 可 能 的。 SUN 公 司 已 公 布 了 各 种 数 据 库 类 库 的 计 划, 这 将 使 得 用 JAVA 开 发 客 户 / 服 务 器 应 用 和 用 JAVA 的 网 络 类 库 开 发 网 络 程 序 一 样 简 单。 9. 使 用 JAVA, 用 户 可 以 用 500 美 元 的 In ┐ ternet 设 备 来 代 替 现 在 的 计 算 机 这 种 认 为 人 们 会 放 弃 功 能 丰 富、 使 用 方 便 的 台 式 机 来 追 求 没 有 外 存 且 功 能 有 限 的 机 器, 是 完 全 不 合 理 的。 但 是 Internet 设 备 可 以 作 为 台 式 机 的 便 携 式 助 手。 如 果 价 格 合 理, 用 户 当 然 愿 意 用 一 台 Internet 浏 览 器 在 用 餐 时 自 由 地 选 择 阅 读 新 闻。 这 就 是 JAVA 的 魅 力。 10.JAVA 将 允 许 放 弃 基 于 部 件 的 计 算 模 式 当 人 们 谈 到 部 件, 有 许 多 不 同 的 含 义。 就 可 视 控 制 (Visual Control), 例 如 能 插 入 GUI 程 序 的 OCX 部 件, JAVA 还 没 有 设 定 一 个 标 准。 就 使 用 CORBA 接 口 及 OpenDoc 和 分 布 计 算 模 型 进 行 合 作 的 能 力, 这 不 久 就 将 开 始。 目 前 网 上 已 有 CORBA 接 口 的 测 试 版。 <淘宝热门商品:
 

 

燕窝饼店-皇冠信誉.纯中药美白.丰胸.减肥.排毒饼干.美丽吃出来

 

100.00 元 

韩国手表正品intercrew品牌手表LED手表

来源:程序员网

小小豆叮

java语言的网络功能与编程

Java语言是Internet上最热门的编程语言,本文针对Java的网络功能,对Java从网络上获取图象、声音、HTML文档及文本文件等编程方法作了初步的介绍,同时介绍了动态获取网络上资源的方法作了介绍。文中提供了大量简明易懂的实例。 关键词:Java;Internet;网络 Java语言是Internet上新兴的编程语言,对Java的特性以及基本的编程方法已有很多文章作过介绍。但是,广大Java爱好者更希望了解Java更深一步的编程方法,本文就Java的网络功能及其编程方法 作一初步的介绍。 为了方便初次接触Java的读者,本文先就Java编程的一些常识作简单介绍。 一、Java编程简介 1. 编程环境: 对于大部分读者,以下的配置是较为经济的一种选择: 操作系统 Win95 编译软件 JDK1.01 浏览软件 Netscape2.0以上(32位) 2. 编程方法: 先用文本编辑器如Edit、NotePad等输入Java程序,以.java为文件名后缀存盘。 再执行命令行:“Javac 文件名”来编译Java程序。编译后生成后缀为.class的字节码文件。 最后,如果是Java Applitcation,则执行命令行:“Java 字节码文件名”来运行Java程序。 如果是Java Applet,则用文本编辑器输入调用该Java Applet的HTML 文档, 以 .htm 为文件名后缀存盘。 再执行命令行:“appletviewer HTML文件名”来运行Java Applet。或用Netscape打开该HTML文档。 3. 关于本文中程序的说明 为了使程序能够最简洁地体现其所代表的编程方法,本文中的程序一般采用最简单的形式,省略了线程等内容。因此,本文的程序不是“好”的程序,但最容易为初学者理解。 本文的所有程序经编译后,生成的字节码文件及对应的HTML文档已上载到http://www.shu.edu.cn/~xyx/test/jvnet, 均可正确运行。连入Internet的读者可用浏览器打开该地址,查看运行效果。 连入Internet的读者也可以在本地硬盘输入并编译本文的程序,用Netscape的File/Open File菜单打开HTML文档,体会编程方法并查看运行效果。如果读者想将Java Applet 放到自己的主机上或其他ftp服务器上,在Netscape中用http协议或ftp协议调用,出于安全性限制,应作如下修改: 如果读者在某个WWW主机上有帐号,可以做个人Homepage(一般在用户根目录创建WWW或public_html目录即可,Homepage的地址为http://HostName/~个人帐号),可将本文程序中对应的http://www.shu.edu.cn/~xyx/部分修改为读者自己的Web结点地址,然后将编译后生成的字节码文件及对应的HTML文档上载到自己的结点上。 如果读者的计算机连入了Internet,也可以找一个可以上载的ftp结点,如:ftp://ftp.shnet.edu.cn/incoming,将本文程序中对应的http://www.shu.edu.cn/~xyx/部分修改为ftp结点的地址,将编译后生成的字节码文件及对应的HTML文档上载到该结点上,以查看运行效果。 如果读者的计算机没有联网,也可以在单机上运行Web 服务软件如Webstar for Win95,将本文程序中对应的http: //www. shu.edu.cn/~xyx/部分修改为“http://本地IP地址”的形式,来模拟网络编程。 二、Java网络功能及获取网络上资源的一般步骤 Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来。 在编程处理上,一般先生成一个URL类型的对象,然后用 Java中相应的方法(method)获取该对象所代表的资源。下面分别介绍Java网络功能的几个例子,并由此介绍几种不同的编程方法。 三、从网络上获取图象 Java Applet可以直接从网络上结点获取图象并显示出来。 为了了解其编程方法和从本地显示图象的编程有何不同,我们先不考虑网络功能,来看一个简单的图象显示的例子: ●程序1 import java.applet.*; import java.awt.*; public class imag0 extends Applet{ Image image; public void init() { image=getImage(getDocumentBase(),"test.gif"); } public void paint(Graphics g) { g.drawImage(image, 0, 0,this); } } 这是一个最简单的获取并显示图象的例子, 在该例中, 先用getImage(getDocumentBase(),图象文件名)从HTML文档所在位置调用图象test.gif,并由此生成一个Image类型的对象image, 然后用drawImage(image, 0, 0,this)在屏幕上将图象显示出来。 如果想从网络上其他结点获取图象,关键是创建对应于网络上其他结点的Image类型的对象,一旦获得Image类型的对象获得了,便可以对其进行任何可能的图象操作。 Java提供了如下方法可以创建对应于其他结点的图象: getImage(new URL(字符串)) 其使用格式可有两种: String url = "结点URL"; Image image; try { image = getImage(new URL(url)); } catch(Exception e){ System.out.println("Can´t open the URL "); } 或 URL imgur=null; Image image; try { imgur=new URL("结点URL "); } catch (MalformedURLException e) { System.out.println("Can´t open the URL "); } image=getImage(imgur); 前一种格式用“new URL(url)”生成 URL 对象, 并直接作为getImage的参数,后一种格式先用“new URL(url)”生成一个 URL对象,再传给getImage。两种格式本质上是一样的。两种格式中,生成URL对象的部分都包含在 try{ 获取URL对象 } catch (MalformedURLException e) { 出错提示 } 中。 例如要调用http://www.shu.edu.cn/~xyx/img/shnet.jpg结点的图象,第一种格式完整的程序如下: ●程序2 import java.applet.*; import java.net.*; import java.awt.*; public class imag extends Applet{ Image image; public void init() { String url = "http://www.shu.edu.cn/~xyx/img/shnet.jpg"; try { image = getImage(new URL(url)); } catch(Exception e){} } public void paint(Graphics g) { g.drawImage(image, 0, 0,this); } } 第二种格式完整的程序如下: ●程序3 import java.applet.*; import java.net.*; import java.awt.*; public class imag2 extends Applet{ Image image; URL imgur=null; public void init() { try { imgur=new URL("http://www.shu.edu.cn/~xyx/img/shnet.jpg"); } catch (MalformedURLException e) { System.out.println("Can´t open the URL "); } image=getImage(imgur); } public void paint(Graphics g) { g.drawImage(image, 0, 0,this); } } 将上述两个程序分别以imag.java和imag2. java 存盘, 执行javac imag.java和javac imag2.java,将得到编译后生成的imag.class和imag2.class,最后创建调用这两个Java Applet的HTML文档,如imag.class对应的HTML文档可如下: < html > < head > < title >Example < /title > < /head > < center > < applet code=imag.class width=550 height=250 > < /applet > < /html > 将该HTML文档存入test.html文件,用Netscape打开, 如果你的计算机连入了Internet,便可以看到Java Applet 所显示的从网络上获得的图象了。(对于本文中其他不同的Java Applet, 对应的HTML文档只要修改其中相应的“code=imag.class”即可。) 四、从网络上获取声音 Java从网络上获取声音文件并播放声音的编程方法有两类,一是利用Java提供的play(URL)及play(URL,String) 直接播放网络上的声音文件,另一类是通过getAudioClip(URL)或getAudioClip(URL,String)先从网络上获取声音文件,并生成AudioClip 类型的对象,然后对该对象进行操作。 前者的使用格式是: String Audur = "结点URL"; try { play(new URL(Audur)); } catch(Exception e){} 或 String Audur = "结点URL"; try { play(new URL(Audur),声音文件名); } catch(Exception e){} 后者使用的格式是: String Audur = "结点URL"; AudioClip loopClip; try { loopClip = getAudioClip(new URL(Audur)); } catch(Exception e){ System.out.println("Can´t open the URL "); } 或 String Audur = "结点URL"; AudioClip loopClip; try { loopClip = getAudioClip(new URL(Audur) ,声音文件名); } catch(Exception e){ System.out.println("Can´t open the URL "); } 上面的四种格式都是将生成URL对象部分--“new URL(url)”直接作为play或getAudioClip的参数;和前面处理图象的例子一样,也可以先用“new URL(url)”获取一个URL对象, 再传给 play 或getAudioClip。如对第一种play(URL)的格式, 也可采用如下的编程格式: URL Audur =null; try { Audur=new URL("结点URL "); } catch(Exception e){ System.out.println("Can´t open the URL "); } play(Audur); 下面对前述四种从网络上获取并播放声音文件的格式各举一简单的例子, 以作编程时参考: ●程序4 格式一 import java.applet.*; import java.awt.*; import java.net.*; public class sound1 extends Applet { AudioClip loopClip; public void paint(Graphics g) { String Audur = "http://www.shu.edu.cn/~xyx/java/Animator/audio/bark.au"; try { play(new URL(Audur)); } catch(Exception e){} } } ●程序5 格式二 import java.applet.*; import java.awt.*; import java.net.*; public class sound2 extends Applet { AudioClip loopClip; public void paint(Graphics g) { String Audur = "http://www.shu.edu.cn/~xyx/java/Animator/audio/"; try { play(new URL(Audur),"bark.au"); } catch(Exception e){} } } ●程序6 格式三 import java.applet.*; import java.awt.*; import java.net.*; public class sound extends Applet{ AudioClip loopClip; public void init() { String Audur = "http://www.shu.edu.cn/~xyx/java/Animator/audio/bark.au"; try { loopClip = getAudioClip(new URL(Audur)); } catch(Exception e){} } public void paint(Graphics g){ loopClip.loop(); } } ●程序7 格式四 import java.applet.*; import java.awt.*; import java.net.*; public class sound0 extends Applet{ AudioClip loopClip; URL auur; public void init() { try { auur=new URL("http://www.shu.edu.cn/~xyx/java/Animator/audio/"); } catch (MalformedURLException e) { System.out.println("Can´t open the URL "); } loopClip = getAudioClip(auur,"bark.au"); } public void paint(Graphics g){ loopClip.loop(); } } 五、显示网络上其他HTML文档 利用Java提供的getAppletContext().showDocument(URL)可以显示其他结点的HTML文档,同前面的显示网络上其他结点的图象,有两种格式,下面各举一例: ●程序8 格式一 import java.applet.*; import java.awt.*; import java.net.*; public class showdoc extends Applet { URL docur= null; public void paint(Graphics g) { try { docur=new URL("http://www.shu.edu.cn/~xyx/doc/manhua.html"); } catch (MalformedURLException e) { System.out.println("Can´t open the URL "); } if (docur != null) { getAppletContext().showDocument(docur,"_blank"); } } } ●程序9 格式二 import java.applet.*; import java.awt.*; import java.net.*; public class showdoc2 extends Applet { URL docur= null; public void paint(Graphics g) { try { getAppletContext().showDocument(new URL("http://www.shu.edu.cn/ ~xyx/doc/manhua.html")); } catch (MalformedURLException e) { System.out.println("Can´t open the URL "); } } } 六、读取网络上文件内容 前述的网络功能只是显示或播放网络上结点的图象、 声音及HTML文档,并没有对其内容进行处理。事实上,Java还可读取网络上文件的内容,并对其内容进行处理。 读取网络上文件内容的步骤可如下: 1. 创建一个URL类型的对象 如: String url = "ftp://202.120.127.218/incoming/test/readtxt.html"; URL fileur; try { fileur = new URL(url); } catch ( MalformedURLException e) { System.out.println("Can´t get URL: " ); } 2. 利用URL类的openStream(),获得对应的InputStream类的对象 如:InputStream filecon = fileur.openStream(); 3. 将InputStream对象转化为DataInputStream类的对象 如:DataInputStream filedata = new DataInputStream(filecon); 4. 读取内容 如对前面的filedata,可用filedata.readLine() 一行一行读取内容,或用filedata.readchar一个字符一个字符读取内容。 对读取到的内容,可由Java Applet进行各种处理, 并将处理结果用各种方式显示出来。 下面的例子是读取 http://www.shu.edu.cn/~xyx/doc/manhua.html文件内容的例子,为简洁起见,该例中只将文件的内容逐行读出,并在文本区显示出来。 ●程序10 import java.io.*; import java.net.*; import java.awt.*; import java.applet.*; public class showfile extends Applet{ URL fileur; TextArea showarea = new TextArea("Please wait a while for get text",10,70); public void init() { String url = "http://www.shu.edu.cn/~xyx/doc/manhua.html"; try { fileur = new URL(url); } catch ( MalformedURLException e) { System.out.println("Can´t get URL: " ); } add(showarea); } public void paint(Graphics g) { InputStream filecon = null; DataInputStream filedata = null; String fileline; try { filecon = fileur.openStream(); filedata = new DataInputStream(filecon); while ((fileline = filedata.readLine()) != null) { showarea.appendText(fileline+" "); } } catch (IOException e) { System.out.println("Error in I/O:" + e.getMessage()); } } } 七、动态使用网络上资源 在前面介绍的例子的基础上,可以动态地利用网络上的资源。其方法是编制一个线程,每隔一定时间自动到相应结点读取最新的内容。本文对线程的编制不再展开,读者可参考有关文章或直接套用下面的例子。 例如对上例中读取http://www.shu.edu.cn/~xyx/doc/manhua.html文件内容的例子,加入线程后如下所示。该例子每隔5秒更新一次数据。如果http://www.shu.edu.cn/~xyx/doc/manhua.html中存放的是一些变化较快的信息如股市行情等,并有程序随时动态地更新其内容,则在Web中加入这种Java Applet,可以让流览者得到动态的信息。进一步,也可以在程序中对数据进行处理,并用图形方式显示处理结果。例如将各时刻的数据绘制成曲线,流览者可以看到动态变化的曲线。 //程序11 import java.io.*; import java.net.*; import java.awt.*; import java.applet.*; public class dynashow extends java.applet.Applet implements Runnable { Thread dthread; URL fileur; TextArea showarea = new TextArea("Wait for a while...",10,70); public void init() { String url = " http://www.shu.edu.cn/~xyx/doc/manhua.html "; try { fileur = new URL(url); } catch ( MalformedURLException e) { System.out.println("Can´t get URL: " ); } add(showarea); } public void start() { if (dthread == null) { dthread = new Thread(this); dthread.start(); } } public void stop() { if (dthread != null) { dthread.stop(); dthread = null; } } public void run() { InputStream filecon = null; DataInputStream filedata = null; String fileline; while(true){ try { filecon = fileur.openStream(); filedata = new DataInputStream(filecon); while ((fileline = filedata.readLine()) != null) { showarea.appendText(fileline+" "); } } catch (IOException e) { System.out.println("Error in I/O:" + e.getMessage()); } try{ dthread.sleep(5000); } catch (InterruptedException e){} repaint(); } } } 八、Java网络能力的限制 出于安全性考虑,在用netscape浏览时,Java Applet 只能和其所在的主机建立连接,因此,前面的程序编译后大部分只能存放在http://www.shu.edu.cn/~xyx对应的主机上。存放到其他主机时需更改程序中的结点地址。否则浏览器将显示安全出错。 但对显示网络上其他HTML文档没有此限制(如程序8、9),读者可以将程序编译后放到任意WWW服务器或FTP服务器,均可正常运行。 此外,当浏览器从本地盘打开调用Java Applet的HTML文档时,也不受此限制。因此,本文所有的程序都可存放在本地盘编译,只要用netscape的File/Open File菜单打开,便可正确运行。 对于另一种Java程序--Java Application,也无此限制,例如对于读取网络上文件内容的程序10,对应的Java Application可作如下编程: ●程序11 import java.io.*; import java.net.*; import java.awt.*; class showfile2 { public static void main(String args[]){ InputStream filecon = null; DataInputStream filedata = null; String fileline; String url = "http://www.shu.edu.cn/~xyx/doc/manhua.html"; URL fileur; try { fileur = new URL(url); filecon = fileur.openStream(); filedata = new DataInputStream(filecon); while ((fileline = filedata.readLine()) != null) { System.out.println(fileline+" "); } } catch (IOException e) { System.out.println("Error in I/O:" + e.getMessage()); } } } 将其以showfile2.java存盘,用javac showfile2.java编译后,只需执行“java showfile2”便可以在屏幕上打印出http://www.shu.edu.cn/~xyx/doc/manhua.html 文件的内容。 九、创建URL对象的方法 在前面的例子中我们统一使用new URL(url字符串)的形式创建URL对象。其实,Java提供了四种创建URL对象的形式: 1.new URL(url字符串) 本文中的程序均采用此种格式,如: new URL("http://www.shu.edu.cn/~xyx/doc/manhua.html") 2.new URL(协议,主机名,文件名或路径) 如程序2中的 String url = "http://www.shu.edu.cn/~xyx/img/shnet.jpg"; image = getImage(new URL(url));部分可改为: image = getImage(new URL("http","www.shu.edu.cn","/~xyx /img/shnet.jpg")); 3.new URL(协议,主机名,端口号,文件名或路径)1 如:new URL("http","www.shu.edu.cn",80, "/~xyx/doc/manhua.html") 4.new URL(基准url,文件名或路径) 十、实现网络功能的其他方法 以上着重介绍了利用Java的URL类实现从网络上获取声音、 图象、HTML文档及文件数据的编程方法。Java的网络功能很强大,除上面介绍的外,还可以利用URLconnection 类实现更广泛的网络功能,如向WWW 服务器上的 CGI 程序发送信息等; 通过 Socket 及ServerSocket类,可以自己编写客户软件及服务软件,并可以自己设计通讯协议。 <淘宝热门商品:
 

68.00元  

海洋新奇特购物天堂

 

¥:78.00 

皇冠舒友阁 顶级特效美容护肤 效果才是硬道理

皇冠热销 印疤修复液 消除深浅痘印等色印、有效改善凹凸疤痕

来源:程序员网

小小豆叮