Java web入门实战总结[呕心呖血之作].doc_第1页
Java web入门实战总结[呕心呖血之作].doc_第2页
Java web入门实战总结[呕心呖血之作].doc_第3页
Java web入门实战总结[呕心呖血之作].doc_第4页
Java web入门实战总结[呕心呖血之作].doc_第5页
已阅读5页,还剩234页未读 继续免费阅读

下载本文档

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

文档简介

1.Java基础增强1.1Eclipse使用最佳实践1.1.1常用快捷键Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+ 复制当前行到下一行(复制增加)Ctrl+Alt+ 复制当前行到上一行(复制增加)Alt+ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+ 当前行和上面一行交互位置(同上)Alt+ 前一个编辑的页面Alt+ 下一个编辑的页面(当然是针对上面那条来说了)Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)Shift+Ctrl+Enter 在当前行插入空行(原理同上条)Ctrl+Q 定位到最后编辑的地方Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)Ctrl+M 最大化当前的Edit或View (再按则反之)Ctrl+/ 注释当前行,再按则取消注释Ctrl+O 快速显示 OutLineCtrl+T 快速显示当前类的继承结构Ctrl+W 关闭当前EditerCtrl+K 参照选中的Word快速定位到下一个Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)Ctrl+Shift+X 把当前选中的文本全部变味小写Ctrl+Shift+Y 把当前选中的文本全部变为小写Ctrl+Shift+F 格式化当前代码下面的是重构的时候用得到的:Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)Alt+Shift+I 合并变量(可能这样说有点不妥Inline) Alt+Shift+V 移动函数和变量(不怎么常用)Alt+Shift+Z 重构的后悔药(Undo)1.1.2模块分离在实际的开发中,尽量让工作空间(workspace)和项目(Project)分离开来,开发中使用统一的编码,一般都设置成UTF-8(window-preference-general-workspace)在开发过程中,要把项目源码包和测试的源码包分离开来,因为测试代码是不需要发布的,另外,要把测试代码和项目代码的编译输出目录分离开来。1.1.3调试断点关于Eclipse的调试,设置断点,可以通过 Run-remove all breakpoint 移除所有的断点这个主要是在web开发的时候,tomcat自动会停在断点的地方,这个时候就需要移除所有断点。1.2Java基础知识1.2.1静态导入示例:import static org.junit.Assert.*这里表示把Assert类的所有静态方法引入,在本文件中如果要使用Assert的静态方法就可以不用Assert了。1.2.2可变参数public static int sum(String action, int.params) / Do something here这里就表示可变参数,可变参数必须是最后面的,因为如果不放在后面,就无法区分后面的参数到底是什么了。1.2.3foreach这种方式的循环,强调的是元素本身,其底层是有迭代器(Iterator)实现的,需要进行对象的同步,所以在效率上比普通的for循环要低。在使用foreach循环的时候,与奥注意的是修改问题,因为同步的关系,这可能会带来一些问题,一般来说,建议如果在需要修改元素的情况下,使用普通的for循环。1.2.4拆箱&装箱需要注意的是:对于:Integer a = 128; Integer b = 128;在-127到128之间的话,a=b 是true,否则是false即a、b引用一样,请看下面的例子:Integer a = 128;Integer b = 128;System.out.println(a = b);/ falsea = -128;b = -128;System.out.println(a = b);/ truea = -129;b = -129;System.out.println(a = b);/ falsea = 127;b = 127;System.out.println(a = b);/ true1.2.5反射获取Class的几种方式:假设有类:edu.zhku.cian.User(1)直接使用类名类获取Class clazz = User.class;这种方式用一种缺陷,就是它不会执行静态代码块,别的方式都会执行静态的代码块(2)使用Class.forName获取, 这是最常用的Class clazz = Class.forName(edu.zhku.cian.User);会抛出ClassNotFoundException(3)通过对象的getClass()方法来获取User user = new User();Class clazz = user.getClass();注意:反射只能是反映静态的字节码信息,是无法获得运行时信息的,例如泛型,由于字节码是去类型化的,所以在运行时步伐动态获得泛型类型信息。1.2.6Annotation-注解需要掌握的知识:(1)注解的扫描(2)注解的属性1.2.7泛型作用:使之类型安全,把运行时的错误提前到编译期间,让错误提前暴露。关于? 表示通配符,表示对于所有的,继承自E的类型或者是E的类型(向下限定)关于 ? 表示传入参数必须是E,或者是E的父类型(向上限定)泛型方法public T query(Class clazz) / 在这里,返回的类型参数是根据传入的参数来决定的/ 也就是说,根据clazz的泛型参数来确定的使用泛型方法的时候,必须在参数列表中有泛型,否则无法判断返回的类型另外,只用引用类型才能作为泛型的参数。注意:泛型在编译成class文件之后是没有任何的泛型类型信息的。1.2.8JDK5新特性(1)增强型的for循环(foreach)(2)泛型(3)自动拆箱和装箱(4)可变参数列表(5)可变的返回类型在JDK5.0以前,当覆盖父类方法时,返回类型是不能改变的。现在有新的规则用于覆盖方法。如下,一个典型的例子就是clone()方法:5.0public Employee clone() . .Employee cloned = e.clone(); 1.4public Object clone() . .Employee cloned = (Employee) e.clone(); (6)静态导入 (7)控制台输入 JDK 5.0先前的版本没有Scanner类,只能使用JOptionPane.showInputDialog类代替。5.0:Scanner in = new Scanner(System.in);System.out.print(prompt);int n = in.nextInt();double x = in.nextDouble();String s = in.nextLine();1.4:String input = JOptionPane.showInputDialog(prompt);int n = Integer.parseInt(input);double x = Double.parseDouble(input);s = input;(8)格式化输出、JDK5.0以前的版本没有print方法,只能使用NumberFormat.getNumberInstance来代替(9)内容面板代理在JDK5.0先前的版本中,JFrame,JDialog,JApplet等类没有代理add和setLayout方法(10)StringBuilderJDK 5.0引入了StringBuilder类,这个类的方法不具有同步,这使得该类比StringBuffer类更高效。(11) Annotation注解注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。看java.lang包,可看到JDK中提供的最基本的annotation。(12)枚举类型2.XML2.1XML基础2.1.1XML概述xml是通用数据交换格式,不受知识产权的限制。详见:E:itcastreview0002_Enhance_xml2.1.2Properties类加载 properties文件的几种方式:(方式1-4都是要到classpath下面找资源)属性文件的后缀名可以是任意的/ 方式一:InputStream inStream = LoadConfigTest.class.getResourceAsStream(/config/perties);properties.load(inStream);/ 方式二:inStream = this.getClass().getResourceAsStream(/config/perties);properties.load(inStream);/ 方式三:inStream = LoadConfigTest.class.getClassLoader().getResourceAsStream(config/perties);/ 方式四:inStream = this.getClass().getClassLoader().getResourceAsStream(config/);properties.load(inStream);/ 方式五: 使用绝对路径inStream = new FileInputStream(new File(.perties);properties.load(inStream);详见项目:E:itcastreview0002_Enhance_.LoadConfigTest2.1.3XML语法xml 文档声明空行和换行的处理,注意下面两段:1) 广州2)广州这里的 1 和 2 是不同的,在2中还包含了两个换行,分别是和广州之间的,以及广州和之间的。2.1.4xml编码问题在进行文档声明的时候:如果声明的是utf-8,那么文件本省的编码也应该是utf-8,在weindow操作系统下默认新建的xml文件是ASCII编码的。如果出现乱码问题,可以用记事本打开这个文件,然后另存为,把编码改成你的文档声明的编码,如在本例子中的是utf-8。2.1.5CDATA(1)CDATA区全称为character data,以“”结束,在两者之间嵌入不想被解析程序解析的原始数据,解析器不对CDATA区中的内容进行解析,而是将这些数据原封不动地交给下游程序去处理。(2)CDATA区中的起始和结束处有和没有空格和换行字符是有区别的2.1.6特殊字符&>"'2.1.7格式良好的XML文件遵守XML基本语法规则和规范的XML文档就可以称之为“Well-formed XML”,中文意思就是“格式良好的XML” 。2.1.8XML约束模式语言先后出现的XML约束模式语言有XML DTD、XDR、SOX、XML Schema等等,其中应用最广泛和具有代表意义的是XML DTD和XML Schema2.1.9有效的XML一个遵守XML的基本语法规则、且符合为它指定的某个XML约束模式的XML文档就可以称之为“Valid XML”文档,中文意思就是“有效的XML”文档。2.1.10DTD全称 Document Type Definition,DTD文件的编码应该要和xml文件的编码及其xml声明的编码一致,否则不可用。1. 如何在xml中引入外部的dtd, dtd上面的声明都是指向网络上面dtd文件的地址,因为我们不能够上网,无法让eclipse帮我从网络上面下载dtd,就需要将网络地址映射到本地dtd地址上面从而对xml进行验证.如何映射呢? 2.1 在抒写xml之前要把dtd文件中的xml生命拷贝到当前xml中 网络地址 2.2 在eclipse中. 通过网络地址映射本地dtd window-preferences-xml-xml Catalog-Add Location中填写本地dtd文件的地址 Key Type中选择URI key中填写网络dtd的地址 通过xml声明中dtd的id window-preferences-xml-xml Catalog-Add Location中填写本地dtd文件的地址 Key Type中选择Public ID key中填写dtd的Id2.11XML Schema 与 DTD的比较XML Schema符合XML语法结构。 DOM、SAX等XML API很容易解析出XML Schema文档中的内容。 XML Schema则采用与XML文档同样的合法性验证机制。 XML Schema对名称空间支持得非常好。 XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。 XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。XML Schema基本上满足了关系模式在数据描述上的需要。XML Schema不能像DTD一样定义实体,比DTD更复杂。2.2XML解析2.2.1DOM解析DOMDocument Object Model,W3C标准,基于信息层次,基于树或基于对象,一次性加载到内存中。优点:编程容易,易于添加和修改树的元素,遍历能力强。缺点:需要加载整个文档到内存,对计算机性能和内存要求高,尤其是大文档应用场景:由于遍历能力强,DOM解析器常用于xml文档需要频繁更改的服务中。DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。2.2.2SAX解析基于事件的,不需要将数据存储在内存中,分析能够立即开始,对于大型XML文档来说是很好的优点,一般比DOM要快优点:对内存要求低,扩展能力好缺点:编码很困难,基于事件模型,很难处理同一个文档不同地方的数据SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。2.2.3JDOM解析JDOM的目标:使用20%(或更少)的精力解决80%(或更多)Java/XML问题。JDOM的目的是成为JAVA特定文档模型,简化与XML的交互并且比使用DOM实现更快,是第一个Java特定模型。JDOM自身不包含解析器,它通常使用SAX2解析器来解析和验证输入XML文档。JDOM和DOM的不同:(1)JDOM仅使用具体类而不使用接口,简化了API,限制了灵活性(2)API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用JDOM综合了DOM和SAX解析方式,兼具两者有点,克服两者缺点。JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。 JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。 JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。2.2.4DOM4J解析实例代码:E:itcastreview0002_Enhance_xml针对Java开发者的易用性和直观操作。虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。 为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。 在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。 DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.2.2.5解析方式的比较(1) DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.(2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM.虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JS中使用DOM)。(3)SAX表现较好,这要依赖于它特定的解析方式事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。3.Tomcat3.1Tomcat工作原理3.1.1Servlet容器Servlet容器的作用是负责处理客户的请求,过程如下:用户请求- Servlet容器获取请求- 分发请求(调用相应的Servlet)- 返回用户结果3.1.2Servlet工作模式1.2.1 独立的Servlet容器-Tomcat的默认工作模式1.2.2 进程内的Servlet容器1.2.3 进程外的Servlet容器3.1.3Tomcat Web应用简介Tomcat Web应用由一些Servlet、HTML、java类、jsp页面和其他资源构成。一个Tomcat Wen应用与Tomcat中的Context元素对应,也就是,一个Context定义了一个Tomcat Web应用。3.1.4Tomcat安装和启动名词解释:- JDKJava Develop ToolKitJava开发包,包含了很多Java开发工具(java.exe, javac.exe.)- JREJava Runtime EnvironmentJava运行环境,这是java运行的基础- JVMJava Vitual MachineJava虚拟机,jre目录下的bin目录中server和client目录,这个是jvm.dll的真正所在,jvm.dll启动后会使用explict的方法- JITJava In TimeJava即时编译器, 是JVM的一部分,属于内核部分安装与启动Tomcat步骤:1、安装JDK设置环境变量:JAVA_HOMED:ProgramStudyJavajdk1.6.0_32CLASSPATH%JAVA_HOME%jrelibrt.jar;.;PATH%JAVA_HOME%bin2、安装Tomcat直接在官网下载,解压缩即可3、启动与关闭Tomcat启动:(1) 在命令行模式下切换到Tomcat解压缩目录: F:Videositcastpersonaltomcatapache-tomcat-6.0.35bin运行startup:F:Videositcastpersonaltomcatapache-tomcat-6.0.35binstartup(2)直接双击startup.bat关闭:(1)在命令行模式下切换到Tomcat解压缩目录: F:Videositcastpersonaltomcatapache-tomcat-6.0.35bin运行startup:F:Videositcastpersonaltomcatapache-tomcat-6.0.35binshutdown(2)直接双击shutdown.bat相关参数意义:目录conf下的server.xmlContext标签:3.2Tomcat Web项目部署3.2.1安装Tomcat为系统服务实现可以通过windows的service.msc打开的界面进行服务的管理。DOS- cd 到Tomcat/bin目录下,里面有一个service.bat文件,运行该文件即可,如下命令格式:运行命令:serice.bat install tomcat6(其中tomcat6是服务的名字,可以任意取)3.2.2卸载Tomcat系统服务卸载该服务:service uninstall tomcat6 (其中tomcat6是服务的名字,可以任意取)3.2.3Web项目结构/web应用的根目录,该目录下的所有文件都是可访问到额/WEB-INF该目录及其子目录下的文件在浏览器中是不可访问的,web.xml包含wen应用的配置属性,这些属性由Servlet API定义/WEB-INF/classes存放web应用的所有classes文件/WEB-INF/lib存放类文件打包后的jar文件注意:为了部署方便,还目录下的所有文件可以压缩为zip文件再更改扩展名为war。可以根据需要在根目录下建立不同资源文件的子目录:如js/image3.2.4Web项目部署(1) 将整个项目复制到Tomcat安装目录下的webapps目录下如果项目的目录结构如下:-example-WEB-INF-lib-web.xml-index.html其中的example,就是项目的根路径那么访问index.html的格式:http:/localhost:8080/example/index.html(2) 直接在server.xml中进行配置在server.xml的前面添加一个Web应用环境:例如:第一个参数指定虚拟目录访问路径:如上面这样子,访问的格式如下:http:/localhost:8080/hello/index.html第三个表示启用热部署,可选,如果path=,表示直接根目录下就能访问,即默认项目:http:/localhost:8080/index.html3.2.5虚拟主机映射所解决的问题: 在一个Tomcat下可以使用多个默认WEB项目,即每一个虚拟主机对应一个默认项目(1) 在计算机上配置虚拟主机(不同操作系统不同,具体可参见百度)windows下配置虚拟主机:dos-cd C:WindowsSystem32driversetc下面有一个hosts文件,打开这个文件,添加: (2) 在server.xml中配置虚拟主机在原有的标签后面添加一个 Host标签: (3) 启动Tomcat服务器服务器启动之后我们就可以使用下面这个URL来访问我们的应用了:8080/index.html:8080/index.html:8080/index.html3.3HTTP协议详解3.3.1什么是HTTP协议(1) web浏览器和web服务器之间是一问一答的的交互过程,而要想正确的进行交互,就必须遵循一定的规则,这个规则就是我们所熟悉的HTTP协议规范。(2) HTTP是Hypertext Transfer Protocol (超文本传输协议)的缩写,它是TCP/IP协议子集中的一个应用层协议,用于定义web浏览器和web服务器之间数据交换的过程及数据本身。(3) HTTP协议的版本HTTP/1.0、HTTP/1.1、HTTP-NG(4) 深入理解HTTP协议,对管理和维护复杂的WEB站点、开发具有特殊用途的WEB服务器程序具有直接影响。3.3.2建立TCP连接TCP传输连接建立过程中需要解决三个基本问题:1) 确定通信的每一方是否存在2) 允许双方协商通信参数,如最大报文段长度,最大窗口长度以及服务质量等3) 分配传输实体可以使用的资源,如缓冲区大小TCP协议采用的是 客户/服务器 模式,主动发起建立连接请求的称之为客户,等待并接收连接建立请求的进程为服务器。传输连接建立需要经过以下三个步骤(即所谓的 三次握手 ):假设主机A为客户进程,主机B为服务进程,现在A要与B建立传输连接。1) 第一次握手A - 发送连接请求报文段到B - SYN=1, ACK=0, SEQ=1200(这个是给这个报文段分配一个序号)这就好像是A对B说: 我希望开始一次新的会话2) 第二次握手B - 同意A与自己建立连接- B 向 A 发出应答报文段- SYN=1, ACK=1, SEQ=4800(同样需要分配一个序号)- 【AN=1201(确认号,即请求报文中的SEQ+1, 表示序号为1200的报文段已经正确接收下一次应该发送序号SEQ=1201的报文段,因此AN有捎带确认的作用)】这就好像B对A说:好吧,让我们交谈吧3) 第三次握手A - 接收到B的应答报文段- 在此发送一个建立传输连接确认报文段- SYN=1, ACK=1, SEQ=1201, AN=4801(即应答报文段的SEQ+1)这就好像A对B说:很高兴你愿意交谈,我们开始吧!经过这三次的握手之后就建立好了A和B之间的连接,即向应用层报告连接已经建立好了。目的:看完上面的三次握手之后,你也许知道这三次握手的目的了:采用三次握手的目的是为防止传输连接过程中出现错误(传输延迟等原因)。3.3.3释放TCP连接在用户数据传输结束时,需要释放传输连接,才易于传输连接的任何一方都可以释放连接。释放传输连接需要四个步骤(亦即【四次握手】)当关闭客户进程到服务进程的连接时,服务端进程到客户端的进程可能还没释放,使用四次握手的方式来确保连接都关闭。1)第一次握手A - 发送释放连接请求报文段- FIN=1,ACK=0,SEQ=2500A希望释放此次连接2)第二次握手B - 同意释放连接- 发出应答报文段- ACK=1,AN=2501,SEQ=6000B 此时知道A的想法释放此次连接3)第三次握手B - 我没数据需要传输了- 释放服务端到客户端的连接- 向A发出释放连接请求报文段- FIN=1, ACK=0, SEQ=6001同意释放这次连接4)第四次握手A - 接收到B的请求释放连接报文段- 再次发送释放连接应答报文段- ACK=1,SEQ=2501,AN=6002释放这次连接3.3.4HTTP1.0 会话方式四个步骤:建立连接-发出请求信息-回送相应信息-关闭连接HTTP 1.0 浏览器和web服务器之间 的连接过程是短暂的,每次的连接处理一个请求和响应,对于每一个页面的访问都需要建立一个独立的连接。3.3.5HTTP1.1会话方式HTTP 1.1 的特点:1) 在一个连接上可以传送多个HTTP请求和响应 2) 多个请求和响应可以重叠执行3) 增加了更多的请求头和响应头过程:建立连接- 发送第1个请求- 发送第2个请求- .- 发送第n个请求- 回送第1次响应- 回送第2次响应- .- 回送第n次响应- 关闭连接3.3.6HTTP请求消息请求消息的结构:一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。举例:请求行:GET /books/java.html HTTP/1.1消息头:Accept: */*Accept-Language: en-usConnection: Keep-AliveHost: localhostReferer: http:/localhost/links.aspUser-Agent: Mozilla/4.0Accept-Encoding: gzip, deflate空行:-GET请求方式的请求消息中不能包含消息实体(AJAX)3.3.7HTTP响应消息响应消息的结构:一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。 举例:状态行:HTTP/1.1 200 OK消息头:Server: Microsoft-IIS/5.0Date: Thu, 13 Jul 2000 05:46:53 GMTContent-Length: 2291Content-Type: text/htmlCache-control: private一个空行:实体内容:3.3.8HTTP消息头(1)使用消息头,可以实现HTTP客户机与服务器之间的条件请求和应答,消息头相当于服务器和浏览器之间的一些暗号指令(2)每个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符。举例: Accept-Language: en-us(3)消息头字段名是不区分大小写的,但习惯上将每个单词的第一个字母大写(4)整个消息头部分中的各行消息头可按任何顺序排列(5)消息头又可以分为通用信息头、请求头、响应头、实体头等四类(6)许多请求头字段都允许客户端在值部分指定多个可接受的选项,多个项之间以逗号分隔。举例:Accept-Encoding: gzip, compress(7)有些头字段可以出现多次,例如,响应消息中可以包含有多个“Warning”头字段。3.3.9HTTP典型响应码200(正常) 表示一切正常,返回的是正常请求结果。206(部分内容) 客户发送了一个带有Range头(要求服务器只返回文档中的部分内容)的GET请求,服务器按要求完成了这个请求。 302/307(临时重定向)指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。304(未修改)表示客户机缓存的版本是最新的,客户机应该继续使用它。401(未经授权) 表示客户机访问的是一个受口令和密码保护的页面,结合使用一个WWW-Authenticate响应头提示客户机应重新发出一个带有Authorization头的请求消息。 404(找不到) 服务器上不存在客户机所请求的资源。500(内部服务器错误) 服务器端的CGI、ASP、JSP等程序发生错误。 4.IO4.1概述 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 流按操作对象分为两种:字节流与字符流。 先有字节流,后有字符流。 为什么 要出现字符流呢? 流按流向分为:输入流,输出流。4.2IO常用基本类字节流的抽象基类:InputStream ,OutputStream。字符流的抽象基类:Reader , Writer。注:由这四个类派生出来的子类名称都是以其父类名

温馨提示

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

评论

0/150

提交评论