1、Java语言程序设计实用教程课程主要内容 Java运行与开发环境 Java的语法规范 关键字 空格 常量 变量 运算符 分隔符 注释 控制结构 面向对象的编程方法 Java的基本类库 Java的应用:字符串处理、异常处理、数据结构、输入输出流、多线程、图形用户第1章Java运行与开发环境4本章学习要点:了解Java的发展 了解Java的特点 掌握Java程序开发工具JDK的配置及应用 掌握Java程序的基本要素及编码规范 Sun公司简介 Stanford University Network的简写,中文的意思就是“斯坦福大学网络公司”。Sun起初是由包括Scott McNealy在内的四名在斯
2、坦福大学和加州大学Berkeley分校的研究生在1982年2月正式注册创建 主要的产品:软件方面:Solaris、MySQL、Java 硬件方面:服务器、存储器Java发展简史 1990,Green项目组创建Oak语言,这就是Java语言的前身 1996年1月,Sun发布Java 1.0 1998年夏末又推出了Java 2.0 1999年,为了将Java 2的应用拓展到各个领域中,Sun推出了三个版本的Java 2平台,这就是J2ME、J2SE和J2EE,J2EE由此诞生了 Java术语术语1、JVM Java virtual machine2、JRE Java runtime environ
3、ment3、API Application programming interface4、JDK Old name for Java technology5、Java 2、Java 2 Platform、J2 SDK Current name平台 Java包括 Java语言 Java标准类库 JDK、JVM和JRE 所以严格意义上来说Java不仅是一种语言,也不仅是一种平台,而是一种全面的技术。适用于:Sparc,X86,Solaris Windows MacOS SGI Linux OS/2,AIX,OS/400,MVSJVMJava programwin32MacLinuxUnixJava
4、的特点 跨平台,高可移植性 网络特性:applets,servlets,JSP OOP:面向对象,封装(encapsulation)、多态性(polymorphism)和继承(inheritance)鲁棒性:主要体现在出错处理的健壮性方面 安全性 多线程性 解释性 Java虚拟机 生产力:进入市场的时间更快运行程序的两种方式运行程序的两种方式q编译(速度快、与平台相关)q解释(效率低、与平台无关)编译方式编译方式解释方式解释方式Java的解决方案的解决方案1、编译、编译+解释;解释;2、效率低于、效率低于C+,但可以跨平台;,但可以跨平台;3、源代码经编译成为字节码(、源代码经编译成为字节码(
5、bytecode);4、通过虚拟机(、通过虚拟机(JVM)解释字节码;)解释字节码;5、虚拟机实现的多样性。、虚拟机实现的多样性。安裝 JDK 从 下载 MS windows Unix/Linux Mac OS 安装 设定环境变量 Run#java version CLASSPATH 的问题JDK的目录结构 Bin:一些实用的本地平台工具 Demo:用于学习的java程序示例和源码 Include:使用Java本地接口和JVM调试接口的本地代码的C语言的头文件 Jre:开发环境的jre,可以设置server参数 Lib:开发工具使用的文件(和库),包括tools.jar,dt.jar等等 Sa
6、mple:学习例子 根目录下的一些文件:一些自述文件、版权、LICENSE文件等Java程序类型Java Application:可以独立运行Java Applet:不能独立运行,它可以使用Applet Viewer或其他支持Java的浏览器运行不论是哪种Java程序,都保存成后缀为.java的文件一个简单的Java程序“Hello world”可以使用任何編輯器撰寫:public class Hello public static void main(String argv)System.out.println(Hello world.);以hello.java為檔名儲存#javac d.h
7、ello.java(接著你可以在相同的路徑上看到hello.class)#java hello(執行 hello.class)源代码 公共类必须放在与其同名的文件中/Hello.java import java.util.*;导入程序包public class Hello public static void main(String args)System.out.println(“Hello,world!”);类方法,通过类名可直接调用 参数(引数)列表 程序入口,整个程序只能有一个 main()所有的类都可用此方法 类System提供程序访问系统资源的方法.System.in 代表键盘,S
8、ystem.out 代表监视器注释 使用提示命令字元使用提示命令字元第一个Java Applet applet 在支持Java的浏览器上运行 嵌入HTML页面中 可以使用appletviewer来测试,也可以直接点击IE进行浏览HelloWorld.javaimport java.applet.*;import java.awt.*;/*The HelloWorld class implements an applet that*simply displays Hello World!.*/public class HelloWorld extends Applet public void p
9、aint(Graphics g)/Display Hello World!“g.drawString(Hello world!,50,25);Hello.htmlA Simple ProgramHere is the output of my program:Eclipse的使用 IBM 花了4000 万美元开发Eclipse,并把它作为一个开放源代码项目发布 Eclipse 是一个基于 Java 的可扩展IDE(Integrated Development Environment)开发平台,被吹捧为一个万能的工具集成平台:通过插件支持非Java程序的开发 Eclipse 的开发由Eclips
10、e.org 协会管理和指导(http:/www.Eclipse.org)将下载的eclipse-SDK-*-win32.zip解压后执行运行文件eclipse.exeEclipse 下载4/8点选Downloads,选择Eclipse版本下载。选择国内中心下载速度较快!Eclipse 下载4/8点选Downloads,选择Eclipse版本与下载位置。可选择国网中心下载速度较快!Eclipse下载5/8选择Eclipse Classic for Windows,大小约140MBEclipse基本配置:WindowPreferenceEclipse基本配置:JavaInstalled JRESE
11、clipse基本配置:GeneralWorkspaceEclipse基本配置:JavaBuild PathEclipse基本配置:JavaEditorEclipse基本配置:GeneralEditorsEclipse基本配置:GeneralContent Types认证 SCJP(sun certified java programmer):Sun公司对Java平台的程序员认证:培训课程(费用大致在2500-3000人民币),准考证(certification voucher,费用现在是1250元)SCJD(sun certified java developer):Sun公司对Java平台的
12、开发者认证:程序设计测试(费用现在是2100元),一个简答题的考试(费用现在是1250元),SCEA(sun certified enterprise architect for J2EE technology):Sun公司对J2EE技术的企业架构师认证实验内容 1.用文本编辑器编写一个HelloWorld的应用程序和Applet 2.用Eclipse编写一个project,其中包含:HelloWorld的字符输出 HelloWorld的窗体输出第一次实验的总结第一次实验的总结q 大家都很认真的对第一个Java程序进行调试,但还有一些小问题:q 对JRE、JDK概念还不够清晰q 对Javac,
13、Java命令掌握的不够q Dos的命令掌握得不够,需要稍微增强一下这方面的知识qsetqcd c:myprogramsqC:qDirqdelq 文件名编写不规范:不建议写太长的,有空格的文件名,更不建议采用中文命名练习练习1、Java语言有何特点?语言有何特点?2、Java程序的运行方式?程序的运行方式?3、安装并设置、安装并设置JAVA2运行期环境。运行期环境。4、动手实现简单的、动手实现简单的HelloWorld Application和和Applet。5、使用、使用Eclipse实现实现WelcomeAppJava语言程序设计实用教程第2章 Java的本质47本章学习要点:理解Java的
14、语言结构 理解变量的含义 掌握Java的词法规范 掌握Java的常用保留字 掌握Applet、窗口化应用程序的编写 48简单回顾一下Java程序的主要执行步骤 使用工具编写Java代码,Java代码是由Java语句和声明组成的纯文本文件 文本编辑器:记事本、Word 专门的IDE工具:Eclipse、Jbuilder、JCreator 将Java代码交由Java编译器进行编译,如使用Javac命令,产生扩展名为.java的文件 Java应用程序的执行,可使用Java命令 程序结构代码分析之一代码分析之二52Java语言的组成 标识符 关键字 分隔符 53标识符常量、变量、方法、类的名称常量、变
15、量、方法、类的名称,以字母、下划线或以字母、下划线或$开头。开头。严格区分大小写。严格区分大小写。Ad、ad、aD是不同的标识符。是不同的标识符。约定:约定:常量用全用大写字母,并用下划线分割线单词、变量用小写字母开始,类、函数和接口以大写字常量用全用大写字母,并用下划线分割线单词、变量用小写字母开始,类、函数和接口以大写字母开始。母开始。使用能准确说明含义的英文描述符,例如:使用能准确说明含义的英文描述符,例如:firstName,不提倡使用,不提倡使用x1,y1等表达过于简单,不能表等表达过于简单,不能表达出含义的描述符达出含义的描述符采用所开发的软件系统所在的领域名词,例如采用所开发的软
16、件系统所在的领域名词,例如client VS customer尽量少用缩写,尽量少用缩写,Number,nbr、no或者是或者是num;避免使用长名字(一般不超避免使用长名字(一般不超15个字母)个字母)避免使用下划线作为名字的首末字母避免使用下划线作为名字的首末字母命名风格要统一,尽量与所采用的操作系统或开发工具保持一致,如命名风格要统一,尽量与所采用的操作系统或开发工具保持一致,如Windows“大小写大小写”混排,混排,AddChild,而,而UNIX是是“小写加下划线小写加下划线”,add_child程序中不要出现标识符完全相同的局部变量和全局变量程序中不要出现标识符完全相同的局部变量
17、和全局变量变量的名字应使用变量的名字应使用“名词名词”或或“形容词形容词+名词名词”,如:,如:float value,float oldValue全局函数的名字应使用全局函数的名字应使用“动词动词”或者或者“动词动词+名词名词”,如:,如:DrawBox()用正确的反义词命名具有互斥一样的变量或者函数方法:用正确的反义词命名具有互斥一样的变量或者函数方法:minvalue,maxValue,SetValue,GetValue尽量避免名字中出现数字编号:尽量避免名字中出现数字编号:value1,value2全局变量前加前缀全局变量前加前缀g_,表示,表示global,例如:,例如:Int g_
18、howManyPeople类的数据成员前加前缀类的数据成员前加前缀m_,表示,表示member,例如,例如 Void SetValue(int width,int height)m_width=width;m_height=height;保留关键字(保留关键字(Keywords)q关键字也称保留字,是Java语言本身使用的标识符,它有其语法含义。55分隔符 分隔符用来分隔Java程序中的基本元素,有注释、空白符、和普通分隔符三种。注释:先写注释后写代码,或者边写代码边写注释/单行注释/*/多行注释/*/多行注释(文档注释,使用标记),可由javadoc程序处理 空白符:空格、回车、换行符、制表
19、符 普通分隔符(6种)();,.56常量 qJava程序运行时值不可修改的量称为常量,分为字面值(即常数)与标识符常量两种。q标识符常量实际上是一个变量,但它的值一旦初始化以后,就不允许再发生改变。因此标识符常量要先定义后使用,一般用于给一个常数取一个有意义的名字。q字面值即是Java源程序中表示的常数值,如12.6、246,false等,表示一个个具体的值。q常量在表达式中用文字串表示,它区分不同类型,如整型常量123、-15,实型常量12.1f,字符常量x,布尔常量true,字符串类型常量Test等。57常量的数字类型 q整数常量:字节型(byte)、短整型(short)、整型(int)、
20、长整型(long),在内存的存储长度分别为8位、16位、32位和64位q浮点数常量:单精度(float)和双精度(double),在内存的存储长度分别为32位和64位,Java缺省为双精度,可在浮点数的后面加f或者F后缀强制转换成单精度,如:float x=10.8fq4和4.0q布尔常量:ture或false,不是1或0q字符常量:采用Unicode字符集,16位表示,是用单引号括起来的一个字符,如aUnicode编码lJava的字符使用16位的Unicode编码表示,它可以支持世界上所有语言。l一般计算机语言通常使用ASCII码,用8位表示一个字符。ASCII码是Unicode码的一个子集
21、,Unicode表示ASCII码时,其高字节为0,它是其前255个字符。lUnicode字符通常用十六进制表示。例如:“u0000”“u00ff”表示ASCII码集。“u”表示转义字符,它用来表示其后4个十六进制数字是Unicode代码。转义序列 Java中,字符常量是用单引号括起来的单个字符。但在应用中可能要用到一些特殊的字符,例如回车符、换行符、单引号、双引号等,对于这些字符在使用文本编译器时就会遇到问题。此外,某些字符(如单引号、双引号)在Java中也有特殊的意义。出于这些原因,Java允许对特殊的字符使用转义序列。转义序列以反斜杠()开始,后面跟一个对编译器来说有特殊意义的字符。例如:
22、表示单引号,r表示回车,n表示换行60变量变量 l与常量不同,变量是程序运行时值发生改变的值,即在程序中不同时刻可以被赋予不同的值。变量对应着内存空间中的一个或几个单元,变量的值就存放在所对应的内存单元中。变量名就是给对应的内存单元取一个有意义的名称,这样在程序中,可以按变量名称来区分和使用这些内存单元。变量主要用于保存数据输入、数据输出或中间值。l变量的定义:int minValue=100;或 int minValue;mintValue=100;l变量的作用域 运算符和表达式 数据的类型除了限定数据的存储方式、取值范围之外,还定义了对该数据类型可进行的操作即运算。表示各种不同运算的符号称
23、为运算符,参与运算的数据称为操作数。表达式是由操作数(如变量,常量等)和运算符按一定语法形式组成的一个有意义的式子。如:a+b、(a+b)*(a-b)。以上都是有意义的表达式 62程序的格式 q 编写代码的不但要做到正确,还要做到可阅读编写代码的不但要做到正确,还要做到可阅读q使用空行,分隔程序的段落,见使用空行,分隔程序的段落,见P39P39q每行代码只做一件事情,领会每行代码只做一件事情,领会P39P39风格良好和不良风格良好和不良的代码的代码q代码行内空格,领会代码行内空格,领会P40P40例子:例子:q关键字之后要留空格关键字之后要留空格q函数名之后不要留空格函数名之后不要留空格q赋值
24、、比较、算术、逻辑、位域操作符等二元赋值、比较、算术、逻辑、位域操作符等二元操作符前后要加空格操作符前后要加空格q一元操作符前后不加空格一元操作符前后不加空格q对齐(见对齐(见P41P41):):和和 应独占一行且在同一列,应独占一行且在同一列,如果出现嵌套,则使用缩进对齐如果出现嵌套,则使用缩进对齐q长行拆分:代码行一般控制在长行拆分:代码行一般控制在8080个字符内,操作符个字符内,操作符放在新行之首以突出操作符放在新行之首以突出操作符q类的格式类的格式:(:(1 1)属性在前,方法在后;)属性在前,方法在后;(1 1)方)方法在前,属性在后法在前,属性在后63总结:良好的代码编写 q定义
25、的变量、类名、函数、方法等要有含义q要写注释q代码的格式要整齐q形成一致的代码编写风格Java GUI-AWTq SUNSUN的的AWTAWT:JavaJava处理图形用户界面的初始途径。处理图形用户界面的初始途径。q AWTAWT库处理图形的基本方法:把这些元素的创建和行为库处理图形的基本方法:把这些元素的创建和行为交给目标平台上的本地交给目标平台上的本地GUIGUI工具箱进行处理。工具箱进行处理。q理论上理论上 “一次编写,随处运行一次编写,随处运行”,实际上,实际上,AWTAWT在在不同平台上的效果不一致;不同平台上的效果不一致;q比如比如WindowsWindows和和LinuxLin
26、ux的缺省字体、大小和样式都不的缺省字体、大小和样式都不一样,需要显示的设置字体样式和大小等;在一样,需要显示的设置字体样式和大小等;在WindowsWindows很好看的布局有可能在很好看的布局有可能在LinuxLinux变得乱七八糟;变得乱七八糟;组件间的间隔因为平台的不同而有很多变化。组件间的间隔因为平台的不同而有很多变化。q所以有人嘲笑为所以有人嘲笑为 “一次编写,随处调试一次编写,随处调试”。qAWTAWT为每一个组件分配一个操作系统窗口。大型应为每一个组件分配一个操作系统窗口。大型应用程序中,大量这样的窗口会占用大量资源降低系用程序中,大量这样的窗口会占用大量资源降低系统性能,称为
27、重量级统性能,称为重量级(heavyweight)(heavyweight)组件组件Java GUI-SwingqSun与Netscape合作开发出:SwingqSwing的很多用户界面元素,如菜单、按钮等,都是画在他们的容器中的。q占用更少的系统资源,增加了更多的组件,且允许控制程序的外观。qSwing并不是完全摒弃AWT,而是一组建立在AWT之上的包,它提供了大量预建的类import java.awt.*;import javax.swing.*;SWING的类(一)JApplet:java.lang.Applet的扩展版本。JButton:按钮或命令按钮。JCheckBox:复选框。JC
28、heckBoxMenuItem:复选菜单项。JComboBox:组合框。JComponent:Swing组件的基类。JDialog:对话框窗口的基类。JLabel:标签项。JList:列表框。JMenu:菜单。JMenuBar:菜单条。JMenuItem:菜单项。JPanel:通用的轻量容器。JPasswordField:文本框(用来输入口令)。SWING的类(二)JPopupMenu:弹出式菜单。JPopupMenu.Separator:分隔线(弹出式菜单专用)。JProgressBar:进度条。JRadioButton:单选按钮。JRadioButtonMenuItem:单选菜单。JScr
29、ollBar:滚动条。JTabbedPane:标签板。JTable:二维表。JTextArea:文本域。(多行显示)JTextField:文本行(可编辑)。JTextPane:文本板。JToolBar:工具栏。JWindow:窗口。Swing图形用户界面设计概述 在Java的GUI程序中,需要一个框架窗口(JFrame),并添加一些部件到该JFrame,但JFrame 不是一个容器,它只是一个框架 JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContent
30、Pane 就是用于获取和设置其 Content Pane 的。JFrame的默认大小为00并且是不可见的,用setBounds方法设置框架的大小,setVisible(true)显示窗口 BorderLayout 这是一个布置容器的边界布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:南、北、东、西和中间区域。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST 和 CENTER。当使用边界布局将一个组件添加到容器中时,要使用这五个常量之一 Panel p=new Panel();p.setLayout(new BorderLay
31、out();p.add(new Button(Okay),BorderLayout.SOUTH);BorderLayout进一步举例import java.awt.*;import java.applet.Applet;public class buttonDir extends Applet public void init()setLayout(new BorderLayout();add(new Button(North),BorderLayout.NORTH);add(new Button(South),BorderLayout.SOUTH);add(new Button(East),
32、BorderLayout.EAST);add(new Button(West),BorderLayout.WEST);add(new Button(Center),BorderLayout.CENTER);71创建Java小程序(Applet)q使用将.class代码嵌入HTML文件中q客户端访问网页时,Applet小程序会从Web服务器上下载到本地,并在浏览器里运行q本地计算机运行,可减少Web服务的负载,提高系统性能q要求浏览器有JRE运行环境qApplet为任何applet小程序的超类,JApplet为Applet类的扩展Applet的基本工作原理 Applet的继承关系图Applet基
33、础 qjava.applet包包含有三个接口:AppletContext接口、AppletStub接口、AudioClip接口及一个Applet类。qAppletContext接口:提供Applet环境文件信息,诸如Applet所在的文件有哪些Applet,或是在状态栏上显示信息。qAppletStub接口:为Applet与浏览器环境的沟通接口。qAudioClip接口:提供音频的接口,音频文件必须是AU、AIFF、WAVE、或者MIDI格式qJApplet类是在javax.swing包中Applet程序的生命周期q init()init()q该方法用于该方法用于AppletApplet的初始
34、化。当的初始化。当AppletApplet被第一次加被第一次加载时,该方法会被自动调用。在这个方法中,可以载时,该方法会被自动调用。在这个方法中,可以做一些必要的初始化工作,这些内容包括是创建和做一些必要的初始化工作,这些内容包括是创建和初始化程序运行所需要的对象实例,把图形或字体初始化程序运行所需要的对象实例,把图形或字体载入内存,处理载入内存,处理PARAMPARAM参数等。参数等。q Start()Start()q该方法用来启动浏览器运行该方法用来启动浏览器运行AppletApplet的主线程。调用的主线程。调用init init 方法将方法将AppletApplet的初始化工作完成之后
35、,的初始化工作完成之后,startstart方法会被自动调用;当用户刷新包含方法会被自动调用;当用户刷新包含AppletApplet的页面的页面或者从其它页面返回包含或者从其它页面返回包含AppletApplet的页面时,的页面时,startstart方法也会被自动调用方法也会被自动调用q也就是说,也就是说,startstart方法可以被多次调用,这与方法可以被多次调用,这与initinit方法是有区别的。基于这样的原因,可以把只调用方法是有区别的。基于这样的原因,可以把只调用一次的代码放在一次的代码放在initinit方法中,而不能放在方法中,而不能放在startstart方方法中法中App
36、let程序的生命周期q stopstop()()q该方法在用户离开包含该方法在用户离开包含AppletApplet的页面时会被自动调的页面时会被自动调用。和用。和startstart方法一样,方法一样,stopstop方法也可以被多次调方法也可以被多次调用。该方法的作用是,当用户离开包含用。该方法的作用是,当用户离开包含AppletApplet的页的页面时,停止一些耗费系统资源的活动,如播放动画面时,停止一些耗费系统资源的活动,如播放动画等。如果在等。如果在AppletApplet中没有动画、音乐文件播放,那中没有动画、音乐文件播放,那么通常可以不使用这个方法。么通常可以不使用这个方法。q d
37、estroy()destroy()q当用户正常关闭浏览器时,浏览器会调用当用户正常关闭浏览器时,浏览器会调用destroydestroy方法。该方法用于回收系统资源,如回收图形用户方法。该方法用于回收系统资源,如回收图形用户界面的系统资源、关闭连接等。至于界面的系统资源、关闭连接等。至于AppletApplet实例本实例本身,会由浏览器来负责从内存中清除,不需要在身,会由浏览器来负责从内存中清除,不需要在destroydestroy方法中来清除。方法中来清除。q 四个方法四个方法initinit、startstart、stopstop和和destroydestroy分别对应了分别对应了Appl
38、etApplet的初始化、启动、暂停直到消亡的各个阶段。的初始化、启动、暂停直到消亡的各个阶段。Applet的生命周期和对应的方法 AppletApplet被设计为从远程站点下载然后在本地执行,所以安被设计为从远程站点下载然后在本地执行,所以安全问题非常重要。如果用户在游览器中启用了全问题非常重要。如果用户在游览器中启用了JavaJava,那么浏览,那么浏览器就会自动下载网页中的器就会自动下载网页中的AppletApplet代码并执行。用户没有机会来代码并执行。用户没有机会来确认或者停止确认或者停止AppletApplet的运行。基于这样的原因,与的运行。基于这样的原因,与Applicatio
39、nApplication应用程序相比,应用程序相比,AppletApplet被作了限制。被作了限制。AppletApplet的限制执行环境常常称作的限制执行环境常常称作“沙箱(沙箱(sandbox sandbox)”。运行在沙箱中的运行在沙箱中的AppletApplet不能更改或探查用户的系统。不能更改或探查用户的系统。当运行在沙箱中时:当运行在沙箱中时:(1 1)AppletApplet不能读写本地计算机的文件系统,也不能运行不能读写本地计算机的文件系统,也不能运行任何本地可执行程序。任何本地可执行程序。(2 2)AppletApplet不能同除它们的下载处的服务器(该服务器称不能同除它们的
40、下载处的服务器(该服务器称作原始主机)以外的其他任何主机通信。这条规则使得作原始主机)以外的其他任何主机通信。这条规则使得AppletApplet不能探查企业内部网上的资源。不能探查企业内部网上的资源。Applet安全基础安全基础 (3 3)AppletApplet只能获取本地计算机中的以下信息:当前使用只能获取本地计算机中的以下信息:当前使用的的JavaJava版本;操作系统的名字和版本;用来分离文件、路径以版本;操作系统的名字和版本;用来分离文件、路径以及行的字符。除此以外,及行的字符。除此以外,AppletApplet不能获取任何其它关于本地计不能获取任何其它关于本地计算机的信息。算机的
41、信息。(4 4)AppletApplet弹出的所有窗口都会带有一警告消息,告诉用弹出的所有窗口都会带有一警告消息,告诉用户这是一个户这是一个AppletApplet。因为因为JavaJava解释器会检查所有的危险指令和程序区域,所以解释器会检查所有的危险指令和程序区域,所以一个带有敌意的一个带有敌意的AppletApplet不能覆盖系统内存、改变操作系统赋予不能覆盖系统内存、改变操作系统赋予的特权或者使计算机崩溃。的特权或者使计算机崩溃。在某些情况下,这些限制显得过于严格。为了充许在不同在某些情况下,这些限制显得过于严格。为了充许在不同情况下使用不同的安全级别,情况下使用不同的安全级别,Jav
42、aJava引入了签名引入了签名AppletApplet。一个签名一个签名AppletApplet带有一个能够表明签名者特征的证书。加带有一个能够表明签名者特征的证书。加密技术保证了这样的证书不可能被伪造。如果信任签名者,那密技术保证了这样的证书不可能被伪造。如果信任签名者,那么可以选择给该么可以选择给该AppletApplet额外的特权。被完全信任的额外的特权。被完全信任的AppletApplet可以可以获得同本地应用程序一样的访问特权。获得同本地应用程序一样的访问特权。Applet安全基础安全基础AppletApplet与与JARJAR文件文件 JARJAR文件概述文件概述 JARJAR(J
43、ava ArchiveJava Archive)是一种与平台无关的文档格式,一)是一种与平台无关的文档格式,一般叫般叫JavaJava存档,它相当于一种压缩格式,可以把众多的文档存档,它相当于一种压缩格式,可以把众多的文档合成一个文件。合成一个文件。大多数的大多数的AppletApplet都由多个类组成,使用浏览器来浏览这都由多个类组成,使用浏览器来浏览这样的样的AppletApplet时,由于一个文件需要一个连接,所以浏览器需时,由于一个文件需要一个连接,所以浏览器需要使用多个连接,这样在一个低速的网络上加载一个要使用多个连接,这样在一个低速的网络上加载一个AppleApple需需要好几分钟
44、。这里值得注意的是,加载要好几分钟。这里值得注意的是,加载AppleApple需要较长的时间需要较长的时间的原因并不是因为类文件太大,关键的原因是建立到服务器的原因并不是因为类文件太大,关键的原因是建立到服务器的连接需要的时间长。的连接需要的时间长。对于对于AppletApplet来说,来说,JARJAR文件可以将多个需要的类文件合并文件可以将多个需要的类文件合并为一个单一的文件。这是很有意义的,这样这些类文件可以为一个单一的文件。这是很有意义的,这样这些类文件可以作为一个整体使用一个作为一个整体使用一个HTTPHTTP事务下载到浏览器中,从而大大事务下载到浏览器中,从而大大提高浏览速度。提高
45、浏览速度。jarjar命令格式如下:命令格式如下:jar jar 选项选项1 1 选项选项n n 文件名文件名1 1 文件名文件名2 2 jarjar命令的选项:命令的选项:c c 创建新的存档创建新的存档,并把文件添加至其中,如果一个文件名是一个并把文件添加至其中,如果一个文件名是一个目录,它将被递归处理目录,它将被递归处理 t t 列出存档内容的列表列出存档内容的列表 x x 展开存档中的命名的(或所有的展开存档中的命名的(或所有的文件文件 u u 更新已存在的存档更新已存在的存档 v v 生成详细输出到标准输出上生成详细输出到标准输出上 f f 指定存档文件名指定存档文件名 m m 包含
46、来自标明文件的标明信息包含来自标明文件的标明信息 0 0 只存储方式;未用只存储方式;未用ZIPZIP压缩格式压缩格式 M M 不产生所有项的清单(不产生所有项的清单(manifestmanifest文件文件 i i 为指定的为指定的jarjar文件产生索引信息文件产生索引信息 C C 改变到指定的目录改变到指定的目录jar命令命令 在默认的情况下,浏览器使用浏览器的缓存来缓存在默认的情况下,浏览器使用浏览器的缓存来缓存AppletApplet代码。在这种情况下,如果访问一个曾经访问过的代码。在这种情况下,如果访问一个曾经访问过的包含了包含了AppletApplet的站点,并且浏览器缓存仍然包
47、含所需要的的站点,并且浏览器缓存仍然包含所需要的JARJAR文件,并且这个文件,并且这个JARJAR文件没有改变,那么这个文件没有改变,那么这个JARJAR文件文件就不会被重新下载。就不会被重新下载。但是在正常情况下,浏览器缓存并不能够保持足够长但是在正常情况下,浏览器缓存并不能够保持足够长的时间。比如,如果每个月只访问一次某个站点,那么极的时间。比如,如果每个月只访问一次某个站点,那么极有可能每次都要重新下载并刷新缓存。有可能每次都要重新下载并刷新缓存。JavaJava插件支持一种机制来插件支持一种机制来“粘滞粘滞”AppletApplet,如果我们,如果我们想让一个想让一个AppletAp
48、plet停留在用户端的时间更长,就需要使用停留在用户端的时间更长,就需要使用OBJECTOBJECT标记来指定标记来指定CACHE_OPTIONCACHE_OPTION、CACHE_ARCHIVECACHE_ARCHIVE和和CACHE_VERSIONCACHE_VERSION键的值。键的值。CACHE_VERSIONCACHE_VERSION键用来代表键用来代表CACHE_ARCHIVECACHE_ARCHIVE列表中指定列表中指定的的JARJAR文件需要的版本号码。如果这些版本已经在客户机文件需要的版本号码。如果这些版本已经在客户机上,那他们将不必被下载。上,那他们将不必被下载。JAR缓存
49、缓存 APPlET路径配置问题(一)在用网页文件在用网页文件MyHtml.htmlMyHtml.html打开打开AppletApplet,这里假设我们要,这里假设我们要用的文件叫用的文件叫MyApplet.classMyApplet.class的时候要注意,要将的时候要注意,要将MyHtml.htmlMyHtml.html文件放在该程序的根目录下。所谓文件放在该程序的根目录下。所谓“根目录根目录”这里是指这个目录应当包含所有这里是指这个目录应当包含所有AppletApplet里用到的里用到的packagepackage的的目录。目录。先看简单的情况,如果你的先看简单的情况,如果你的Applet
50、Applet程序是使用的默认包,程序是使用的默认包,那么你就把那么你就把MyHtml.htmlMyHtml.html文件和文件和MyApplet.classMyApplet.class文件放在一文件放在一个目录里。比如说有个目录叫个目录里。比如说有个目录叫theDirectorytheDirectory,那么,那么MyHtml.htmlMyHtml.html和和MyApplet.classMyApplet.class就都放在这个里面。这个时就都放在这个里面。这个时候只要在候只要在MyHtml.htmlMyHtml.html中加入如下语句就好了:中加入如下语句就好了:MyAppletMyAppl