《Java程序设计之网络编程》Java安全、Web编程、J2EE概述课件_第1页
《Java程序设计之网络编程》Java安全、Web编程、J2EE概述课件_第2页
《Java程序设计之网络编程》Java安全、Web编程、J2EE概述课件_第3页
《Java程序设计之网络编程》Java安全、Web编程、J2EE概述课件_第4页
《Java程序设计之网络编程》Java安全、Web编程、J2EE概述课件_第5页
已阅读5页,还剩148页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java程序设计之网络编程 重庆大学计算机学院教学课件第1页,共153页。第16章 Java安全技术 第2页,共153页。主要内容16.1 安全基本知识 16.2 Java的安全模型 16.3 Java的密码学结构 第3页,共153页。16.1 安全基本知识攻击,保护 密码学 ,机密性 ,认证 ,证书完整性 ,认可性 审计和日志 ,安全策略和访问控制第4页,共153页。主要内容16.1 安全基本知识 16.2 Java的安全模型 16.3 Java的密码学结构 第5页,共153页。16.2 Java的安全模型安全模型的演化 Java2 安全模型Java2的安全划分 应用程序安全性小程序安全性

2、J2SDK安全工具 Java小程序的安全部署 第6页,共153页。最初安全模型为沙箱模型 JVMValuable Resources (files,etc)SandBoxRemote CodeLocal code为从开放的网络中获取的非信任代码的提供了一个受限制的运行环境。沙箱模型的实质是本地代码对重要的系统资源(如文件系统)有全部的访问权限,而下载的远程代码(例如Applet)则不被信任并且仅能访问沙箱里提供的有限资源 第7页,共153页。 JDK 1.1安全模型 JVMValuable Resources (files,etc)SandBoxRemote CodeLocal code使用数

3、字签名服务,可以用与 Java 编写的本地程序类似的方式对待可信的 Applet 第8页,共153页。JDK1.2中的新安全体系结构JVMValuable resources(files,etc)PDPDSandboxSecurity policyClass loaderLocal or remote code ProtectionDomain是在策略数据库中指定的,授予 CodeSource 的 Permission 的聚合体。通过 ClassLoader 装入到 JVM 的每个类文件被分配给一个ProtectionDomain。 第9页,共153页。Java2 安全模型 Bootstrap

4、Class filesSystemClass filesUserClass filesBytecode VerifierBootstrapClassLoaderSystemClassLoaderClassLoaderSecurityManagerProtection DomainsAccessControllerOperating System , HardwareCodeSource(URL,Certificates)Permissionskeystore第10页,共153页。Java2 安全模型Java 安全主要建立在 Java 运行时环境的三个方面:ByteCode Verifier(字

5、节码验证器)、Security Manager(安全管理器)以及 ClassLoader(类装入器)。代码验证(Bytecode Verifier)确保所下载的代码被恰当地格式化,字节码(“Java 虚拟机”指令)没有违反语言或虚拟机的安全限制(如,无非法数据转换),没有执行指针寻址,内部堆栈不能溢出或下溢,以及字节码指令将拥有正确的类型参数。 第11页,共153页。安全管理器(SecurityManager) SecurityManager 在尝试执行文件 I/O 和网络 I/O、创建新的 ClassLoader、操作线程或线程组、启动底层平台(操作系统)上的进程、终止“Java 虚拟机”、

6、将非 Java 库(本机代码)装入到 JVM、完成某种类型的系统操作以及将某种类型的类装入到 JVM 中时激发运行时访问控制机制。例如,Java Applet 沙箱严格地将所下载的 Applet 约束到被认为是比较安全的有限的运行环境中。 第12页,共153页。权限(Permission) 一个权限允许代码执行的一个特定的操作,权限可以是特别具体的,也可以是一般化的。 一个权限由三个部分组成:类型,名称和操作。类型是必须的,它是实现了Permission接口的特定的类 permission java.security.AllPermission;permission java.lang.Run

7、timePermission stopThread;permission java.io.FilePermission /tmp/foo, read;第13页,共153页。代码源(Code Sources) 代码源包含类的从哪里装载的位置信息和对类签名信息。一般情况下,这个位置被表示成一个URL。如果代码被签名,那么代码源里面包含了关于签名者的信息。类可以基于代码源被赋予一定的权限。保护域(Protection Domains)是赋予代码源的权限的集合。可以通过策略文件定义。 第14页,共153页。策略文件(Policy files) 策略文件是一个控制沙箱的管理元素。一个策略文件可以包含一个

8、或者多个条目来定义一个保护域。每个条目是赋予代码源的权限声明。一般有两个策略文件,一个全局策略文件,一个用户相关策略文件。全局策略文件影响Java虚拟机种的所有的实例。策略文件是一个文本文件,可以直接进行编辑。也可以用Java提供的编辑工具policyTool进行编辑。第15页,共153页。密钥库(Keystores) 通过代码签名可以赋予代码更多的执行自由度。如果你确信正在执行的代码来自一个可信的组织,你可以允许它访问本地磁盘文件,或者使用打印机等。被签名的代码依赖于公钥证书,证书被保存在密钥库中。开发者可以使用密钥库中的证书对代码进行签名;一般用户或者系统管理员可以在执行已签名的代码时参考

9、密钥库发现是谁的签名。第16页,共153页。访问控制器(AccessController) 访问关键系统资源时,是否允许或者拒绝,具体结果决定于策略文件的配置。把一段代码标记为具有一定的特权,影响后续的访问判断。获取当前调用上下文的一个快照,来自不同上下文的访问控制判断可以参照被保存的上下文。做特殊安全检查第17页,共153页。Java2的策略配置文件SecurityManager security = System.getSecurityManager();if (security != null) security. checkPermission (Permission perm );如

10、果这个请求被允许,checkPermission不返回任何值;如果被拒绝,抛出异常SecurityException。 grant signedBy signer_names, codeBase URL permission permission_class_name target_name, action,signedBy signer_names;第18页,共153页。应用程序安全性 在不使用SecurityManager的情况下使用SecurityManager的情况修改策略配置文件第19页,共153页。小应用程序安全性通过程序说明在命令行中用AppletViewer执行Appletvi

11、ewer writeFile.html第20页,共153页。J2SDK安全工具 keytool 管理密钥库和证书 jarsigner 产生和验证Java签名 policytool 图形化的方式管理策略文件。第21页,共153页。Keytool1)创建公/私钥对;2)发出证书请求到认证权威(CA)3)从认证权威导入证书回复4)指明属于其他组织的公钥是受信任的。Keytool目前能够处理符合X.509标准的证书。JSSE( Java Secure Socket Extension,JSSE ) 1.0.2以后的版本可以支持pkcs12。第22页,共153页。Keytool参数 参数描述-genke

12、y产生一个密钥对 (一个公钥关联一个私钥)-import读取一个证书或者证书链,并存储到密钥库中,同时用一个别名进行标识。-certreq用pkcs10产生一个证书签发请求。-export导出一个和某个别名相关联的证书-list打印整个密钥库中的内容,或者打印与某个别名相关联的证书。-storepasswd修改或指定密钥库的密码-keypasswd修改或者指定某一个密钥对的访问密码-delete删除密钥库中的条目。第23页,共153页。KeyTool应用D:keytool -genkey -alias javafan -keyalg rsa -validity 750输入keystore密码:

13、 keystore您的名字与姓氏是什么? Unknown: JavaFan您的组织单位名称是什么? Unknown: Computer Science您的组织名称是什么? Unknown: Chongqing University您所在的城市或区域名称是什么? Unknown: Chongqing您所在的州或省份名称是什么? Unknown: Chongqing该单位的两字母国家代码是什么 Unknown: CNCN=JavaFan, OU=Computer Science, O=Chongqing University, L=Chongqing , ST=Chongqing, C=CN 正确

14、吗? 否: 是输入的主密码 (如果和 keystore 密码相同,按回车): 第24页,共153页。用keytool显示证书的内容 D: keytool -v -printcert -file javafan.cerOwner: CN=JavaFan, OU=Computer Science, O=Chongqing University, L=Chongqing ,ST=Chongqing, C=CN发照者: CN=JavaFan, OU=Computer Science, O=Chongqing University, L=Chongqing , ST=Chongqing, C=CN序号:

15、 43030437有效期间: Wed Aug 17 17:32:39 CST 2005 至: Thu Sep 06 17:32:39 CST 2007认证指纹: MD5: CB:AE:97:24:A9:93:4B:34:E2:3B:95:95:70:E7:70:D5 SHA1: E3:32:0C:68:24:34:CB:6E:02:BF:ED:E6:D8:C0:29:AE:66:5C:20:DD第25页,共153页。jarsignerJarsigner用于给打包后的Java程序签名,或者验证签名。Jarsigner可以在签名或者验证签名时,访问由keytool创建的密钥库。 选项描述-stor

16、epass访问密钥库时,指定口令-keypass指定私钥的保护口令-signedjar指定需要被签名的jar文件-verifyjar文件的签名验证-verbose控制是否输出签名或者验证过程的详细信息-certs与-verify、verbose一起使用,输出包括每个签名证书的信息第26页,共153页。policytool Java运行时环境的安全配置文件java.home/lib/security/java.security(java.home指安装Java运行时环境的目录)中包括两个策略文件:java.home/lib/security/java.policy 和 user.home/.ja

17、va.policy(user.home指用户主目录)。PolicyTool缺省修改第二个文件。 第27页,共153页。Java小程序的安全部署 SimpleScannerApplet程序检查某个主机上的TCP端口是否开放,比如用于WWW服务的80端口,用于SMTP服务的25端口等。第28页,共153页。程序运行界面第29页,共153页。制作和部署安全小程序步骤编制小程序SimpleScannerApplet 编写Html文件scanner.html 把程序打包成Jar文件获取并安装一个支持RSA的签名证书。 用该证书对Jar文件进行签名用sun的Html Convert转换scanner.ht

18、ml部署转换后的html文件和已经签名的jar文件见程序 第30页,共153页。主要内容16.1 安全基本知识 16.2 Java的安全模型 16.3 Java的密码学结构 第31页,共153页。16.3 Java的密码学结构16.3.1基本概念16.3.2核心类16.3.3消息摘要16.3.4数字签名16.3.5数据加密/解密第32页,共153页。16.3.1基本概念Java 密码学结构设计遵循两个原则: (1) 算法的独立性和可靠性;(2) 实现的独立性和相互作用性。Java 2 中主要的密码学服务有以下几种:数字签名、消息摘要、加密/解密密钥工厂密钥库创建与密钥管理算法参数产生、管理证书

19、工厂第33页,共153页。JDK5.0提供的密码学服务可以通过修改java.home/lib/security/java.security文件安装密码学服务提供者。缺省情况下,Java运行时环境已经安装了下面的提供者:vider.1=vider.Sunvider.2=sun.security.rsa.SunRsaSignvider.3=ernal.ssl.Providervider.4=vider.SunJCEvider.5=sun.security.jgss.SunProvidervider.6=com.sun.security.sasl.Provider见程序第34页,共153页。测试程序

20、import java.security.Provider;import java.security.Security;public class GetProviderInfo public static void main(String args) Provider plist = Security.getProviders();for (int i = 0; i plist.length; i+) System.out.println( + (i + 1) + -Provider name:+ plisti.getName();System.out.println(Provider inf

21、o: + plisti.getInfo();第35页,共153页。16.3.2核心类Security , Provider MessageDigest类 Signature类 Key ,KeyFactory , KeyPair ,KeyPairGenerator SecureRandom 第36页,共153页。16.3.3消息摘要使用MD5算法产生消息摘要也可以使用SHA1算法MessageDigest支持MD5和SHA消息摘要算法。调用getInstance()方法选择一个合适的算法;调用update()方法准备数据输入缓冲区;digest()方法产生消息摘要;摘要的长度取决于所选择的算法。

22、使用 MD5产生128位的摘要,使用SHA产生160位的摘要。 第37页,共153页。16.3.4数字签名Signature类支持数字签名,getInstance( )方法选择数字签名的算法。通过指定参数SHA1withDSA,可以在DSA数字签名算法中使用SHA-1产生消息摘要。如果使用RSA数字签名算法,可以用MD5或者SHA-1产生消息摘要,可以由参数MD2withRSA, MD5withRSA, SHA1withRSA确定使用的算法。见程序第38页,共153页。16.3.5数据加密/解密1. 对称密钥对称加密使用相同的密钥执行加密和解密操作。目前,安全度最高,使用最广泛地就是AES加密

23、标准。对称加密的基本过程是:根据指定算法生成密钥产生器对象;产生密钥生成加密引擎对象向加密引擎初始化需要加密的数据执行加密操作对称解密密的基本过程是:获取密钥生成解密引擎对象向解密引擎初始化需要解密的数据执行解密操作见程序第39页,共153页。非对称密钥 非对称密钥体系就是加密和解密用不同的密钥,称为密钥对,一个叫公钥,一个叫私钥。公钥是公开的,任何人都可以访问,私钥是保密的,只有密钥的持有能使用。最典型和使用最普遍的就是RSA算法。一般用接收者的公钥加密数据,只有接收者用自己的私钥才可以解密。主要设计到的类有:KeyPairGenerator和Cipher.KeyPairGenerator负

24、责产生密钥对,Cipher作为执行引擎,具体执行加密和解密操作。第40页,共153页。非对称加密解密过程一般加密处理过程是:使用RSA算法产生密钥对用公钥初始加密引擎Cipher向Cipher传送数据。执行加密操作。解密过程是:用私钥初始解密引擎Cipher向Cipher传送已加密的数据。执行解密操作。见程序第41页,共153页。第17章 Web服务器端编程第42页,共153页。第17章 Web服务器端编程17.1 Java Web服务器介绍17.2 Servlet介绍17.3 JSP介绍17.4 Struts介绍 第43页,共153页。17.1 Java Web服务器介绍 在进行实际大型Ja

25、va Web项目实施的时候,我们可以采用商业型的应用服务器,应用服务器可以处理复杂的商业逻辑,常应用于WEB多层结构的开发。例如IBM的 WebSphere服务器,BEA 的WebLogic服务器。这两种服务器功能齐全而强大,支持所有的Java 服务容器标准,适用于大型的商业Java Web应用的发布。但是这两种服务器都是商业服务器,价格昂贵,对系统资源要求极高。特别是Websphere 配置更复杂。JBoss公司的开源免费软件Jboss应用服务器同样功能齐全而强大,也支持所有的Java 服务容器标准。而且JBoss具有良好的性价比,具有良好的运行效率和可靠性,因此已经得到越来越多的J2EE应

26、用开发者和中小型企业的青睐。但同样对系统资源要求高,配置复杂。第44页,共153页。17.1 Java Web服务器介绍 在开发或学习过程中,有许多免费轻型的Java Web服务器可以供我们选用,如Tomcat、Resin、Orion等等。他们使用都很方便,占用资源也很少,适合开发过程中的调试阶段;而且这些服务器还可以和Jbuilder、Eclipse等开发工具集成使用。根据实际开发中的情况来看,Jakata Tomcat 和Sun Java结合的最好,和其他应用服务器配合使用可支持完整的J2EE标准,因此其应用很广泛。但是从Java 普遍存在的编码问题来看,还是Resin 解决得比较好。从使

27、用的角度来看,Resin比Tomcat方便,而且Resin也可以结合Jbuilder、Eclispe等IDE使用。Resin强调使用Xml技 术,从Resin自己的HomePage使用xtp就可以看出来。本书将使用Resin服务器作为测试和开发的工具。但本章的例子仍然可以在Tomcat上运行,只需要对配置文件进行简单的修改即可。第45页,共153页。17.1 Java Web服务器介绍 Resin 可以在 /download/index.xtp 免费下载和使用。使用Resin开发或者学习是免费的,但是如果把Resin作为收费产品发布是需要付费的。本书将使用2.1.16版本来运行所有的例子。 下

28、载Resin 时选择Archive Versions 中的 windows.zip的普通安装包resin-ee-2.1.16。把该zip包解压到任何目录下面,如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 按纽的对话窗,如图第46页,共153页。17.1 Java Web服务器介绍第47页,共153页。17.1 Java Web服务器介绍第48

29、页,共153页。第17章 Web服务器端编程17.1 Java Web服务器介绍17.2 Servlet介绍17.3 JSP介绍17.4 Struts介绍 第49页,共153页。17.2 Servlet介绍17.2.1 Servlet的概念17.2.2 Servlet应用范围和运行环境17.2.3 Servlet简单例子 17.2.4 Servlet常用类、接口和生命周期17.2.5 Servlet应用举例第50页,共153页。17.2.1 Servlet的概念 Servlet就是用 Java 编写的服务器端程序,是由服务器端调用和执行的 Java 类,这种类使用 Java Servlet 应

30、用程序设计接口(API)及相关类和方法。除了 Java Servlet API , Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。Servlet是一种采用 Java 来实现 CGI(Common Gate Interface) 功能的技术。Servlet本身与协议无关,与平台也无关。也就是说Servlet所适用的网络协议可以是多种多样的,比如HTTP,FTP,SMTP,TELNET等,但是就目前而言,只有HTTP服务已经形成了标准的Java组件。对应的软件包有两个javax.servlet.http和javax.servlet.jsp,分别对应我们要讲解的Serv

31、let和JSP编程。我们通常所说的Servlet编程主要就是指针对HTTP的Servlet编程,用到的就是javax.servlet.http包中的类(典型的就是HttpServlet类),实际上Java Servlet编程的概念要更广一些,在这里我们约定俗成的使用Servlet来指代HTTP Servlet的编程,这点读者是需要了解的。由于JSP最终都是要经过JSP引擎转换成Servlet代码的,而且Servlet编程和一般的Java编程是没有大的区别的,只需要了解一定的规范即可。 第51页,共153页。17.2.2 Servlet应用范围和运行环境 Servlet运行于Servlet引擎管

32、理的Java虚拟机中,被来自客户机的请求所唤醒,与CGI不同的是,在虚拟机中只要装载一个Servlet就能够处理新的请求,每个新请求使用内存中那个Servlet的相同副本,所以效率比CGI来得高。如果采用服务器端脚本,如ASP,PHP,语言解释程序是内置程序,虽然可以加快服务器的运行,但是效率还是比不上准编译的Servlet。实际的使用也已经证明,Servlet是效率很高的服务器端程序,很适合用来开发Web服务器应用程序。Java Servlet有着十分广泛的应用。不光能简单的处理客户端的请求,借助Java的强大的功能,使用Servlet还可以实现大量的服务器端的管理维护功能,以及各种特殊的任

33、务,比如,并发处理多个请求,转送请求,代理等。 为了运行Servlet,首先需要一个JVM来提供对Java的基本支持,一般需要安装JRE(Java Runtime Environment)或JDK(Java Develop Kit,JRE是其中的一个子集)。其次我们需要Servlet API的支持,一般的Servlet引擎都自带Servlet API,只要我们安装Servlet引擎或安装直接支持Servlet的Web服务器,便会自动安装上Servlet相关的程序包。 Resin自带一个Servlet Runner和HTTP Server,因此要构建一个简单的Web环境,光有Resin已经足够了

34、,不需要额外的支持软件。 第52页,共153页。17.2.3 Servlet简单例子 【例17-1】使用Servlet在客户端输出简单的问候语句 /HelloWorld.java package test; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet private String greeting; public void init() throws ServletException greeting = ge

35、tInitParameter(greeting); 第53页,共153页。17.2.3 Servlet简单例子 【例17-1】使用Servlet在客户端输出简单的问候语句 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /doGet()是这个Servlet的核心,真正处理请求的地方 PrintWriter out = response.getWriter(); /从HttpServletResponse得到输出流 ou

36、t.println(); out.println(); out.println( + greeting + ); out.println(); out.println(); out.println( + greeting + ); out.println(); out.println();/上面的语句都是向客户端打印HTML文本 out.close(); /关闭HttpServletResponse public void destroy() / nothing to do 第54页,共153页。17.2.3 Servlet简单例子 这是最简单的一个Servlet程序,整个类从HttpServ

37、let派生,就跟Applet一样,这个派生关系是必须的。这个Servlet必须实现doGet()方法(因为它是作为静态页面通过地址访问的,这种方式在HTTP中称为GET请求,在后面还会有更具体的讲解),这是这个Servlet真正处理请求的地方,是整个Servlet的主体。doGet()有两个参数HttpServletRequest req和 HttpServletResponse res。HttpServletRequest包含了客户请求的各种信息,HttpServletResponse则包装了服务器响应,主要处理对客户机的输出。通过javac对以上程序进行编译,我们可以得到HelloServ

38、let.class,下面我们就通过配置Resin来运行这个Servlet。 在webapps下建立自己的发布目录mytest, mytest目录下的WEB_INF/classes是Resin默认的classpath环境变量的值, 把HelloWorld.java拷贝到WEB_INF/classes /test目录下。当然也可以将其拷贝到有效的系统或用户的classpath下,Resin都是能够找到的,如Resin默认的发布目录doc。接下来就需要修改conf目录下的resin.conf文件,来配置我们的Servlet。读者可以使用任何一种自己所熟悉的文本编辑器来打开该配置文件第55页,共153

39、页。17.2.3 Servlet简单例子 在中加上下面的配置语句 这样当客户端产生/Hello请求的时候,Resin就能把这个请求定向到test.HelloWorld上,同时给出greeting参数的值。该Servlet就能正常运行了。下面我们启动Resin服务器(通过双击bin下的httpd.exe)。这样我们就可以通过浏览器访问这个Servlet了。打开浏览器,比如IE,在地址栏键入http:/localhost:8080/mytest/Hello,就可以看到运行结果网页,如图 第56页,共153页。17.2.3 Servlet简单例子 第57页,共153页。17.2.4 Servlet常

40、用类、接口和生命周期 第58页,共153页。17.2.4 Servlet常用类、接口和生命周期 1、Servlet的生命周期 Servlet容器负责处理客户请求、把请求传送给Servlet并把结果返回给客户。不同的Web容器实际的实现可能有所不同,但容器与Servlet之间的接口是由ServletAPI定义好的,这个接口定义了Servlett容器在Servlet上要调用的方法及传递给Servlet的对象类。 Servlet的生命周期可以被归纳为下面的步骤: (1) 装载Servlet,这一项操作一般是动态执行的。 (2) Server创建一个Servlet实例;(3) Server调用Serv

41、let的init方法;(4) 一个客户端请求到达Server;(5) Server创建一个请求对象;(6) Server创建一个响应对象;(7) Server激活Servlet的service方法,传递请求和响应对象作为参数;(8) service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息;第59页,共153页。17.2.4 Servlet常用类、接口和生命周期 (9) service方法使用响应对象的方法。将响应传回Server,最终到达客户端。service方法可能激活其他方法以处理请求。如doGet,doPost或其他程序员自己开发的方法(10) 对于更多的客户端

42、请求,Server创建新的请求和响应对象,仍然激活此Servlet的service方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般只初始化一次(11) 当Server不再需要Servlet时(比如当Server要关闭时),Server调用Servlet的destroy方法。 一旦请求了一个Servlet,就没有办法阻止容器执行一个完整的生命周期。容器在Servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理。容器可以决定在任何时候把这个实例从内存中移走。在典型的模型中,容器为每个Servlet创建一个单独的

43、实例,容器并不会每接到一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分配给到来的请求,但是这从Servlet的观点来看,效果和为每个请求创建一个新线程的效果相同。 第60页,共153页。17.2.4 Servlet常用类、接口和生命周期 2、 Servlet接口 publicinterfaceServlet它的生命周期由javax.servlet.servlet接口定义。当你在写servlet的时候必须直接或间接的实现这个接口。一般趋向于间接实现:通过从javax.servlet.GenericServlet或javax.servlet.http.HttpServlet派生。在实现

44、servlet接口时必须实现它的五个方法: (1) init():publicvoidinit(ServletConfigconfig)throwsServletException (2) service():publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException (3) destroy(): publicvoiddestroy() (4) getServletConfig()publicServletConfiggetServletConfig() (5) getSer

45、vletInfo():publicStringgetServletInfo()第61页,共153页。17.2.4 Servlet常用类、接口和生命周期 下面的类和接口详细情况见servert帮助文档。3、GenericServlet类 publicabstractclassGenericServletimplements Servlet,ServletConfig, Serializable 此类提供了servlet接口的基本实现部分,其中包含的service()方法被申明为abstract,因此该类必须被继承。init(ServletConfigconf)方法把servletConfig对象

46、存储在一个privatetransient(私有临时)实例变量里,getServletConfig()方法返回指向本对象的指针,如果重载此方法,将不能使用getServletConfig来获得ServletConfig对象,如果确实想重载,记住要包含对super.config的调用。第62页,共153页。17.2.4 Servlet常用类、接口和生命周期 4、HttpServlet类 该类扩展了GenericServlet类并对Servlet接口提供了与HTTP更相关的实现。(1)、service()方法:protectedvoidservice(HttpServletRequestreq,H

47、ttpServletResponseres)throwsServletException,IOException publicvoidservice(HttpServletRequestreq,HttpServletResponseres)throwsServletException, IOExceptionservice() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个请求(ServletRequest)对象和一个响应(ServletResponse)对象作为参数。 在 HttpServl

48、et 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。 第63页,共153页。 如果servlet收到一个HTTP请求而你没有重载相应的do方法,它就返回一个说明此方法对本资源不可用的标准HTTP错误。下面是这些do方法的说明: 1) doGet 用来处理HTTP的GET请求。 2)doPost 用来处理HTTP的POST请求。 3)doPut用来处理HTTP的PUT请求。4)doDelete用来处理HTTP的DELETE请求。5)doHead 用来处理HTTP的HEAD请求。6)doOptions用来处理HTTP的OPTIONS请求。 7)

49、doTrace用来处理HTTP的TRACE请求 在开发以HTTP为基础的servlet中,Servlet开发者关心方法doGet和方法doPost即可。(2)、getLatModified(): protectedlonggetLastModified(HttpServletRequestreq)第64页,共153页。17.2.4 Servlet常用类、接口和生命周期 5、HttpServletRequest接口 publicinterfaceHttpServletRequestextendsServletRequest 所有实现此接口的对象(例如从servlet容器传递的HTTP请求对象)都

50、能让servlet通过自己的方法访问所有请求的数据。下面是一些用来获取表单数据的基本方法。 (1) getParameter() publicStringgetParameter(Stringkey)此方法试图将根据查询串中的关键字定位对应的参数并返回其值。如果有多个值则返回列表中的第一个值。如果请求信息中没有指定参数,则返回null。 (2) getParametervalues(): publicStringgetParametervalues(Stringkey)如果一个参数可以返回多个值,比如复选框集合,则可以用此方法获得对应参数的所有值。如果请求信息中没有指定参数,则返回null。

51、(3) GetParameterNames(): PublicEnumerationgetParameterNames()此方法返回一个Enumeration对象,包含对应请求的所有参数名字列表。第65页,共153页。17.2.4 Servlet常用类、接口和生命周期 6、HttpServletResponse接口 publicinterfaceHttpServletResponseextendsservletResponseservlet容器提供一个实现该接口的对象并通过service()方法将它传递给servlet。通过此对象及其方法,servlet可以修改响应头并返回结果。 (1)set

52、ContentType(): publicvoidsetContentType(Stringtype)在给调用者发回响应前,必须用此方法来设置HTTP响应的MIME类型。可以是任何有效的MIME类型,当给浏览器返回HTML就是”text/html”类型。 (2) getWriter(): publicPrintWritergetWriter()throwsIOException此方法将返回PrintWriter对象,把servlet的结果作为文本返回给调用者。PrintWriter对象自动把Java内部的Unicode编码字符转换成正确的编码以使客户端能够阅读。 (3) getOutputSt

53、ream(): (4) setHeader():第66页,共153页。17.2.4 Servlet常用类、接口和生命周期 7、HttpSession接口 这个接口被 Servlet 引擎用来实现在 HTTP客户端和 HTTP 会话两者的关联。这种关联可能在多次连接和请求中持续一段给定的时间。 Session 用来在无状态的 HTTP 协议下越过多个请求页面来维持状态和识别用户。一个 Session 可以通过 Cookie 或重写 URL 来维持。其方法有:getCreationTime()、getId()、getLastAccessedTime()、getMaxInactiveInterval

54、()、getValue()、getValueNames()、invalidate()、iSNew()、putValue()、removeValue()、setMaxInactiveInterval()等。第67页,共153页。17.2.4 Servlet常用类、接口和生命周期 8、 ServletConfig和ServletContext在Servlet的初始化中,初始化方法使用ServletConfig对象作为参数,这个方法中将保存这个对象,以便方法getServletConfig()返回该参数。并且在该方法中重新编写getServletConfig()方法,以便能够从新的位置得到该对象。在

55、下面的例子中,初始化方法就是调用super.init(config)方法来管理安排ServletConfig对象的,代码如下: public void init(ServletConfig config)throws ServletException Super.init(config); / 初始化的操作 在服务器上使用Session对象来维持同单个客户相关的状态,而当为多个用户的Web应用维持一个状态时,则应使用Servlet环境(ServletContext)。 ServletContext既可以用来为一个WEB应用定义从URL到名称的映射,也可以用来让Servlet在一个应用程序中访问

56、所有客户的共享信息。Sevlet环境的状态信息保存在它的属性中。有三个servletContext方法用于处理环境属性:getAttribute、setAttribute和removeAttribute。第68页,共153页。【例17-2】Servlet与表单交互的方法 第69页,共153页。17.2.5 Servlet应用举例 表单是HTML中使用最广泛的传递信息的手段。搞清楚Servlet与表单的交互,就在客户端与服务器之间架起了一座桥梁。Servlet使用HttpServlet类中的方法与表单进行交互。1)、静态HTML文本:information.htmlInput Informati

57、on请输入信息姓名:性别: 男 女第70页,共153页。17.2.5 Servlet应用举例 2)、下面是处理表单的Servlet程序FormDeal:/ FormDeal.javaimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class FormDeal extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, Serv

58、letException /处理GET请求的方法 response.setContentType(text/html; charset=gb2312); request.setCharacterEncoding(GB2312);/先设置Header,在这里只设置ContentType一项PrintWriter out = response.getWriter();/得到文本输出WriterString name = request.getParameter(Name);/得到表单值NameString sex = request.getParameter(Sex);第71页,共153页。17.

59、2.5 Servlet应用举例 /打印得到的表单值out.println();out.println();out.println();out.println(Your Infomation);out.println();out.println();out.println(Data You Posted);out.println();out.println();out.println(你的姓名:);out.println(+name+);out.println();out.println();out.println(你的性别:);out.print();第72页,共153页。17.2.5 Ser

60、vlet应用举例 /打印得到的表单值if(sex.equals(1) out.println(男);else out.println(女);out.println();out.println();out.println();out.println();out.close(); /关闭Writer第73页,共153页。17.2.5 Servlet应用举例 第74页,共153页。第17章 Web服务器端编程17.1 Java Web服务器介绍17.2 Servlet介绍17.3 JSP介绍17.4 Struts介绍 第75页,共153页。17.3 JSP介绍17.3.1 JSP的概念17.3.2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论