Java程序设计之网络编程Java安全Web编程J2EE概述课件

上传人:工**** 文档编号:570164520 上传时间:2024-08-02 格式:PPT 页数:153 大小:1.03MB
返回 下载 相关 举报
Java程序设计之网络编程Java安全Web编程J2EE概述课件_第1页
第1页 / 共153页
Java程序设计之网络编程Java安全Web编程J2EE概述课件_第2页
第2页 / 共153页
Java程序设计之网络编程Java安全Web编程J2EE概述课件_第3页
第3页 / 共153页
Java程序设计之网络编程Java安全Web编程J2EE概述课件_第4页
第4页 / 共153页
Java程序设计之网络编程Java安全Web编程J2EE概述课件_第5页
第5页 / 共153页
点击查看更多>>
资源描述

《Java程序设计之网络编程Java安全Web编程J2EE概述课件》由会员分享,可在线阅读,更多相关《Java程序设计之网络编程Java安全Web编程J2EE概述课件(153页珍藏版)》请在金锄头文库上搜索。

1、Java程序设计之网络编程重庆大学计算机学院教学课件Java程序设计之网络编程Java安全Web编程J2EE概述第16章Java安全技术Java程序设计之网络编程Java安全Web编程J2EE概述主要内容n16.1安全基本知识n16.2Java的安全模型n16.3Java的密码学结构Java程序设计之网络编程Java安全Web编程J2EE概述16.1安全基本知识n攻击,保护攻击,保护n密码学密码学,机密性机密性,认证认证,证书n完整性完整性,认可性认可性n审计和日志审计和日志,安全策略和访问控制安全策略和访问控制Java程序设计之网络编程Java安全Web编程J2EE概述主要内容n16.1安全

2、基本知识n16.2Java的安全模型n16.3Java的密码学结构Java程序设计之网络编程Java安全Web编程J2EE概述16.2Java的安全模型n安全模型的演化nJava2安全模型nJava2的安全划分n应用程序安全性n小程序安全性nJ2SDK安全工具nJava小程序的安全部署Java程序设计之网络编程Java安全Web编程J2EE概述最初安全模型为沙箱模型沙箱模型JVMValuableResources()SandBoxRemoteCodeLocalcode为从开放的网络中获取的非信任代码的提供了一个受限受限制的运行环境制的运行环境。沙箱模型的实质是本地代码对重要的系统资源(如文件系

3、统)有全部的访问权限,而下载的远程代码(例如Applet)则不被信任并且仅能访问沙箱里提供的有限资源Java程序设计之网络编程Java安全Web编程J2EE概述JDK1.1安全模型安全模型JVMValuableResources()SandBoxRemoteCodeLocalcode使用数字签名服务,可以用与Java编写的本地程序类似的方式对待可信的可信的AppletJava程序设计之网络编程Java安全Web编程J2EE概述JDK1.2中的新安全体系结构JVMValuableresources()PDPDSandboxSecuritypolicyClassloaderLocalorremot

4、ecodeProtectionDomain是在策略数据库中指定的,授予CodeSource的Permission的聚合体。通过ClassLoader装入到JVM的每个类文件被分配给一个ProtectionDomain。Java程序设计之网络编程Java安全Web编程J2EE概述Java2安全模型BootstrapClassfilesSystemClassfilesUserClassfilesBytecodeVerifierBootstrapClassLoaderSystemClassLoaderClassLoaderSecurityManagerProtectionDomainsAccessC

5、ontrollerOperatingSystem,HardwareCodeSource(URL,Certificates)PermissionskeystoreJava程序设计之网络编程Java安全Web编程J2EE概述Java2安全模型nJava安全主要建立在Java运行时环境的三个方面:ByteCodeVerifier(字节码验证器)、SecurityManager(安全管理器)以及ClassLoader(类装入器)。n代码验证(代码验证(BytecodeVerifier)n确保所下载的代码被恰当地格式化,字节码(“Java虚拟机”指令)没有违反语言或虚拟机的安全限制(如,无非法数据转换)

6、,没有执行指针寻址,内部堆栈不能溢出或下溢,以及字节码指令将拥有正确的类型参数。Java程序设计之网络编程Java安全Web编程J2EE概述安全管理器(安全管理器(SecurityManager)nSecurityManager在尝试执行文件I/O和网络I/O、创建新的ClassLoader、操作线程或线程组、启动底层平台(操作系统)上的进程、终止“Java虚拟机”、将非Java库(本机代码)装入到JVM、完成某种类型的系统操作以及将某种类型的类装入到JVM中时激发运行激发运行时访问控制机制时访问控制机制。n例如,JavaApplet沙箱严格地将所下载的Applet约束到被认为是比较安全的有限

7、的运行环境中。Java程序设计之网络编程Java安全Web编程J2EE概述权限(权限(Permission)n一个权限允许代码执行的一个特定的操作,权限可以是特别具体的,也可以是一般化的。n一个权限由三个部分组成:类型,名称和操作。类型是必须的,它是实现了Permission接口的特定的类npermissionjava.security.AllPermission;npermissionjava.lang.RuntimePermissionstopThread;npermissionjava.io./tmp/foo,read;Java程序设计之网络编程Java安全Web编程J2EE概述代码源(

8、代码源(CodeSources)n代码源包含类的从哪里装载的位置信息和对类签名信息。一般情况下,这个位置被表示成一个URL。如果代码被签名,那么代码源里面包含了关于签名者的信息。类可以基于代码源被赋予一定的权限。n保护域(保护域(ProtectionDomains)n是赋予代码源的权限的集合。可以通过策略文件定义。Java程序设计之网络编程Java安全Web编程J2EE概述策略文件(策略文件(Policyfiles)n策略文件是一个控制沙箱的管理元素。n一个策略文件可以包含一个或者多个条目来定义一个保护域。n每个条目是赋予代码源的权限声明。n一般有两个策略文件,一个全局策略文件,一个用户相关策

9、略文件。n全局策略文件影响Java虚拟机种的所有的实例。n策略文件是一个文本文件,可以直接进行编辑。也可以用Java提供的编辑工具policyTool进行编辑。Java程序设计之网络编程Java安全Web编程J2EE概述密钥库(密钥库(Keystores)n通过代码签名可以赋予代码更多的执行自由度。n如果你确信正在执行的代码来自一个可信的组织,你可以允许它访问本地磁盘文件,或者使用打印机等。n被签名的代码依赖于公钥证书,证书被保存在密钥库中。开发者可以使用密钥库中的证书对代码进行签名;n一般用户或者系统管理员可以在执行已签名的代码时参考密钥库发现是谁的签名。Java程序设计之网络编程Java安

10、全Web编程J2EE概述访问控制器(访问控制器(AccessController)n访问关键系统资源时,是否允许或者拒绝,具体结果决定于策略文件的配置。n把一段代码标记为具有一定的特权,影响后续的访问判断。n获取当前调用上下文的一个快照,来自不同上下文的访问控制判断可以参照被保存的上下文。n做特殊安全检查Java程序设计之网络编程Java安全Web编程J2EE概述Java2的策略配置文件SecurityManagersecurity=System.getSecurityManager();if(security!=null)security.checkPermission(Permission

11、perm);如果这个请求被允许,checkPermission不返回任何值;如果被拒绝,抛出异常SecurityException。grantsignedBysigner_names,codeBaseURLpermissionpermission_class_nametarget_name,action,signedBysigner_names;Java程序设计之网络编程Java安全Web编程J2EE概述应用程序安全性n在不使用SecurityManager的情况下n使用SecurityManager的情况n修改策略配置文件Java程序设计之网络编程Java安全Web编程J2EE概述小应用程序

12、安全性通过程序说明在命令行中用AppletViewer执行AppletviewerwriteJava程序设计之网络编程Java安全Web编程J2EE概述J2SDK安全工具nkeytool管理密钥库和证书njarsigner产生和验证Java签名npolicytool图形化的方式管理策略文件。Java程序设计之网络编程Java安全Web编程J2EE概述Keytooln1)创建公/私钥对;n2)发出证书请求到认证权威(CA)n3)从认证权威导入证书回复n4)指明属于其他组织的公钥是受信任的。nKeytool目前能够处理符合X.509标准的证书。JSSE(JavaSecureSocketExtens

13、ion,JSSE)1.0.2以后的版本可以支持pkcs12。Java程序设计之网络编程Java安全Web编程J2EE概述Keytool参数参数参数描述-genkey产生一个密钥对(一个公钥关联一个私钥)-import读取一个证书或者证书链,并存储到密钥库中,同时用一个别名进行标识。-certreq用pkcs10产生一个证书签发请求。-export导出一个和某个别名相关联的证书-list打印整个密钥库中的内容,或者打印与某个别名相关联的证书。-storepasswd修改或指定密钥库的密码-keypasswd修改或者指定某一个密钥对的访问密码-delete删除密钥库中的条目。Java程序设计之网络

14、编程Java安全Web编程J2EE概述KeyTool应用nD:keytool-genkey-aliasjavafan-keyalgrsa-validity750n输入keystore密码:keystoren您的名字与姓氏是什么?nUnknown:JavaFann您的组织单位名称是什么?nUnknown:ComputerSciencen您的组织名称是什么?nUnknown:ChongqingUniversityn您所在的城市或区域名称是什么?nUnknown:Chongqingn您所在的州或省份名称是什么?nUnknown:Chongqingn该单位的两字母国家代码是什么nUnknown:CNn

15、CN=JavaFan,OU=ComputerScience,O=ChongqingUniversity,L=Chongqing,ST=Chonngqing,C=CN正确吗?n否:是n输入的主密码n(如果和keystore密码相同,按回车):Java程序设计之网络编程Java安全Web编程J2EE概述用keytool显示证书的内容nD:keytool-v-printcert-filejavafan.cernOwner:CN=JavaFan,OU=ComputerScience,O=ChongqingUniversity,L=Chongqing,ST=Chongqing,C=CNn发照者:CN=J

16、avaFan,OU=ComputerScience,O=ChongqingUniversity,L=Chongqing,ST=Chongqing,C=CNn序号:43030437n有效期间:WedAug1717:32:39CST2005至:ThuSep0617:32:39CST2007n认证指纹:nMD5:CB:AE:97:24:A9:93:4B:34:E2:3B:95:95:70:E7:70:D5nSHA1:E3:32:0C:68:24:34:CB:6E:02:BF:ED:E6:D8:C0:29:AE:66:5C:20:DDJava程序设计之网络编程Java安全Web编程J2EE概述jars

17、ignernJarsigner用于给打包后的Java程序签名,或者验证签名。Jarsigner可以在签名或者验证签名时,访问由keytool创建的密钥库。选项描述-storepass访问密钥库时,指定口令-keypass指定私钥的保护口令-signedjar指定需要被签名的jar文件-verifyjar文件的签名验证-verbose控制是否输出签名或者验证过程的详细信息-certs与-verify、verbose一起使用,输出包括每个签名证书的信息Java程序设计之网络编程Java安全Web编程J2EE概述policytoolJava运行时环境的安全配置文件java.home/lib/secu

18、rity/java.security(java.home指安装Java运行时环境的目录)中包括两个策略文件:java.home/lib/security/java.policy和user.home/.java.policy(user.home指用户主目录)。PolicyTool缺省修改第二个文件。Java程序设计之网络编程Java安全Web编程J2EE概述Java小程序的安全部署nSimpleScannerApplet程序检查某个主机上的TCP端口是否开放,比如用于WWW服务的80端口,用于SMTP服务的25端口等。Java程序设计之网络编程Java安全Web编程J2EE概述程序运行界面Jav

19、a程序设计之网络编程Java安全Web编程J2EE概述制作和部署安全小程序步骤n编制小程序SimpleScannerAppletn编写Html文件scanner.htmln把程序打包成Jar文件n获取并安装一个支持RSA的签名证书。n用该证书对Jar文件进行签名n用sun的HtmlConvert转换scanner.htmln部署转换后的html文件和已经签名的jar文件n见程序Java程序设计之网络编程Java安全Web编程J2EE概述主要内容n16.1安全基本知识n16.2Java的安全模型n16.3Java的密码学结构Java程序设计之网络编程Java安全Web编程J2EE概述16.3Ja

20、va的密码学结构n16.3.1基本概念n16.3.2核心类n16.3.3消息摘要n16.3.4数字签名n16.3.5数据加密/解密Java程序设计之网络编程Java安全Web编程J2EE概述16.3.1 基本概念nJava密码学结构设计遵循两个原则:(1)算法的独立性和可靠性;(2)实现的独立性和相互作用性。nJava2中主要的密码学服务有以下几种:n数字签名、消息摘要、加密/解密n密钥工厂n密钥库创建与密钥管理n算法参数产生、管理n证书工厂Java程序设计之网络编程Java安全Web编程J2EE概述JDK5.0提供的密码学服务n可以通过修改java.home/lib/security/jav

21、a.security文件安装密码学服务提供者。缺省情况下,Java运行时环境已经安装了下面的提供者:nsecurity.provider.1=sun.security.provider.Sunnsecurity.provider.2=sun.security.rsa.SunRsaSignnsecurity.provider.3=.ssl.internal.ssl.Providernsecurity.provider.4=com.sun.crypto.provider.SunJCEnsecurity.provider.5=sun.security.jgss.SunProvidernsecurit

22、y.provider.6=com.sun.security.sasl.Providern见程序Java程序设计之网络编程Java安全Web编程J2EE概述测试程序importjava.security.Provider;importjava.security.Security;publicclassGetProviderInfopublicstaticvoidmain(Stringargs)Providerplist=Security.getProviders();for(inti=0;iplist.length;i+)System.out.println(+(i+1)+-Providerna

23、me:+plisti.getName();System.out.println(Providerinfo:+plisti.getInfo();Java程序设计之网络编程Java安全Web编程J2EE概述16.3.2 核心类nSecurity,ProvidernMessageDigest类nSignature类nKey,KeyFactory,KeyPair,KeyPairGeneratornSecureRandomJava程序设计之网络编程Java安全Web编程J2EE概述16.3.3 消息摘要n使用MD5算法产生消息摘要n也可以使用SHA1算法nMessageDigest支持MD5和SHA消息

24、摘要算法。调用getInstance()方法选择一个合适的算法;调用update()方法准备数据输入缓冲区;digest()方法产生消息摘要;摘要的长度取决于所选择的算法。使用MD5产生128位的摘要,使用SHA产生160位的摘要。Java程序设计之网络编程Java安全Web编程J2EE概述16.3.4 数字签名nSignature类支持数字签名,getInstance()方法选择数字签名的算法。n通过指定参数SHA1withDSA,可以在DSA数字签名算法中使用SHA-1产生消息摘要。n如果使用RSA数字签名算法,可以用MD5或者SHA-1产生消息摘要,可以由参数MD2withRSA,MD5

25、withRSA,SHA1withRSA确定使用的算法。n见程序Java程序设计之网络编程Java安全Web编程J2EE概述16.3.5 数据加密/解密n1.对称密钥n对称加密使用相同的密钥执行加密和解密操作。目前,安全度最高,使用最广泛地就是AES加密标准。n对称加密的基本过程是:n根据指定算法生成密钥产生器对象;n产生密钥n生成加密引擎对象n向加密引擎初始化需要加密的数据n执行加密操作n对称解密密的基本过程是:n获取密钥n生成解密引擎对象n向解密引擎初始化需要解密的数据n执行解密操作n见程序Java程序设计之网络编程Java安全Web编程J2EE概述非对称密钥n非对称密钥体系就是加密和解密用

26、不同的密钥,称为密钥对,一个叫公钥,一个叫私钥。公钥是公开的,任何人都可以访问,私钥是保密的,只有密钥的持有能使用。n最典型和使用最普遍的就是RSA算法。一般用接收者的公钥加密数据,只有接收者用自己的私钥才可以解密。n主要设计到的类有:KeyPairGenerator和Cipher.KeyPairGenerator负责产生密钥对,Cipher作为执行引擎,具体执行加密和解密操作。Java程序设计之网络编程Java安全Web编程J2EE概述非对称加密解密过程n一般加密处理过程是:n使用RSA算法产生密钥对n用公钥初始加密引擎Ciphern向Cipher传送数据。n执行加密操作。n解密过程是:n用

27、私钥初始解密引擎Ciphern向Cipher传送已加密的数据。n执行解密操作。n见程序Java程序设计之网络编程Java安全Web编程J2EE概述第17章Web服务器端编程Java程序设计之网络编程Java安全Web编程J2EE概述第17章Web服务器端编程17.1JavaWeb服务器介绍17.2Servlet介绍17.3JSP介绍17.4Struts介绍Java程序设计之网络编程Java安全Web编程J2EE概述17.1JavaWeb服务器介绍在进行实际大型在进行实际大型JavaWeb项目实施的时项目实施的时候,我们可以采用商业型的应用服务器,应用候,我们可以采用商业型的应用服务器,应用服务

28、器可以处理复杂的商业逻辑,常应用于服务器可以处理复杂的商业逻辑,常应用于WEB多层结构的开发。例如多层结构的开发。例如IBM的的WebSphere服务器服务器,BEA的的WebLogic服务器。服务器。这两种服务器功能齐全而强大,支持所有的这两种服务器功能齐全而强大,支持所有的Java服务容器标准,适用于大型的商业服务容器标准,适用于大型的商业JavaWeb应用的发布。但是这两种服务器都是商业应用的发布。但是这两种服务器都是商业服务器,价格昂贵,对系统资源要求极高。特服务器,价格昂贵,对系统资源要求极高。特别是别是Websphere配置更复杂。配置更复杂。JBoss公司的公司的开源免费软件开源

29、免费软件Jboss应用服务器同样功能齐全应用服务器同样功能齐全而强大,也支持所有的而强大,也支持所有的Java服务容器标准。服务容器标准。而且而且JBoss具有良好的性价比具有良好的性价比,具有良好的运行具有良好的运行效率和可靠性效率和可靠性,因此已经得到越来越多的因此已经得到越来越多的J2EE应用开发者和中小型企业的青睐。但同样对系应用开发者和中小型企业的青睐。但同样对系统资源要求高,配置复杂。统资源要求高,配置复杂。Java程序设计之网络编程Java安全Web编程J2EE概述17.1JavaWeb服务器介绍在开发或学习过程中,有许多免费轻型的在开发或学习过程中,有许多免费轻型的JavaWe

30、b服务器可以供我们选用,如服务器可以供我们选用,如Tomcat、Resin、Orion等等。他们使用都很方便,占用资源也很少,适等等。他们使用都很方便,占用资源也很少,适合开发过程中的调试阶段;而且这些服务器还可以和合开发过程中的调试阶段;而且这些服务器还可以和Jbuilder、Eclipse等开发工具集成使用。根据实际开等开发工具集成使用。根据实际开发中的情况来看,发中的情况来看,JakataTomcat和和SunJava结合结合的最好,和其他应用服务器配合使用可支持完整的的最好,和其他应用服务器配合使用可支持完整的J2EE标准,因此其应用很广泛。但是从标准,因此其应用很广泛。但是从Java

31、普遍存普遍存在的编码问题来看,还是在的编码问题来看,还是Resin解决得比较好。从使解决得比较好。从使用的角度来看,用的角度来看,Resin比比Tomcat方便,而且方便,而且Resin也也可以结合可以结合Jbuilder、Eclispe等等IDE使用。使用。Resin强调强调使用使用Xml技技术,从术,从Resin自己的自己的HomePage使用使用xtp就可以看出来。本书将使用就可以看出来。本书将使用Resin服务器作为测试和开服务器作为测试和开发的工具。但本章的例子仍然可以在发的工具。但本章的例子仍然可以在Tomcat上运行,上运行,只需要对配置文件进行简单的修改即可。只需要对配置文件进

32、行简单的修改即可。Java程序设计之网络编程Java安全Web编程J2EE概述17.1JavaWeb服务器介绍Resin可以在可以在http:/免费下载和使用。免费下载和使用。使用使用Resin开发或者学习是免费的,但是如果开发或者学习是免费的,但是如果把把Resin作为收费产品发布是需要付费的。本作为收费产品发布是需要付费的。本书将使用书将使用2.1.16版本来运行所有的例子。版本来运行所有的例子。下载下载Resin时选择时选择ArchiveVersions中的中的windows.zip的普通安装包的普通安装包resin-ee-2.1.16。把该把该zip包解压到任何目录下面,如包解压到任何

33、目录下面,如d:Resin-ee-2.1.16。以下介绍都假设。以下介绍都假设Resin安装在安装在d:Resin-ee-2.1.16下。进入下。进入d:Resin-ee-2.1.16bin,运行,运行httpd.exe,另外也可以在,另外也可以在Command控制台下运行控制台下运行Resin服务器。此时服务器。此时弹出一个有弹出一个有start和和stop两个两个Radio按纽和一按纽和一个个quit按纽的对话窗,如图按纽的对话窗,如图Java程序设计之网络编程Java安全Web编程J2EE概述17.1JavaWeb服务器介绍Java程序设计之网络编程Java安全Web编程J2EE概述17

34、.1JavaWeb服务器介绍Java程序设计之网络编程Java安全Web编程J2EE概述第17章Web服务器端编程17.1JavaWeb服务器介绍17.2Servlet介绍17.3JSP介绍17.4Struts介绍Java程序设计之网络编程Java安全Web编程J2EE概述17.2Servlet介绍17.2.1Servlet的概念17.2.2Servlet应用范围和运行环境17.2.3Servlet简单例子17.2.4Servlet常用类、接口和生命周期17.2.5Servlet应用举例Java程序设计之网络编程Java安全Web编程J2EE概述17.2.1Servlet的概念Servlet就

35、是用Java编写的服务器端程序,是由服务器端调用和执行的Java类,这种类使用JavaServlet应用程序设计接口(API)及相关类和方法。除了JavaServletAPI,Servlet还可以使用用以扩展和添加到API的Java类软件包。Servlet是一种采用Java来实现CGI(CommonGateInterface)功能的技术。Servlet本身与协议无关,与平台也无关。也就是说Servlet所适用的网络协议可以是多种多样的,比如HTTP,FTP,SMTP,TELNET等,但是就目前而言,只有HTTP服务已经形成了标准的Java组件。对应的软件包有两个javax.servlet.ht

36、tp和javax.servlet.jsp,分别对应我们要讲解的Servlet和JSP编程。我们通常所说的Servlet编程主要就是指针对HTTP的Servlet编程,用到的就是javax.servlet.http包中的类(典型的就是HttpServlet类),实际上JavaServlet编程的概念要更广一些,在这里我们约定俗成的使用Servlet来指代HTTPServlet的编程,这点读者是需要了解的。由于JSP最终都是要经过JSP引擎转换成Servlet代码的,而且Servlet编程和一般的Java编程是没有大的区别的,只需要了解一定的规范即可。Java程序设计之网络编程Java安全Web编

37、程J2EE概述17.2.2Servlet应用范围和运行环境Servlet运行于运行于Servlet引擎管理的引擎管理的Java虚拟机中,被来自客户机的请求所唤虚拟机中,被来自客户机的请求所唤醒,与醒,与CGI不同的是,在虚拟机中只要装载一个不同的是,在虚拟机中只要装载一个Servlet就能够处理新的请求,就能够处理新的请求,每个新请求使用内存中那个每个新请求使用内存中那个Servlet的相同副本,所以效率比的相同副本,所以效率比CGI来得高。如果来得高。如果采用服务器端脚本,如采用服务器端脚本,如ASP,PHP,语言解释程序是内置程序,虽然可以加快服,语言解释程序是内置程序,虽然可以加快服务器

38、的运行,但是效率还是比不上准编译的务器的运行,但是效率还是比不上准编译的Servlet。实际的使用也已经证明,。实际的使用也已经证明,Servlet是效率很高的服务器端程序,很适合用来开发是效率很高的服务器端程序,很适合用来开发Web服务器应用程序。服务器应用程序。JavaServlet有着十分广泛的应用。不光能简单的处理客户端的请求,借助有着十分广泛的应用。不光能简单的处理客户端的请求,借助Java的强大的功能,使用的强大的功能,使用Servlet还可以实现大量的服务器端的管理维护功能,以及还可以实现大量的服务器端的管理维护功能,以及各种特殊的任务,比如,并发处理多个请求,转送请求,代理等。

39、各种特殊的任务,比如,并发处理多个请求,转送请求,代理等。为了运行为了运行Servlet,首先需要一个,首先需要一个JVM来提供对来提供对Java的基本支持,一般需要的基本支持,一般需要安装安装JRE(JavaRuntimeEnvironment)或)或JDK(JavaDevelopKit,JRE是其中的一个子集)。其次我们需要是其中的一个子集)。其次我们需要ServletAPI的支持,一般的的支持,一般的Servlet引擎都引擎都自带自带ServletAPI,只要我们安装,只要我们安装Servlet引擎或安装直接支持引擎或安装直接支持Servlet的的Web服服务器,便会自动安装上务器,便会

40、自动安装上Servlet相关的程序包。相关的程序包。Resin自带一个自带一个ServletRunner和和HTTPServer,因此要构建一个简单的,因此要构建一个简单的Web环境,光有环境,光有Resin已经足够了,不需要额外的支持软件。已经足够了,不需要额外的支持软件。Java程序设计之网络编程Java安全Web编程J2EE概述17.2.3Servlet简单例子【例【例17-1】使用Servlet在客户端输出简单的问候语句/HelloWorld.javapackagetest;importjava.io.*;importjavax.servlet.*;importjavax.servle

41、t.http.*;publicclassHelloWorldextendsHttpServletprivateStringgreeting;publicvoidinit()throwsServletExceptiongreeting=getInitParameter(greeting);Java程序设计之网络编程Java安全Web编程J2EE概述17.2.3Servlet简单例子【例【例17-1】使用Servlet在客户端输出简单的问候语句publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsSe

42、rvletException,IOException/doGet()是这个Servlet的核心,真正处理请求的地方PrintWriterout=response.getWriter();/从HttpServletResponse得到输出流out.println();out.println();out.println(+greeting+);out.println();out.println();out.println(+greeting+);out.println();out.println();/上面的语句都是向客户端打印HTML文本out.close();/关闭HttpServletRes

43、ponsepublicvoiddestroy()/nothingtodoJava程序设计之网络编程Java安全Web编程J2EE概述17.2.3Servlet简单例子这是最简单的一个Servlet程序,整个类从HttpServlet派生,就跟Applet一样,这个派生关系是必须的。这个Servlet必须实现doGet()方法(因为它是作为静态页面通过地址访问的,这种方式在HTTP中称为GET请求,在后面还会有更具体的讲解),这是这个Servlet真正处理请求的地方,是整个Servlet的主体。doGet()有两个参数HttpServletRequestreq和HttpServletRespon

44、seres。HttpServletRequest包含了客户请求的各种信息,HttpServletResponse则包装了服务器响应,主要处理对客户机的输出。通过javac对以上程序进行编译,我们可以得到HelloServlet.class,下面我们就通过配置Resin来运行这个Servlet。在webapps下建立自己的发布目录mytest,mytest目录下的WEB_INF/classes是Resin默认的classpath环境变量的值,把HelloWorld.java拷贝到WEB_INF/classes/test目录下。当然也可以将其拷贝到有效的系统或用户的classpath下,Resin

45、都是能够找到的,如Resin默认的发布目录doc。接下来就需要修改conf目录下的resin.conf文件,来配置我们的Servlet。读者可以使用任何一种自己所熟悉的文本编辑器来打开该配置文件Java程序设计之网络编程Java安全Web编程J2EE概述17.2.3Servlet简单例子在中加上下面的配置语句这样当客户端产生/Hello请求的时候,Resin就能把这个请求定向到test.HelloWorld上,同时给出greeting参数的值。该Servlet就能正常运行了。下面我们启动Resin服务器(通过双击bin下的httpd.exe)。这样我们就可以通过浏览器访问这个Servlet了。

46、打开浏览器,比如IE,在地址栏键入,就可以看到运行结果网页,如图Java程序设计之网络编程Java安全Web编程J2EE概述17.2.3Servlet简单例子Java程序设计之网络编程Java安全Web编程J2EE概述17.2.4Servlet常用类、接口和生命周期Java程序设计之网络编程Java安全Web编程J2EE概述17.2.4Servlet常用类、接口和生命周期1、Servlet的生命周期的生命周期Servlet容器负责处理客户请求、把请求传送给Servlet并把结果返回给客户。不同的Web容器实际的实现可能有所不同,但容器与Servlet之间的接口是由ServletAPI定义好的,

47、这个接口定义了Servlett容器在Servlet上要调用的方法及传递给Servlet的对象类。Servlet的生命周期可以被归纳为下面的步骤:(1)装载Servlet,这一项操作一般是动态执行的。(2)Server创建一个Servlet实例;(3)Server调用Servlet的init方法;(4)一个客户端请求到达Server;(5)Server创建一个请求对象;(6)Server创建一个响应对象;(7)Server激活Servlet的service方法,传递请求和响应对象作为参数;(8)service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息;Java程序设计之网

48、络编程Java安全Web编程J2EE概述17.2.4Servlet常用类、接口和生命周期(9)service方法使用响应对象的方法。将响应传回Server,最终到达客户端。service方法可能激活其他方法以处理请求。如doGet,doPost或其他程序员自己开发的方法(10)对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般只初始化一次(11)当Server不再需要Servlet时(比如当Server要关闭时),Server调用Servlet的

49、destroy方法。一旦请求了一个Servlet,就没有办法阻止容器执行一个完整的生命周期。容器在Servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理。容器可以决定在任何时候把这个实例从内存中移走。在典型的模型中,容器为每个Servlet创建一个单独的实例,容器并不会每接到一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分配给到来的请求,但是这从Servlet的观点来看,效果和为每个请求创建一个新线程的效果相同。Java程序设计之网络编程Java安全Web编程J2EE概述17.2.4Servlet常用类、接口和生命周期2、Servlet接口接口p

50、ublicinterfaceServlet它的生命周期由javax.servlet.servlet接口定义。当你在写servlet的时候必须直接或间接的实现这个接口。一般趋向于间接实现:通过从javax.servlet.GenericServlet或javax.servlet.http.HttpServlet派生。在实现servlet接口时必须实现它的五个方法:(1)init():publicvoidinit(ServletConfigconfig)throwsServletException(2)service():publicvoidservice(ServletRequestreq,Se

51、rvletResponseres)throwsServletException,IOException(3)destroy():publicvoiddestroy()(4)getServletConfig()publicServletConfiggetServletConfig()(5)getServletInfo():publicStringgetServletInfo()Java程序设计之网络编程Java安全Web编程J2EE概述17.2.4Servlet常用类、接口和生命周期下面的类和接口详细情况见下面的类和接口详细情况见servert帮助文档。帮助文档。3、GenericServlet

52、类类publicabstractclassGenericServletimplementsServlet,ServletConfig,Serializable此类提供了此类提供了servlet接口的基本实现部分,其中包含的接口的基本实现部分,其中包含的service()方法被申明为方法被申明为abstract,因此该类必须被继承。,因此该类必须被继承。init(ServletConfigconf)方法把方法把servletConfig对象存对象存储在一个储在一个privatetransient(私有临时)实例变量里,(私有临时)实例变量里,getServletConfig()方法返回指向本对象

53、的指针,如果重载此方法,将不能方法返回指向本对象的指针,如果重载此方法,将不能使用使用getServletConfig来获得来获得ServletConfig对象,如对象,如果确实想重载,记住要包含对果确实想重载,记住要包含对super.config的调用。的调用。Java程序设计之网络编程Java安全Web编程J2EE概述17.2.4Servlet常用类、接口和生命周期4、HttpServlet类类该类扩展了该类扩展了GenericServlet类并对类并对Servlet接口提供了与接口提供了与HTTP更相关的实现。更相关的实现。(1)、service()方法方法:protectedvoids

54、ervice(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOExceptionpublicvoidservice(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOExceptionservice()方法是方法是Servlet的核心。每当一个客户请求一个的核心。每当一个客户请求一个HttpServlet对象,该对象的对象,该对象的service()方法就要被调用,而且传递方法就要被调用,而且传递给这个方法一个给这

55、个方法一个请求请求(ServletRequest)对象和一个对象和一个响应响应(ServletResponse)对象作为参数。对象作为参数。在在HttpServlet中已存在中已存在service()方法。缺省的服务功能是调用与方法。缺省的服务功能是调用与HTTP请求的方法相应请求的方法相应的的do功能。功能。Java程序设计之网络编程Java安全Web编程J2EE概述如果servlet收到一个HTTP请求而你没有重载相应的do方法,它就返回一个说明此方法对本资源不可用的标准HTTP错误。下面是这些do方法的说明:1)doGet用来处理HTTP的GET请求。2)doPost用来处理HTTP的P

56、OST请求。3)doPut用来处理HTTP的PUT请求。4)doDelete用来处理HTTP的DELETE请求。5)doHead用来处理HTTP的HEAD请求。6)doOptions用来处理HTTP的OPTIONS请求。7)doTrace用来处理HTTP的TRACE请求在开发以HTTP为基础的servlet中,Servlet开发者关心方法doGet和方法doPost即可。n(2)、getLatModified():protectedlonggetLastModified(HttpServletRequestreq)Java程序设计之网络编程Java安全Web编程J2EE概述17.2.4Serv

57、let常用类、接口和生命周期5、HttpServletRequest接口接口publicinterfaceHttpServletRequestextendsServletRequest所有实现此接口的对象(例如从所有实现此接口的对象(例如从servlet容器传递的容器传递的HTTP请求对象)都能请求对象)都能让让servlet通过自己的方法访问所有请求的数据。下面是一些用来获取表单通过自己的方法访问所有请求的数据。下面是一些用来获取表单数据的基本方法。数据的基本方法。(1)getParameter()publicStringgetParameter(Stringkey)此方法试图将根据查询串中

58、的关键字定位对应的参数并返回其值。如果有多此方法试图将根据查询串中的关键字定位对应的参数并返回其值。如果有多个值则返回列表中的第一个值。如果请求信息中没有指定参数,则返回个值则返回列表中的第一个值。如果请求信息中没有指定参数,则返回null。(2)getParametervalues():publicStringgetParametervalues(Stringkey)如果一个参数可以返回多个值,比如复选框集合,则可以用此方法获得对应如果一个参数可以返回多个值,比如复选框集合,则可以用此方法获得对应参数的所有值。如果请求信息中没有指定参数,则返回参数的所有值。如果请求信息中没有指定参数,则返回

59、null。(3)GetParameterNames():PublicEnumerationgetParameterNames()此方法返回一个此方法返回一个Enumeration对象,包含对应请求的所有参数名字列表。对象,包含对应请求的所有参数名字列表。Java程序设计之网络编程Java安全Web编程J2EE概述17.2.4Servlet常用类、接口和生命周期6、HttpServletResponse接口接口publicinterfaceHttpServletResponseextendsservletResponseservlet容器提供一个实现该接口的对象并通过service()方法将它传

60、递给servlet。通过此对象及其方法,servlet可以修改响应头并返回结果。(1)setContentType():publicvoidsetContentType(Stringtype)在给调用者发回响应前,必须用此方法来设置HTTP响应的MIME类型。可以是任何有效的MIME类型,当给浏览器返回HTML就是”text/html”类型。(2)getWriter():publicPrintWritergetWriter()throwsIOException此方法将返回PrintWriter对象,把servlet的结果作为文本返回给调用者。PrintWriter对象自动把Java内部的Uni

61、code编码字符转换成正确的编码以使客户端能够阅读。(3)getOutputStream():(4)setHeader():Java程序设计之网络编程Java安全Web编程J2EE概述17.2.4Servlet常用类、接口和生命周期7、HttpSession接口接口这个接口被这个接口被Servlet引擎用来实现在引擎用来实现在HTTP客户端和客户端和HTTP会话两者的会话两者的关联。这种关联可能在多次连接和请求中持续一段给定的时间。关联。这种关联可能在多次连接和请求中持续一段给定的时间。Session用来在无状态的用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。协议下越过多个

62、请求页面来维持状态和识别用户。一个一个Session可以通过可以通过Cookie或重写或重写URL来维持。其方法有:来维持。其方法有:getCreationTime()、()、getId()、()、getLastAccessedTime()、()、getMaxInactiveInterval()、()、getValue()、()、getValueNames()、()、invalidate()、()、iSNew()、()、putValue()、()、removeValue()、()、setMaxInactiveInterval()()等。等。Java程序设计之网络编程Java安全Web编程J2E

63、E概述17.2.4Servlet常用类、接口和生命周期8、ServletConfig和和ServletContext在在Servlet的初始化中,初始化方法使用的初始化中,初始化方法使用ServletConfig对象作为参数,这对象作为参数,这个方法中将保存这个对象,以便方法个方法中将保存这个对象,以便方法getServletConfig()返回该参数。并返回该参数。并且在该方法中重新编写且在该方法中重新编写getServletConfig()方法,以便能够从新的位置得方法,以便能够从新的位置得到该对象。到该对象。在下面的例子中,初始化方法就是调用在下面的例子中,初始化方法就是调用super.

64、init(config)方法来管理安排方法来管理安排ServletConfig对象的,代码如下:对象的,代码如下:publicvoidinit(ServletConfigconfig)throwsServletExceptionSuper.init(config);/初始化的操作初始化的操作在服务器上使用在服务器上使用Session对象来维持同单个客户相关的状态,而当为多个对象来维持同单个客户相关的状态,而当为多个用户的用户的Web应用维持一个状态时,则应使用应用维持一个状态时,则应使用Servlet环境环境(ServletContext)。ServletContext既可以用来为一个既可以用

65、来为一个WEB应用定义从应用定义从URL到名称的映射,到名称的映射,也可以用来让也可以用来让Servlet在一个应用程序中访问所有客户的共享信息。在一个应用程序中访问所有客户的共享信息。Sevlet环境的状态信息保存在它的属性中。有三个环境的状态信息保存在它的属性中。有三个servletContext方法用于处理方法用于处理环境属性:环境属性:getAttribute、setAttribute和和removeAttribute。Java程序设计之网络编程Java安全Web编程J2EE概述【例【例17-2】Servlet与表单交互的与表单交互的方法方法Java程序设计之网络编程Java安全Web

66、编程J2EE概述17.2.5Servlet应用举例表单是HTML中使用最广泛的传递信息的手段。搞清楚Servlet与表单的交互,就在客户端与服务器之间架起了一座桥梁。Servlet使用HttpServlet类中的方法与表单进行交互。1)、静态HTML文本:information.htmlInputInformation请输入信息姓名:性别:男女       Java程序设计之网络编程Java安全Web编程J2EE概述17.2.5Servlet应用举例2)、下面是处理表单的)、下面是处理表单的Servlet程序程序FormDe

67、al:/FormDeal.javaimportjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassFormDealextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException/处理GET请求的方法response.setContentType(text/html;charset=gb2312);request.setChara

68、cterEncoding(GB2312);/先设置Header,在这里只设置ContentType一项PrintWriterout=response.getWriter();/得到文本输出WriterStringname=request.getParameter(Name);/得到表单值NameStringsex=request.getParameter(Sex);Java程序设计之网络编程Java安全Web编程J2EE概述17.2.5Servlet应用举例/打印得到的表单值out.println();out.println();out.println();out.println(YourIn

69、fomation);out.println();out.println();out.println(DataYouPosted);out.println();out.println();out.println(你的姓名:);out.println(+name+);out.println();out.println();out.println(你的性别:);out.print();Java程序设计之网络编程Java安全Web编程J2EE概述17.2.5Servlet应用举例/打印得到的表单值if(sex.equals(1)out.println(男);elseout.println(女);out

70、.println();out.println();out.println();out.println();out.close();/关闭WriterJava程序设计之网络编程Java安全Web编程J2EE概述17.2.5Servlet应用举例Java程序设计之网络编程Java安全Web编程J2EE概述第17章Web服务器端编程17.1JavaWeb服务器介绍17.2Servlet介绍17.3JSP介绍17.4Struts介绍Java程序设计之网络编程Java安全Web编程J2EE概述17.3JSP介绍17.3.1JSP的概念17.3.2JSP的运行方式的运行方式17.3.3JSP指令介绍17.

71、3.4JSP中的隐藏对象17.3.5JSP应用举例举例17.3.6JSP和Servlet在实际工程中的应用Java程序设计之网络编程Java安全Web编程J2EE概述17.3.1JSP的概念nJSP(JavaServerPages)是是SunMicrosystems公司倡导、许多公司参公司倡导、许多公司参与一起建立的一种动态网页技术标准。它在与一起建立的一种动态网页技术标准。它在HTML代码中,插入代码中,插入JSP标记标记(tag)及及Java程序片段程序片段(Scriptlet),构成构成JSP页面,其扩展名为页面,其扩展名为.jsp。当。当客户端请求客户端请求JSP文件时,文件时,Web

72、服务器执行该服务器执行该JSP文件,然后以文件,然后以HTML的格的格式返回给客户。前面已经提到过式返回给客户。前面已经提到过JSP只是构建在只是构建在Servlet以及整个以及整个Java体系体系的的Web开发技术之上的高层次的动态网页标准,利用这一技术可以建立先开发技术之上的高层次的动态网页标准,利用这一技术可以建立先进、安全和跨平台的动态网站。因此,从概念上将,相对进、安全和跨平台的动态网站。因此,从概念上将,相对Servlet而言,而言,JSP并没有什么新的东西,如果读者对前面的并没有什么新的东西,如果读者对前面的Servlet有一定的了解,那么有一定的了解,那么JSP的概念可说跟的概

73、念可说跟Servlet是完全一样的,只不过在实现方法上稍有不同。是完全一样的,只不过在实现方法上稍有不同。n总的来讲,总的来讲,JSP和和微软的微软的ASP(ActiveSeverPages)在技术方面有许多)在技术方面有许多相似之处。两者都能为动态交互网页制作提供的技术环境支持。相似之处。两者都能为动态交互网页制作提供的技术环境支持。ASP一般一般只应用于只应用于Windows98/NT/2000/XP平台,而平台,而JSP则可以不加修改地在则可以不加修改地在绝大部分的绝大部分的WebServer上运行,其中包括了上运行,其中包括了NT的系统,符合的系统,符合“Writeonce,Runan

74、ywhere”(“一次编写,多平台运行一次编写,多平台运行”)的的Java标准。标准。nJSP技术具有以下的优点:技术具有以下的优点:(1)将内容的生成和显示进行分离)将内容的生成和显示进行分离(2)强调可重用的组件)强调可重用的组件(3)采用标记简化页面开发)采用标记简化页面开发(4)JSP的适应平台更广的适应平台更广Java程序设计之网络编程Java安全Web编程J2EE概述17.3.2JSP的运行方式的运行方式nJSP的运行方式如下:在服务器启动后,当的运行方式如下:在服务器启动后,当Web浏览器端发送过来一浏览器端发送过来一个页面请求时,个页面请求时,Web服务器先判断是否是服务器先判

75、断是否是JSP页面请求。如果该页面只是页面请求。如果该页面只是一般的一般的HTML/XML页面请求,则直接将页面请求,则直接将HTML/XML页面代码传给页面代码传给Web浏浏览器端。如果请求的页面是览器端。如果请求的页面是JSP页面,则由页面,则由JSP引擎检查该引擎检查该JSP页面,如果页面,如果该页面是第一次被请求、或不是第一次被请求但已被修改,则该页面是第一次被请求、或不是第一次被请求但已被修改,则JSP引擎将引擎将此此JSP页面代码转换成页面代码转换成Servlet代码,然后代码,然后JSP引擎调用服务器端的引擎调用服务器端的Java编编译器译器javac.exe对对Servlet代

76、码进行编译,把它变成字节码代码进行编译,把它变成字节码(.class)文件,文件,然后再调用然后再调用Java虚拟机执行该字节码文件,将执行结果传给虚拟机执行该字节码文件,将执行结果传给Web浏览器端。浏览器端。如果该如果该JSP页面不是第一次被请求,且没有被修改过,则直接由页面不是第一次被请求,且没有被修改过,则直接由JSP引擎调引擎调用用JAVA虚拟机执行已编译过的字节码虚拟机执行已编译过的字节码.class文件,然后将结果传送文件,然后将结果传送Web浏览器端。浏览器端。n从上面的叙述中我们不难看出从上面的叙述中我们不难看出JSP和和Servlet的关系。的关系。JSP引擎负责把引擎负责

77、把JSP页面翻译成页面翻译成Servlet,因此,因此JSP在底层完全就是在底层完全就是Servlet(指原始概念上(指原始概念上的的Servlet,而不是,而不是HttpServlet)。前面我们提到)。前面我们提到JSP编程对应编程对应javax.servlet.jsp,更确切的讲,这个包是供,更确切的讲,这个包是供JSP引擎使用的,它在做翻引擎使用的,它在做翻译的时候需要用到这个包,我们在编写译的时候需要用到这个包,我们在编写JSP页面的时候是不需要涉及这个页面的时候是不需要涉及这个包的。包的。Java程序设计之网络编程Java安全Web编程J2EE概述17.3.3JSP指令介绍n下面开

78、始介绍JSP的语法。从本质上讲JSP还是Java程序,因为它最终还是会被翻译成Servlet进而编译成.class文件执行。但是由于JSP是嵌入式的Java程序,有些特殊的符号还是需要了解的。1HTML注释该注释在客户端可通过查看网页源文件的方法看到。JSP语法:!-注释-2JSP注释JSP注释作为JSP页面的文档资料,但是该注释在客户端通过查看源文件的方法是看不到的。即该注释不发送到客户端。JSP语法:3.声明在JSP页面脚本语言中声明变量或方法,JSP语法:例如:Java程序设计之网络编程Java安全Web编程J2EE概述17.3.3JSP指令介绍4.表达式在JSP脚本语言中,可以使用任何

79、有效的表达式。JSP语法:5.脚本段在JSP页面脚本语言中,包含一段有效的代码片段。JSP语法:例如:%for(inti=0;i6Include指令该指令用于包含一个文本或代码的文件。JSP语法:Java程序设计之网络编程Java安全Web编程J2EE概述17.3.3JSP指令介绍n例如:random.jsp文件中内容为:另外include.jsp文件内容为:Include指令测试随机显示的数为:在页面中显示为:随机显示的数为:2148.2Java程序设计之网络编程Java安全Web编程J2EE概述17.3.3JSP指令介绍n7.Page指令定义整个JSP页面的全局属性。JSP语法:Java程

80、序设计之网络编程Java安全Web编程J2EE概述17.3.3JSP指令介绍n8元素将客户端的请求转交给一个HTML文件、JSP文件或脚本段处理。JSP语法:jsp:forwardpage=relativeURL|/例如:n9在JSP文件中,包含一个静态或动态文件。JSP语法:jsp:includepage=relativeURL|flush=true/例如:Java程序设计之网络编程Java安全Web编程J2EE概述17.3.3JSP指令介绍n10.下载一个plugin插件到客户端以便执行applet或Bean。11调用或创建一个指定名字和使用范围的Bean。JSP语法:jsp:useBea

81、nid=beanInstanceNamescope=page|request|session|applicationclass=package.class|type=package.class|beanName=package.class|type=package.class/|othertags例如:标签首先调用一个指定的名字和使用范围的Bean,如果这个Bean不存在,则创建该Bean。Java程序设计之网络编程Java安全Web编程J2EE概述17.3.3JSP指令介绍n12设置Bean的一个或多个属性值。JSP语法:jsp:setPropertyname=beanInstanceNam

82、eproperty=*|property=propertyNameparam=parameterName|property=propertyNamevalue=string|/例如:Java程序设计之网络编程Java安全Web编程J2EE概述17.3.3JSP指令介绍13取得取得Bean属性的值,以便在结果页面中显示。属性的值,以便在结果页面中显示。JSP语法:语法:n例如:例如:Bean的程序代码为:的程序代码为:packageAccessDatabase;publicclassReaddateprivateStringusername=John;publicStringvoidgetUse

83、rname()returnusername;JSP文件的内容为:文件的内容为:从从Bean中取得属性名为中取得属性名为username的值为:的值为:执行后显示结果为:执行后显示结果为:从从Bean中取得属性名为中取得属性名为user的值为:的值为:JohnJava程序设计之网络编程Java安全Web编程J2EE概述17.3.4JSP中的隐藏对象由于由于JSP是嵌入式的语言,不能显式的把一些必须的参数传递进来,是嵌入式的语言,不能显式的把一些必须的参数传递进来,比如比如Request对象、对象、Response对象等,所以在对象等,所以在JSP规范中提供了几个隐规范中提供了几个隐含的对象来实现

84、其功能。所谓隐含的对象,就是大家约定好使用一个名字含的对象来实现其功能。所谓隐含的对象,就是大家约定好使用一个名字来指代某个特定的对象,在编写来指代某个特定的对象,在编写JSP的时候不用显式的声明就能使用,由的时候不用显式的声明就能使用,由JSP引擎负责在解释的时候把隐含对象加入到解释完的引擎负责在解释的时候把隐含对象加入到解释完的.java文件中。常用文件中。常用的隐含对象有的隐含对象有application、session、request、response、out、page、exception、pageContext。1session对象前面在前面在Servlet部分已经提到,过当客户第一

85、次访问部分已经提到,过当客户第一次访问Web服务器发布目服务器发布目录录(一个一个Web服务器有一个或多个服务器有一个或多个发布目录发布目录)下的网页文件时,下的网页文件时,Web服务服务器会自动创建一个器会自动创建一个session对象,并为其分配唯一的对象,并为其分配唯一的ID号,客户可以将其号,客户可以将其需要的一些信息保存到该需要的一些信息保存到该session对象,以便需要时使用。对象,以便需要时使用。session对象就对象就是指通过是指通过getSession法办法得到的对象,在法办法得到的对象,在JSP中是隐含对象,关于中是隐含对象,关于session对象的使用读者可以参见对象

86、的使用读者可以参见ServletAPI2application对象当当Web服务器启动时,服务器启动时,Web服务器会自动创建服务器会自动创建application对象。对象。Application对象一旦创建,它将一直存在,直到对象一旦创建,它将一直存在,直到Web服务器关闭。因此,服务器关闭。因此,application对象可以实现多客户间的数据共享对象可以实现多客户间的数据共享Java程序设计之网络编程Java安全Web编程J2EE概述17.3.4JSP中的隐藏对象3、request对象request对象主要用于取得客户在表单中提交的数据信息及多个网页之间数据信息传递等。同时通过它也可以

87、取得Web服务器的参数。跟Servlet参数中的Request对象是相对应的。4respose对象respose对象主要用于向客户端输出信息,响应客户端的请求。跟Servlet参数中的Response对象是相对应的。5out对象out对象用于向客户端输出数据。6page对象page对象是当前JSP页面本身的一个实例。它的类型是:java.lang.Object。其方法就是Object类中的方法。7Exception对象当JSP页面在执行过程中发生例外或错误时,会自动产生Exception对象。8pageContext对象pageContext对象相当于当前页面的容器,可以访问当前页面的所有对象

88、。Java程序设计之网络编程Java安全Web编程J2EE概述17.3.5JSP应用举例举例【例【例17-3】本例中将演示】本例中将演示Jsp与表单交互的方法。与表单交互的方法。information2.html是静态网页文件,其中的表单搜集数据,并提交给是静态网页文件,其中的表单搜集数据,并提交给JSPDeal.jsp来处理。来处理。1静态静态HTML文件文件information2.htmlInputInformation请输入信息请输入信息姓名:姓名:性别:性别:男男女女       Java程序设计之网络编程Java

89、安全Web编程J2EE概述17.3.5JSP应用举例举例【例【例17-3】本例中将演示】本例中将演示Jsp与表单交互的方法。与表单交互的方法。2JSP文件:JSPDeal.jspYourInfoDataYouPosted你的姓名:你的姓名:你的性别:你的性别:Java程序设计之网络编程Java安全Web编程J2EE概述17.3.5JSP应用举例举例Java程序设计之网络编程Java安全Web编程J2EE概述17.3.5JSP应用举例举例这个例子的执行结果和前面是一摸一样的。在以前Servlet分析的基础上,读者看懂这个例子应该没什么问题,这里就不对语法做过多分析了。下面我们来分析一下这个例子的

90、几个特点。首先最明显的一点就是,使用JSP之后文件变得更短,格式更清晰了,这也是要使用JSP的一个最主要的原因,使用Servlet来打印大量的HTML语句是很费事的,而JSP的主体是HTML,嵌入的Java语句只负责动态效果,所以使用比Servlet方便的多。当然Servlet和JSP可以互相配合,取长补短,获得更好的应用效果。另外一个就是JSP使用的时候不需要单独配置每一个文件,只要是扩展名为jsp,JSP引擎会自动识别。而Servlet是必须进行配置后才能投入使用的,这也是处于安全性的考虑,直接访问.class文件是不允许的,因为不能保证它是一个合法的Servlet。而JSP是没有经过编译

91、的文本,即使是编译成了Servlet,也肯定是符合Servlet规范的,尽管可能不符合HTML语法,所以它是安全的。Java程序设计之网络编程Java安全Web编程J2EE概述17.3.6JSP和Servlet在实际工程中的应用在使用JSP技术开发网站时,并不强调使用Servlet。这是为什么呢?Servlet的应用是没有问题的,它非常适合服务器端的处理和编程。但是如果用Servlet处理大量的HTML文本,那么将是一件及其繁琐的事情。这种事情更适合机器去做,否则就是浪费程序员的体力。所以Servlet更适合处理后端的事务,前端的效果用JSP来实现更为合适。早期的JSP标准给出了两种使用JSP

92、的方式。这些方式都可以归纳为JSP模式1和JSP模式2,主要的差别在于处理大量请求的位置不同。Java程序设计之网络编程Java安全Web编程J2EE概述17.3.6JSP和Servlet在实际工程中的应用在模式1中,JSP页面独自响应请求并将处理结果返回客户。这里仍然有视图和内容的分离,因为所有的数据都依靠bean来处理。尽管模式1可以很好的满足小型应用的需要,但却不能满足大型应用的需要。大量使用模式1,常常会导致页面被嵌入大量的Script和Java代码。特别是当需要处理的商业逻辑很复杂时,情况会变得很严重。也许这对于Java程序员来说,这不是大问题。但是如果开发者是前台界面设计人员,在大

93、型项目中,这是很常见的,则代码的开发和维护将出现困难。Java程序设计之网络编程Java安全Web编程J2EE概述17.3.6JSP和Servlet在实际工程中的应用JSP模式2是一种面向动态内容的实现,结合了Servlet和JSP技术。它利用两种技术原有的优点,采用JSP来表现页面,采用Servlet来完成大量的处理,Servlet扮演一个控制者的角色,并负责响应客户请求。接着,Servlet创建JSP需要的Bean和对象,再根据用户的行为,决定将哪个JSP页面发送给用户。特别要注意的是,JSP页面中没有任何商业处理逻辑,它只是简单的检索Servlet先前创建的Beans或者对象,再将动态内

94、容插入预定义的模板。Java程序设计之网络编程Java安全Web编程J2EE概述第17章Web服务器端编程17.1JavaWeb服务器介绍17.2Servlet介绍17.3JSP介绍17.4Struts介绍Java程序设计之网络编程Java安全Web编程J2EE概述17.4Struts介绍Struts是ApacheJakarta项目的一部分,它用JavaServlet/JavaServerPages技术,开发Web应用程序的开放源码的framework。实际上Struts是一个在JSP模式2的基础上实现的MVC框架技术。下面我们介绍Struts的体系结构。Strutsframework是MVC

95、模式的体现,下面我们就从分别从模型、视图、控制来看看struts的体系结构(Architecture)。1)从视图角度()从视图角度(View)主要由JSP建立,Struts自身包含了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:BeanTags,HTMLTags,LogicTags,NestedTags,TemplateTags这几个Taglib。有关它们的详细资料请参考Struts用户手册2)从模型角度()从模型角度(Model)模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也也划分到模型中)。在Struts中,系统的状态主要有Actio

96、mFormBean体现,一般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储,Struts本身也提供了UTitle包,可以方便的与数据库操作。Java程序设计之网络编程Java安全Web编程J2EE概述17.4Struts介绍3)从控制器角度()从控制器角度(Controller)在Strutsframework中,Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和Action

97、Forward则指定了不同业务逻辑或流程的运行方向。StrutsFramework的优点如下:Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。Struts已越来越多运用于商业软件,是目前非常优秀

98、的J2EEMVC实现方式。进一步学习读者可以参考网站http:/。Java程序设计之网络编程Java安全Web编程J2EE概述第18章J2EE规范和EJB组件模型J2EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理等相关复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如编写一次、随处运行的特性、方便存取数据库的JDBCAPI、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对EJB(EnterpriseJavaBeans)、JavaServletsAPI、JSP(Jav

99、aServerPages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。Java程序设计之网络编程Java安全Web编程J2EE概述主要内容18.1 J2EE规范18.2 EJB组件模型Java程序设计之网络编程Java安全Web编程J2EE概述18.1J2EE规范nJava2平台有三个版本:它们是适用于小型设备和智能卡的Java2平台Micro版(Java2 Platform Micro Edition,J2ME)、适用于桌面系统的Java2平台标准版(Java2 Platform Standard Edition,J2SE)、适用于创建服务

100、器应用程序和服务的Java2平台企业版(Java2 Platform Enterprise Edition,J2EE)。n由于J2EE的出现,使得目前Java的应用领域主要体现在企业级网络应用上,这些应用数据处理量大、事务处理复杂、安全性要求高、客户分布广泛,能够充分发挥Java高校、安全、适合分布运行的特点。Java程序设计之网络编程Java安全Web编程J2EE概述18.1.1J2EE的基本概念nJ2EE技术的基础就是核心Java平台或Java2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如“编写一次、随处运行”的特性、方便存取数据库的JDBC API、CORBA技术以及能够在I

101、nternet应用中保护数据的安全模式等等,同时还提供了对EJB、JavaServletsAPI、JSP以及XML技术的全面支持。n其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。Java程序设计之网络编程Java安全Web编程J2EE概述保存现有的信息资产n由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。Java程序设计之网络编程Java安全Web编程J2EE概述高效的开发平台n分布式共享数据对象CACHE服务:让开发人员编制高性能的系统,极大提高整体部署的伸缩性。n状态管理服务:让开发人员写更少的代码,不用关心如何

102、管理状态,这样能够更快地完成程序开发。n持续性服务:让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。Java程序设计之网络编程Java安全Web编程J2EE概述异构环境nJ2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。Java程序设计之网络编程Java安全Web编程J2EE概述4可伸缩性n企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于

103、J2EE平台的应用程序可被部署到各种操作系统上。Java程序设计之网络编程Java安全Web编程J2EE概述5稳定的可用性n基于层次化组件模式的J2EE平台把业务逻辑和底层网络技术分离开来,具有可伸缩性、扩展性、易开发性和易维护性,已经成为企业级商业分布式网络计算的事实标准。nJ2EE部署到可靠的操作环境中,他们支持长期的可用性。Java程序设计之网络编程Java安全Web编程J2EE概述18.1.2J2EE框架nJ2EE平台使用了多层的分布式应用程序模型。应用程序的逻辑根据其实现的不同功能被封装到组件中,组成J2EE应用程序的大量应用程序组件根据其所属的层被安装到不同的机器中。Java程序设

104、计之网络编程Java安全Web编程J2EE概述Java程序设计之网络编程Java安全Web编程J2EE概述一、客户端 1.Web客户端n一个Web客户端由两部分组成:由运行在Web层的Web组件生成的各种包含标记语言(HTML、XML等)的动态Web页面,和接受从服务器传送来的页面并将它显示出来的Web页面。Web客户端有时被称为瘦客户端。瘦客户端一般不做数据库查询、执行复杂的商业规则或连接传统应用程序子类的操作Java程序设计之网络编程Java安全Web编程J2EE概述2. Appletsn从Web层接收一个Web页面可能包含内嵌的applet,applet是用Java语言编写的客户端小应用

105、程序,它运行于Java虚拟机中,后者通常安装在Web浏览器中。然而为了在Web浏览器中成功地运行applet,客户端系统很可能需要Java插件和安全策略文件。Java程序设计之网络编程Java安全Web编程J2EE概述3. 应用程序客户端n一个J2EE应用程序客户端运行在客户端机器上,它使得用户可以处理需要比标记语言所能提供地更丰富地用户界面地任务。Java程序设计之网络编程Java安全Web编程J2EE概述二、J2EE服务器nWeb组件n业务逻辑组件nJ2EE容器Java程序设计之网络编程Java安全Web编程J2EE概述18.1.3J2EE的核心技术nJ2EE 平台由一整套服务(Servi

106、ces)、应用程序接口(APIs)和协议构成,如下图所示,它对开发基于Web 的多层、分布式应用提供了功能支持。Java程序设计之网络编程Java安全Web编程J2EE概述Java程序设计之网络编程Java安全Web编程J2EE概述1. 组件/容器技术nEJB 容器管理所有J2EE 应用程序中EJB 的执行。nWeb 容器管理所有J2EE 应用程序中JSP 页面和Servlet 组件的执行。 n应用程序客户端容器管理所有J2EE 应用程序中应用程序客户端组件的执行。 nApplet 容器是运行在客户端机器上的Web 浏览器和 Java 插件的结合。n容器设置定制了J2EE 服务器所提供的内在支

107、持,包括安全,事务管理,JNDI(Java Naming and Directory Interface)寻址,远程连接等服务Java程序设计之网络编程Java安全Web编程J2EE概述2. Servlets 和JSPnJSP(Java Server Pages): JSP 页面由HTML 代码和嵌入其中的Java 代码所组成。nServlet 是一种小型的Java 程序,它扩展了Web服务器的功能。Java程序设计之网络编程Java安全Web编程J2EE概述3. EJB 技术nEJB(Enterprise JavaBean)提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸

108、缩性和高度复杂的企业级应用的开发。Java程序设计之网络编程Java安全Web编程J2EE概述4. 数据库访问nJDBC(Java Database Connectivity): JDBC API 为访问不同的数据库提供了一种统一的途径Java程序设计之网络编程Java安全Web编程J2EE概述5. 分布式通信技术及分布示应用技术nJNDInRMInRMI-IIOPnJava IDL/CORBAnJMSnJTAnJTSnJavaMailnJAFnJAXPnJCAJava程序设计之网络编程Java安全Web编程J2EE概述18.2EJB组件模型nEnterprise JavaBean (EJB)

109、是Sun Microsystems对CORBA的可移植性和复杂性的解决方案。EJB 引入了比 CORBA 更简单的编程模块,它可以让开发人员创建可移植分布式组件,称作 Enterprise Bean。Java程序设计之网络编程Java安全Web编程J2EE概述n由于 EJB 规范颁布了一组明确的 EJB 容器(供应商服务器)和 EJB 组件(商业对象)之间的契约,因此 EJB 中实现了可移植性。这些契约或规则确切规定容器必须为 Enterprise Bean 提供什么服务,bean 开发人员需要使用什么 API 和声明属性来创建 Enterprise Bean。由于详细指定了 Enterpri

110、se Bean 的生命周期,因此供应商知道如何在运行时管理 bean,bean 开发人员确切知道 Enterprise Bean 在其存在期间可以做什么。Java程序设计之网络编程Java安全Web编程J2EE概述18.2.1EJB容器nEnterprise Bean 是在称作 EJB 容器的特殊环境中运行的软件组件。容器容纳和管理 Enterprise Bean 的方式与 Java Web 服务器容纳 Servlet 或 HTML 浏览器容纳 Java Applet 的方式相同。n容器不允许客户机应用程序直接访问 Enterprise Bean。当客户机应用程序调用 Enterprise B

111、ean 上的远程方法时,容器首先拦截调用,以确保持续、事务和安全性都正确应用于客户机对 bean 执行的每一个操作。Java程序设计之网络编程Java安全Web编程J2EE概述18.2.2远程和本地接口n远程和本地接口表示 bean,但容器不允许从客户机应用程序直接访问 bean。每次请求、创建、或删除 bean 时,容器都会管理整个过程。本地接口表示组件的生命周期方法(创建、破坏、查找),而远程接口表示 bean 的商业方法。远程和本地接口分别扩展 javax.ejb.EJBObject 和 javax.ejb.EJBHome 接口。Java程序设计之网络编程Java安全Web编程J2EE概

112、述18.2.3实体Beann实体 Bean 是两种主要 bean(实体和会话)中的一种。实体 Bean 用于表示数据库中的数据。它向 JDBC 或其它一些后端 API 经常访问的数据提供了一个面向对象的接口。不仅如此,实体 Bean 提供了一个组件模型,可以让 bean 开发人员将精力集中在 bean 的商业逻辑上,而容器负责管理持续、事务和访问控制。 n有两种基本的实体 Bean:容器管理的持续 (CMP) 和 bean 管理的持续 (BMP) Java程序设计之网络编程Java安全Web编程J2EE概述18.2.4会话Beann会话 Bean 用于管理实体 Bean 和其它会话 Bean

113、的交互、访问资源,它们通常代表客户机执行任务。n会话 Bean 有两种基本类型:无状态和有状态。无状态会话 Bean 包括类似于过程的商业方法;它们只对在被调用时传递给它们的自变量进行操作。n无状态 Bean 之所以称作无状态是因为它们是过渡的;他们不维护方法调用之间的商业状态。有状态会话 Bean 封装商业逻辑和特定于某个客户机的状态。n有状态 bean 之所以称作“有状态”是因为它们维护方法调用之间的商业状态,状态保留在内存中,并不持久。Java程序设计之网络编程Java安全Web编程J2EE概述18.2.5部署EJBn部署描述信息有一个预先定义的格式,所有符合 EJB 的 bean 必须

114、使用此格式,而所有符合 EJB 的服务器必须知道如何读取此格式。这种格式在 XML 文档类型定义(DTD)中指定。部署描述信息描述了 bean 的类型(会话或实体)以及远程接口、本地接口和 bean 类使用的类。它还指定了 bean 中每个方法的事务性属性、哪些安全性角色可以访问每个方法(访问控制),以及实体 Bean 中的持续是被自动处理还是由 bean 来执行。Java程序设计之网络编程Java安全Web编程J2EE概述第19章J2ME概述J2ME是JAVA2的微型版本,只支持JAVA标准规范中所定义的核心类函数库的子集。J2ME定位于嵌入式系统的应用上Java程序设计之网络编程Java安

115、全Web编程J2EE概述主要内容n19.1J2ME概述概述n19.2J2ME技术架构技术架构n19.3MIDP应用程序开发应用程序开发Java程序设计之网络编程Java安全Web编程J2EE概述19.1J2ME概述nJ2ME是JAVA2的微型版本只支持JAVA标准规范中所定义的核心类函数库的子集。比如,J2MECLDC的规范之中,只支持java.lang.*,java.io.*,以及java.util.*的类函数库。并加入了一些支持嵌入式系统 的 扩 展 类 函 数 库 , 如 :javax.meicroedition.io.*类函数库。但是并不支持所有的JAVA基本类。Java程序设计之网络

116、编程Java安全Web编程J2EE概述Java程序设计之网络编程Java安全Web编程J2EE概述19.2J2ME技术架构nJ2ME最基本的规范制定在JSR-68(Java规范编号第68号),在此规范里头定义了J2ME的技术架构Java程序设计之网络编程Java安全Web编程J2EE概述19.2.1Configurationn于是J2ME先大致将所有的嵌入式设备大体上区分为两种:一种是资源有限;另外一种则是资源相对无限的设备nJ2ME把运算能力有限、电力有限这类的嵌入式设备称做ConnectedLimintedDevice(可连接外界、资源有限的设备。Java程序设计之网络编程Java安全We

117、b编程J2EE概述n规定这类型的设备如果要能执行Java程序,则必须满足某些特定条件(CPU速度、内存、联机速度),这些必须满足的条件就定义在ConnectedLimitedDeviceConfiguration(CLDC)规范之中。n另外一种设备则称为Connocedevice(可连接、资源相对无限的设备),这种设备要能够执行Java程序的规范则定义在ConnectedDeviceConfiguration(CDC)规范里面。Java程序设计之网络编程Java安全Web编程J2EE概述Java程序设计之网络编程Java安全Web编程J2EE概述19.2.2ProfilenProfile是架构

118、在Configuration之上的规范。所以每种Profile都会声明它是根植于哪种Configuration的。之所以有Profile的出现,是为了要更明确的区分出各种嵌入式设备之上的Java程序该如何开发,以及它们应该具有哪些功能。因此Profile中定义了与特定嵌入式设备非常相关的扩充类库。Java程序设计之网络编程Java安全Web编程J2EE概述n通常Java程序在各种嵌入式设备上的用户界面该如何呈现就是定义在Profile上的(例如MIDP之中的LCDUI,LiminitedConfigurationDeviceUserInterface).Profile之中也是定义了程序该如何和

119、用户或设备产生互动(例如程序的生命周期,如何接受来自用户的信息)。Profile之中定义的扩充类库是根据底层Configuration内所定义的核心类库所建立,为了更符合特殊设备的需求,Profile会在Configuration之中的类增加新的方法,或是让方法抛出新的异常。Java程序设计之网络编程Java安全Web编程J2EE概述19.2.3OptionalPackagesn除了Configuration与Profile之外,在J2ME规范之中还定义了厂商选择性实现(OptionalPackages,选择性包)。所谓的厂商选择性实现,通常是一些本身具有独立价值的API,厂商可以依据自己的需

120、求,选择性实现其中某些OptionalPackages规范。Java程序设计之网络编程Java安全Web编程J2EE概述19.2.4J2ME工业标准JTW1nJWTI(JavaTechnologyforWirelessIndustry)是一个综合性的规范,其目的是为了确保J2ME软件的可移植性。所以JWTI规范出了规范无线通讯平台(特别是手机)所必须支持的J2ME标准之外,也对既有规范中模糊不清的地方予以加强。Java程序设计之网络编程Java安全Web编程J2EE概述n为了解决上述问题,进一步提高J2ME应用程序的可移植性,SunMicrosystems以MIDP2.0规范为核心,设计了JT

121、WI规范。未来的无线通讯平台将不会支付和MIDP2.0规范,而且必须要符合JTWI规范。nJTWI主要分为两个部分:规定平台必须支持的API、统一的应用程序执行环境。Java程序设计之网络编程Java安全Web编程J2EE概述19.2.5JINI技术nJINI是一种可以连接各种java平台的技术。不同java平台的程序经由JINI,能够彼此连接在一块,彼此分享对方的资源。其中,CLDC需要Gateway才能与JINI连接,原因在于他们没有RMI功能。而CDC可以实现RMIOptionalPackages以取得RMI功能。SmartCard平台由于其特性使然,并没有经由JINI与其他Java版本

122、的应用程序做沟通,只是在JINI所造成的广大分布式环境中作为认证用。Java程序设计之网络编程Java安全Web编程J2EE概述Java程序设计之网络编程Java安全Web编程J2EE概述nJini 基础建设的核心包含以下几个部分:nDiscovery Protocol:提供了如何让网路上任何种类的资源加入联盟的方式。neXtended RMI :Jini的元件彼此沟通时所使用的机制。nDistributed Security:定义了Jini 联盟成员的使用权限。nLookup Service:用来展现联盟中的所有成员,以及帮助使用者寻找网路资源,或者负责提供联盟中的资源给使用者用。Java程

123、序设计之网络编程Java安全Web编程J2EE概述19.2.6PersonaljavanPersonalJava是正规java版本的一个分支,其目的是能够让pda或手机执行java程序,目前在PocketPC或SymbianOS上都可以开发PersonalJava应用程序。nPersonalJava规范并不属于J2ME的CLDC或者是CDC,虽然最后它将会够归到CDC的PersonalProfile融合,但是目前其规范还是继续在发展中。之所以有这种情况,是因为长期以来已经有许多围绕着PersonalJava的规范所实现出来的商业产品。Java程序设计之网络编程Java安全Web编程J2EE概述

124、Java程序设计之网络编程Java安全Web编程J2EE概述19.3MIDP应用程序开发n这里讨论的J2ME无线应用开发主要是基于CLDC/MIDP的开发,其应用程序可运行于移植有KVM的手机、PDA等,这类设备由MIDP定义,即移动信息设备(MID),可看作垂直应用市场。nMIDP应用程序的运行可以在模拟器上进行,也可以把应用程序通过IrDA、RS232或OTA等方式之一下载到目标设备上运行,通常情况下都是在模拟器上运行。Java程序设计之网络编程Java安全Web编程J2EE概述n本部分采用的开发环境是Sun公司的J2MEWirelessToolkit2.2,大家可以在Sun公司网站上免费

125、下载。其中,包含了程序运行需要的模拟器。当然,大家也可以采用其他功能更强大的开发工具,比如:Jbuilder、Eclipse等可视化开发工具。J2MEWirelessToolkit的安装非常简单,只需要大家根按照提示一步一步的安装。Java程序设计之网络编程Java安全Web编程J2EE概述19.3.1新建并运行MIDP程序n第一步:我们通过开始菜单,启动J2MEWirelessToolkit2.2工具集中的KtoolBarn第二步:然后点击NewProject按钮,在弹出的输入框中输入ProjectName为HelloWorld,MIDletClassName为Hello。n第三步:点击Cr

126、eateProject,开始生成项目,工具会弹出MIDP配置简表。Java程序设计之网络编程Java安全Web编程J2EE概述n第四步:这里接受生成的默认值(以后还可以修改)点击OK,工具提示我们把写好的Java源程序放到WTK_HOMEappsHelloWorldsrc目录之下n第五步:用程序编辑器编辑程序Hello.java,并保存到WTK_HOMEappsHelloWorldsrc目录之下。n第六步:保存好了之后,点击Build按钮,工具会为你编译程序。n第七步:再点击Run按钮,会弹出一个手机界面,显示程序运行结果。Java程序设计之网络编程Java安全Web编程J2EE概述19.3.

127、2综合示例/应用程序生命周期,和J2SE一样,包java.lang.*是默认加载的importjavax.microedition.midlet.*;/MIDP用户界面importjavax.microedition.lcdui.*;publicclassHelloextendsMIDletimplementsCommandListenerprivateDisplaydisplay;/引用MIDlet的Display对象privateTextBoxtextBox;/Textbox显示一条消息privateCommandcmdExit;/设定按钮用于退出MIDletpublicHello()/M

128、IDlet构造程序display=Display.getDisplay(this);cmdExit=newCommand(Exit,Command.SCREEN,1);textBox=newTextBox(MyFirstMIDlet,Hello,J2ME!,50,0);textBox.addCommand(cmdExit);textBox.setCommandListener(this);/必须要实现的接口,被应用管理软件调用来启动MIDletpublicvoidstartApp()display.setCurrent(textBox);publicvoidpauseApp()/必须要实现的接

129、口publicvoiddestroyApp(booleanunconditional)/必须要实现的接口/检查一下是否选择了退出命令publicvoidcommandAction(Commandc,Displayabled)if(c=cmdExit)destroyApp(false);notifyDestroyed();Java程序设计之网络编程Java安全Web编程J2EE概述importjavax.microedition.lcdui.*;importjavax.microedition.midlet.*;publicclassTestextendsMIDletimplementsComm

130、andListenerprivateTextBoxtextbox;/Textbox显示一条消息privateDisplaydisp;/引用MIDlet的Display对象privateCommandcmdExit;/设定按钮用于退出MIDletprivateCommandcmdOK;/确定按钮privateAlertalt;/信息提示对象publicTest()super();disp=Display.getDisplay(this);/获得当前MIDlet的Display对象cmdExit=newCommand(退出,Command.SCREEN,1);/新建两个控制按钮cmdOK=newC

131、ommand(阅读,Command.OK,1);textbox=newTextBox(请输入待阅项目序号:,40,0);/新建文本框textbox.addCommand(cmdExit);/添加控制按钮textbox.addCommand(cmdOK);textbox.setCommandListener(this);/开始侦听命令Java程序设计之网络编程Java安全Web编程J2EE概述protectedvoidstartApp()throwsMIDletStateChangeExceptionalt=newAlert(登鹳雀楼);/开始运行时显示信息,新建信息框对象/设置显示字符串alt

132、.setString(作者:(唐)王之涣);alt.setType(AlertType.INFO);/设置为普通阅读信息框alt.setTimeout(Alert.FOREVER);/信息窗口在按下DONE键后才能进入下一页面disp.setCurrent(alt,textbox);/显示信息窗口protectedvoidpauseApp()protectedvoiddestroyApp(booleanarg0)publicvoidcommandAction(Commandarg0,Displayablearg1)if(arg0=cmdExit)/按下退出键时停止运行destroyApp(fa

133、lse);notifyDestroyed();if(arg0=cmdOK)/按下阅读键后阅读对应信息TextBoxtextbox=(TextBox)arg1;/得到用户输入的内容StringsInfo=textbox.getString();Java程序设计之网络编程Java安全Web编程J2EE概述if(sInfo.equals(1)|sInfo.equals(2)|sInfo.equals(3)|sInfo.equals(4)/显示项目1的内容/根据所选项目选择要显示的内容if(sInfo.equals(1)alt.setString(白日依山尽);if(sInfo.equals(2)al

134、t.setString(黄河入海流);if(sInfo.equals(3)alt.setString(欲穷千里目);if(sInfo.equals(4)alt.setString(更上一层楼);alt.setTitle(您正在阅读短信+sInfo);/设置标题elsealt.setString(很抱歉,暂时还没有您选择的项目,请重新输入!);alt.setTitle(错误警告);/设置标题alt.setType(AlertType.INFO);/设置为普通阅读信息框alt.setTimeout(Alert.FOREVER);/信息窗口在按下DONE键后进入下一页面disp.setCurrent(alt,textbox);/显示信息窗口Java程序设计之网络编程Java安全Web编程J2EE概述

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号