收藏 分享(赏)

传智播客java_web笔记全套.doc

上传人:weiwoduzun 文档编号:2617468 上传时间:2018-09-23 格式:DOC 页数:77 大小:880KB
下载 相关 举报
传智播客java_web笔记全套.doc_第1页
第1页 / 共77页
传智播客java_web笔记全套.doc_第2页
第2页 / 共77页
传智播客java_web笔记全套.doc_第3页
第3页 / 共77页
传智播客java_web笔记全套.doc_第4页
第4页 / 共77页
传智播客java_web笔记全套.doc_第5页
第5页 / 共77页
点击查看更多>>
资源描述

1、1Lesson 1一、eclipse 工具的使用1. java 代码的位置1) 选择工作空间 workspace 选择一个文件夹存放程序 (代码) 不要用中文和空格2) 新建一个 java 工程(Project)3) 建包 建类2. 快捷键alt + / : 代码自动补齐,需要配置的打开 preferences(首选项), 搜 keys,打开快捷键配置面板搜 alt+/ ,取消绑定搜 content assist ,取消原先的绑定,配置成 alt+/ctrl+1: 错误自动修复, 注意,放行的红叉是可修复的,圆形的是不可修复的导包的三种方式:1)将类名敲完整,按下 alt+/ 进行补齐,会自动

2、导包2) ctrl+1,修正错误3) ctrl+shift+o 整理包,导入需要的包,去掉多余的导包语句ctrl+shift+f : 代码格式化ctrl+2,L 自动声明变量shift+enter 光标直接进入下一行ctrl+alt+方向键 (向上向下) 复制行alt+ 方向键( 向上向下) 移动当前行3. 断点调试1) 可以对程序进行调试在行的开头双击左键打断点,用 debug 方式来运行程序,程序就会停留在断点位置F5 跳入(step into) 跳入方法内部 F6 跳过, 让当前行运行 F7 跳出 返回上一层程序resume 直接运行到下一个断点 2) 查看源代码建议使用断点调试的方式,

3、注意当前运行环境需要包含源码4. junit 单元测试1) 写一个 java 类, 声明测试方式修饰符为 public void ,在方法前面加注解,(Test) 此方法就可以进行测试了(交给 junit 运行)2) 需要在测试方法前做初始化工作写一个静态方法 public static void init() 在方法前加注解 BeforeClass3) 需要在测试后释放资源写一个静态方法在方法前加注解 AfterClass2二、jdk5 新特性1. 静态导入1) 导入类的静态属性import static java.lang.System.out;out.println(“haha“);2)

4、 导入类的静态方法import static java.lang.Math.*;/ 导入 Math 类的所有静态成员int num = abs(-10);2. 增强 for 循环1) 作用: 对存储对象的容器进行迭代 2) jdk5 以前怎么迭代3) 增强 for 循环迭代数组String arr = “a“, “b“, “c“; /数组的静态定义方式,只试用于数组首次定义的时候/ 传统方式for(int i=0; i Integerbyte Byteshort Shortlong Longchar Characterdouble Doublefloat Floatboolean Boolea

5、n31) Integer x = 1; x = x + 1; 经历了什么过程? 装箱 拆箱 装箱2) 为了优化,虚拟机为包装类提供了缓冲池, Integer 池的大小 -128127 一个字节的大小3) String 池Java 为了优化字符串操作 提供了一个缓冲池面试题:String s = “abc” 和 String s = new String(“abc”) 的区别String s = new String(“abc”) 创建了几个对象 String s = “a” + “b” + “c” + “d” 创建了几个对象String s1 = “a” String s2 = “b” Str

6、ing s3 = s1 + s2; s3=”ab”?/*1. String s = “abc“, 虚拟机首先会检查 String 池里有没有“abc“对象( 通过 equals 方法)/ 如果有,直接返回引用,如果没有,会在池里创建一个“abc” 对象,并返回引用String s1 = “abc“;String s2 = “abc“;System.out.println(s1=s2); / result: true*/* 2. String str = new String(“abc“); 不管缓冲池是否有“abc“, 都会在堆内存创建一个“abc“对象,返回引用/ 此时,负责检查并维护缓冲池

7、,其实堆内存的对象是缓冲池中“abc“ 对象的一个拷贝String s1 = new String(“abc“);String s2 = new String(“abc“);System.out.println(s1=s2); / result: false*/* 3. String s = “a“ + “b“ + “c“ + “d“; java 编译器有个合并已知量的优化功能/ 在编译阶段就把“a“ + “b“ + “c“ + “d“ 合并为 ”abcd“String s = “a“ + “b“ + “c“ + “d“; / String s = “abcd“; System.out.pri

8、ntln(s=“abcd“);/ result: true*/* 4. String s1 = “a“; String s2 = “b“; String s3 = s1 + s2;/ String 是常量,不能相加的,java 如何实现的?StringBuilder sb = new StringBuidler(s1);sb.append(s2);s3 = sb.toString();也就是说实际上 s3 是方法返回的 String 对象凡是方法返回的字符串对象都是在堆内存的*/String s1 = “a“;String s2 = “b“; String s3 = s1 + s2; / 堆内

9、存的对象System.out.println(s3=“ab“);/ result: false44) 单列集合 CollectionList list = new ArrayList();list.add(“aaa“);list.add(“bbb“);list.add(“ccc“);/ 传统方式 1/* 1.获得迭代器Iterator iter = list.iterator();/ 2.循环判断迭代器是否有下一个while(iter.hasNext() String str = (String) iter.next(); / 将迭代器的指针移向下一个,并将迭代当前指向的元素返回System.

10、out.println(str);*/ 传统方式 2for(Iterator iter=list.iterator(); iter.hasNext(); ) String s = (String) iter.next();System.out.println(s);System.out.println(“-“);/ 增强 for 循环 , 没有使用泛型的集合能不能使用增强 for 循环迭代?能for(Object obj : list) String s = (String) obj;System.out.println(s);5) 双列集合 MapMap map = new HashMap(

11、);map.put(“a“, “aaa“);map.put(“b“, “bbb“);map.put(“c“, “ccc“);/ 传统方式迭代 1/ 1. 获得所有的 keySet keys = map.keySet();/ 2.迭代 keys 获得所有的 keyIterator iter = keys.iterator();while(iter.hasNext() String key = (String) iter.next(); / a b c/ 3.根据 key 获得对应的 valueString value = (String) map.get(key);System.out.prin

12、tln(key + “=“ + value);System.out.println(“-“);5/ 传统方式 2,必须掌握这种方式/ 1.获得所有的键值对 Entry 对象Set entrys = map.entrySet();/ 2.迭代出所有的 entryiter = entrys.iterator();while(iter.hasNext() Map.Entry entry = (Entry) iter.next();/ 分别获得 key 和 valueString key = (String) entry.getKey();String value = (String) entry.g

13、etValue();System.out.println(key + “=“ + value);System.out.println(“-“);System.out.println(“增强 for 循环迭代,“);/ 增强 for 循环迭代,/ 原则上 map 集合是无法使用增强 for 循环来迭代的,/ 因为增强 for 循环只能针对实现了 Iterable 接口的集合进行迭代/ Iterable 是 jdk5 中新定义的接口,就一个方法 iterator 方法/ 只有实现了 Iterable 接口的类,才能保证一定有 iterator 方法/ java 有这样的限定是因为增强 for 循环

14、内部还是用迭代器实现的/ 而实际上,我们可以通过某种方式来使用增强 for 循环for(Object obj : map.entrySet() / obj 依次表示 EntryMap.Entry entry = (Entry) obj;System.out.println(entry.getKey() + “=“ + entry.getValue();6)集合迭代注意问题/ 在使用迭代器迭代集合的过程中,不能对集合进行增删操作Testpublic void test4() List list = new ArrayList();list.add(“wangwu“);list.add(“zhan

15、gsan“);list.add(“lisi“);Iterator iter = list.iterator();while(iter.hasNext() String name = (String) iter.next();if(“wangwu“.equals(name) / 从集合中删掉/list.remove(name);/ 迭代过程中删除元素需要调用迭代器的方法iter.remove(); / 删除我迭代的集合被我迭代的最后一个元素6/ 1 2 4System.out.println(list.size();Testpublic void test5() List list = new

16、ArrayList();list.add(“aa“);list.add(“bb“);/ 使用 ListIterator 迭代器ListIterator listIterator = list.listIterator();while(listIterator.hasNext() listIterator.next();/ 迭代过程中增加元素listIterator.add(“cc“);System.out.println(list.size();7) 增强 for 循环注意问题/在使用增强 for 循环时,不能对元素进行赋值int arr = 1,2,3;for(int num : arr)

17、num = 0;System.out.println(arr1);4. 可变参数1) jdk5 中方法的形参可以定义为可变参数,传入实参个数可变/ 设计一个方法求 n 个数的和public static int getSum(int. arr) / 可变参数在方法中仍被看做一个数组int sum = 0;for(int num : arr)sum += num;return sum;2)Arrays.asList 为例演示传入不同参数的情况7/ list 长度为 3List list = Arrays.asList(“a“,“b“,“c“);/ list 长度为 1, 因为考虑 1.4 语法S

18、tring arr = “a“,“b“,“c“;List list = Arrays.asList(arr);/ 同时符合 1.4 和 1.5 的语法,此时会优先考虑 1.4 的语法/ 原因是有了新功能要保证以前的代码不出错,向后兼容/ 现在就需要将 arr 作为一个元素存入集合Object obj = arr;List list2 = Arrays.asList(obj); / 此时只符合 1.5 的语法,不符合 1.4 的语法,没有歧义List list3 = Arrays.asList(new Objectarr); / 优先考虑 1.4,所以数组会拆开/System.out.print

19、ln(list3.size();/ 基本数据类型数组只符合 1.5 的语法int nums = 1,2,3;list = Arrays.asList(nums);System.out.println(list.size();5. 枚举问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个解决办法:1) 在 setGrade 方法中做判断,不符合格式要求就抛出异常2) 直接限定用户的选择,通过自定义类模拟枚举的方式来限定用户的输入写一个 Grade 类,私有构造函数,对外提供 5 个静态的常量表示类的实例3) jdk5 中新定义了枚举类型,专门用于解决此类问题4) 枚举就是一个特

20、殊的 java 类,可以定义属性、方法、构造函数、实现接口、继承类/枚举类就是一个 java 类,也可以声明属性,方法,构造函数public enum Grade4 A(“90-100“),B(“80-89“),C(“70-79“),D(“60-69“),E(“0-59“);private String value;private Grade4(String value) this.value = value;public String getValue() return value;/枚举类就是一个 java 类, 也可以继承抽象和实现接口public enum Grade5 / 抽象类不能

21、创建实例对象A(“90-100“)/ new 了一个 Grade5 的子类实例public String toLocaleString() return “优“;8,B(“80-89“)/ new 了一个 Grade5 的子类实例public String toLocaleString() return “良“;,C(“70-79“)/ new 了一个 Grade5 的子类实例public String toLocaleString() return “中“;,D(“60-69“)/ new 了一个 Grade5 的子类实例public String toLocaleString() retu

22、rn “差“;,E(“0-59“)/ new 了一个 Grade5 的子类实例public String toLocaleString() return “不及格“;private String value;private Grade5(String value) this.value = value;public String getValue() return value;/ 对外提供一个方法,返回枚举的本地信息/ 一个方法不知道如何实现,可以定义为抽象的public abstract String toLocaleString(); 练习:请编写一个关于星期几的枚举 WeekDay,要求

23、: 枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun 星期一。 。 。 。星期日 该枚举要有一个方法,调用该方法返回中文格式的星期。96. 反射1)java 代码的阶段:一段 java 代码在程序运行期间会经历三个阶段: sourceclassruntime2) Class 对象: 在 java 中用一个 Class 对象来表示一个 java 类的 class 阶段Class 对象封装了一个 java 类中定义的成员变量、成员方法、构造方法、类名、包名等获得 class 对象的三种方式和区别:/ 1. 根据给定的类名来获得 用于类加载String classname = “cn.

24、itcast.reflect.Person“; / 来自配置文件Class clazz = Class.forName(classname); / 此对象代表Person.class/ 2. 如果拿到了对象,不知道是什么类型 用于获得对象的类型Object obj = new Person();Class clazz1 = obj.getClass(); / 获得对象具体的类型/ 3. 如果是明确地获得某个类的Class 对象 主要用于传参Class clazz2 = Person.class;/ 在java中所有的类型都会对应一个Class对象 int IntegerClass intCla

25、zz = int.class;Class intarrClazz = int.class;Class voidClazz = void.class;3)反射反射就是获得一个 java 类的各个组成部分/ 反射类的成员方法Class clazz = Person.class;Method method = clazz.getMethod(methodName, new ClassparamClazz1, paramClazz2);method.invoke();/ 反射类的构造函数Constructor con = clazz.getConstructor(new ClassparamClazz

26、1, paramClazz2,.)con.newInstance(params.)/ 反射类的属性Field field = clazz.getField(fieldName);field.setAccessible(true);field.setObject(value);4) 反射用在哪里到底框架是什么? 框架就是将开发中大量重复的代码集中起来写个通用的程序框架就是用反射来实现的, 框架需要现在的类调用将来写的类框架是将来的程序员调用的,框架不能实现完整的功能,框架只是一些一些通用的代码;框架要依赖将来写的类来运行.现在写的类要调用将来写的类,我们先针对接口进行调用,将来的类需要实现接口,

27、那么方法就固定了但是将来写的类的类名我们无法获知,这时就需要调用者通过配置文件告诉框架具体的类名107. 泛型1) 泛型是一种可变化的类型 , 类型不确定,需要调用者来指定2) 用途:一个类的多个成员方法用到的参数类型或返回值类型都是未知的类型,但又需要是同一个类型,就可将方法的参数类型定义为泛型,此泛型必须在类上先予以声明才能在方法中使用一个方法的多个参数和返回值需要是同一个类型,也可以用泛型来解决,在方法返回值前面声明泛型泛型的细节:1) 泛型到底代表什么类型取决于调用者传入的类型,如果没传,默认是 Object 类型2) 使用带泛型的类创建对象时, 等式两边指定的泛型必须一致原因: 编译

28、器检查对象调用方法时只看变量,然而程序运行期间调用方法时就要考虑对象具体类型了3) 等式两边可以在任意一边使用泛型 在另一边不使用 (考虑向后兼容)3. 泛型的基本概念以 List为例: 发布 web 工程3.5. 在 web.xml 文件中做映射HelloWorldServletcn.itcast.servlet.HelloWorldServletHelloWorldServlet/HelloWorldServlet注意: servlet 对象一旦创建就会驻留在内存中,为所有的请求服务 ,servlet 对象什么时候销毁? 直到服务器关闭时或 web 应用被移除才销毁3.6. Servlet

29、 执行流程图13IE一一 一一 Servlethtp:/localhost:8080/day05/Servlet1: 一windows一dns一一ip2: 一一一一 3: 一一一4: 一一一一(一一一)-day055: 一一一web一6: 一一一一一一一web.xml一一一Servlet一7: 一一Servlet一一一init一8: 一service一requesrtresponse 9: 一response一一一一service一一一10: service一一1: 一response一一一一一一IE一一4. 用 eclipse 工具开发 Servlet4.1. 建一个 web project

30、4.2. 在 src 下建包,创建一个 java 类实现 Servlet 接口4.3 在 WebrootWEB-INFweb.xml 做 servlet 映射4.4 配置 tomcat 服务器window preferences tomcat6.x4.5 将 web 工程发布至 tomcat 服务器发布的 web 应用名称可以配置: web 工程右键 选 propertiesmyeclipseweb默认情况使用工程名作为发布后的 web 应用名4.6 启动 tomcat 服务器运行程序145. HttpServlet 对象一般来讲我们开发一个 Servlet 会去继承 HttpServlet在

31、 eclipse 下开发 Servlet 可以直接新建一个 Servlet, 覆写 HttpServlet 的 doGet 和 doPost 方法继承 HttpServlet 的原因是: HttpServlet 实现了 service 方法,将 ServletRequst 和 ServletResponse强转为子类 HttpServletRequest 和 HttpServletResponse,让我们用起来更加方便,同时,在 service 方法中,它判断了请求方式,根据请求方式来调用 doGet 和 doPost二、 Servlet 细节1. * 号统配符一个 Servlet 可以映射为

32、多个路径在映射 Servlet 路径时可以使用/* 或 *.扩展名 的形式注意: 两者不能同时使用/* 具有较高的优先级2. load-on-startup 元素元素下可以配置子元素,配置方式如下:1如果一个 Servlet 配置了该项,web 容器会在 web 应用被加载时就初始化该 Servlet,数字越小则越先初始化3. tomcatconfweb.xml服务器下所有 web 应用中的 web.xml 都会自动继承该文件中所有的配置http:/localhost:8080/day05/a.html a.html 是资源名上面的 url 访问的 url 在 web.xml 文件中并没有配置

33、此时会去访问缺省的 Servlet,在 tomcatconfweb.xml 文件中就配置了一个缺省的 DefaultServletDefaultServlet 帮我们去 web 应用下读取 a.html 文件,并打给浏览器,如果没有发送 404 页面也就说,我们通过 ie 访问服务器访问的都是 Servlet4. Servlet 线程安全问题解决 Servlet 线程安全问题: 加上同步的锁(lock)实现 SingleThreadModel 接口的 Servlet服务器会做判断,当有请求过来,如果 Servlet 对象忙着呢,服务器会再创建一个 Servlet 对象为用户提供服务,如果 Se

34、rvlet 闲置,就直接提供服务这样的方式实际上是回避了线程安全问题, 单线程访问 Servlet, 这样的方式不可取Lesson 3一、 WEB 服务器1. 基本概念WEB 在英语中即表示网页的意思,它用于表示 Internet 主机上供外界访问的资源以及超链接所组成的链表放在 internet 网上供外界访问的文件或程序被称为 web 资源web 资源被分为:静态 web 资源: html、css、jpg动态 web 资源:Servlet 、Jsp152. 什么是 WEB 服务器?就是一台电脑,安装了一个服务器软件3. 为什么需要安装 WEB 服务器思考问题: 从一台计算机的 IE 浏览器

35、如何去访问另一台计算机中的文件3.1 两台计算机是如何实现通讯的?IP 地址(计算机的唯一标识 ) IPV4 4 个字节的整数,每个字节以 点号 隔开 192.168.1.100 每个字节的取值 0255在计算机中程序会绑定在某一个端口 065535 尽量用 1024 以上的连接一台计算机就需要输入 ip 地址和端口号作为接收方, 应该绑定 ip,监听指定的端口3.2 在本地写程序添加一个服务,供别人来访问, 假设监听 8888 端口3.3 编码实现了一个本地服务器程序作用: 管理本地的资源,只要将 html 页面放到指定的目录下,外界就可以访问了3.4 安装服务器的目的: 开发好的 web

36、资源可以发布到服务器上,这样外界就可以通过浏览器访问了源程序: MyServer.java/ ServerSocket 对象可以监听端口ServerSocket serversocket = new ServerSocket(6666);while(true) Socket socket = serversocket.accept(); / 等待客户端的连接请求,一旦有请求过来,就结束阻塞,返回客户端对象/ 一旦有客户来访问, 就另开一个新线程去提供服务, main线程继续等待下一个客户的连接new Thread(new MyService(socket).start();MyService.

37、java/ 提供服务InputStream in = socket.getInputStream();Thread.sleep(200);int len = in.available(); / 估计此流不受阻塞能读取的字节数byte buffer = new bytelen;in.read(buffer);String request = new String(buffer);/ 截取第一行String firstLine = request.substring(0, request.indexOf(“n“);String uriName = firstLine.split(“ “)1;Out

38、putStream out = socket.getOutputStream();/ 根据需要访问的资源创建 File 对象File file = new File(“src“ + uriName);if(!file.exists() out.write(“对不起!您访问的资源不存在!别瞎搞!“.getBytes();out.close();return ;/ 从文件读, 往浏览器写 16FileInputStream fis = new FileInputStream(file);buffer = new byte1024;while (len = fis.read(buffer) 0) o

39、ut.write(buffer, 0, len);socket.close();二、Tomcat 服务器的安装和配置1. 使用 tomcat6.0.20.rar 文件解压即完成安装2. tomcat 就是一个 java 程序,一定会用到 jre所以需要配置环境变量 java_home 配置成 jdk 的安装目录 c:jdk1.6tomcat 的启动是通过 startup.bat 文件, 实际上 startup.bat 中是去调用catalina.bat 文件, 而且是通过 %catalina_home%bincatalina.bat 去找所以为了保证服务器启动正常, 需要配置 catalina

40、_home 环境变量为 tomcat 的安装目录3. tomcat 的目录结构bin : 存放一些执行文件conf : 存放服务器的配置文件lib : 存放 tomcat 所依赖的 jar 文件logs: 存放日志文件temp: 存放临时文件webapps: web applications 存放所有的 web 应用程序(web 资源)work: tomcat 的工作目录, jsp 翻译成的 Servlet 就在这个目录下4. web 应用多个 web 资源存放在一个目录下即为一个 web 应用(web 应用程序、web 工程)web 应用的目录结构静态 web 资源直接放在目录下java 类

41、放在 classes 目录下web.xml 文件负责管理 web 应用下所有的 web 资源所有 jar 包放在 lib 目录下三、 WEB 应用的映射1. 虚拟目录一个 web 应用(服务器上一个目录 ) 需要供外界访问的路径,需要映射虚拟目录在 tomcat6 中,放在 webapps 下的 web 应用,服务器会自动做映射(将文件夹名称作为虚拟路径)对于 webapps 目录外的 web 应用需要手动映射虚拟路径1.1. 在 server.xml 文件可以配置1.2. 在 %tomcat 目录%confcatalinalocalhost 下写一个 xml 文件文件名就是 虚拟目录17多级

42、目录配置 aaa#bbb.xml 对应 /aaa/bbb如果文件名 是 ROOT.xml 那就是配置了缺省的 web 应用, 访问时不需要输入 虚拟目录2. web.xmlWeb.xml 的作用: 管理 web 应用下所有的 web 资源通俗地讲,一个 web 应用下所有的 web 资源如何被外界访问都需要在此文件下做映射包括咱们后面学的 Servlet jsp 都需要在这个文件中做映射实验: 配置 web 应用的 首页在 web 应用下新建目录 WEB-INF ,在此目录下 新建 web.xml 文件itcast.html3. 域名解析一个完整 url http::80itcastindex

43、.jsp协议名 主机名 端口号 资源名 (uri)IE 访问服务器的原理,在 IE 中输入的地址中包含域名,域名就需要被翻译成服务器的 IP,才能访问到服务器18IE 浏览器sina 服务器看 windows 是否注册了该主机名DNS 服务器 (网络服务商)解析域名,获得一个 IP4. web 应用映射的练习:新建一个 web 应用 配置成缺省的 web 应用配置首页配置 tomcat 监听端口为 80在 windows 中注册主机名5. 虚拟主机服务器允许在一个 IP 上配置多个主机,即虚拟主机http:/:80/index.html中的 起了两个作用:找 DNS 服务器,作为域名被解析为

44、 IP通过 Host 头告诉服务器访问的主机名配置方式: 在 server.xml 文件中配置 Host 元素,需要指定 name(主机名) 、appBase( 默认 web 应用存放目录)appBase 目录下所有的 web 应用,tomcat 会自动映射虚拟路径做实验: 给新配置的虚拟主机配置缺省的 web 应用19分析 web 资源访问过程http:/ a.html 静态 web 资源, IE 做了什么事1) 将 作为域名发送给 DNS , 解析成 IP 地址, 访问一台服务器2) 发送 Host 头() ,告诉服务器我要访问的虚拟主机 ,服务器拿着 Host 头找匹配的 Host 元

45、素3) 将 abc 作为虚拟目录,告诉服务器我要访问的 web 应用 ,服务器拿着 abc 找匹配的 web 应用4) 将 a.html 作为资源名, 告诉服务器我要访问的 web 资源, 服务器拿着 a.html 去 web.xml 文件中找映射虚拟目录对应是一个 web 应用的目录,所以虚拟目录也被我们称作 web 应用路径(web 应用的上下文 contextpath)三、http 协议1. tcp/ip 协议: 网络通信协议(连接)ip 协议 : 127.0.0.1 ip 地址对应一台计算机 (互联网层)tcp 高级协议: 三次握手, 发送请求、返回响应、传输数据 (传输层)2. ht

46、tp 协议是建立在 tcp 协议的基础之上 (应用层)3. Http 协议的版本 (w3c)Http1.0 : 建立连接,发送一次请求就断开Http1.1 :建立连接,可以无限次发送请求20四、 http 请求消息http 请求消息内容: 包括一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。请求行POST /itcast/ HTTP/1.1消息头Accept: image/gif, image/x-xbitmap, */*Referer: http:/localhost:8080/itcast/Accept-Language: zh

47、-CN,en-GB;q=0.8,ar-YE;q=0.7,ja-JP;q=0.5,de-CH;q=0.3,en-US;q=0.2Content-Type: application/x-www-form-urlencodedUA-CPU: x86Accept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6.5; CIBA)Host: localhost:8080Content-Length: 33Connection: Keep-AliveCache-Control

48、: no-cacheCookie: JSESSIONID=B0B3FB4FFB0315B3D3C620548DD4E1EB空一行消息体username=zhangsan MSIE 5.5; Windows NT 5.0) 说明浏览器内核Cookie 向服务器发送 CookieConnection: close/Keep-Alive 说明连接状态Date: Tue, 11 Jul 2000 18:23:51 GMT 客户端计算机时间3. 实体内容(消息体)浏览器向服务器发送的数据,例如上传的文件、提交的表单等21五、http 响应消息http 响应消息的内容包括: 一个状态行(类比 http 请求信息的”请求行”) 、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。 HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: text/html;cha

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报