http协议

http协议
jwang HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,传输HTML文件。
HTTP是互联网上用的最多的一个协议, 所有的www开头的都是遵循这个协议的(可能是https)
HTTP协议的作用
HTTP作用:用于定义WEB浏览器与WEB服务器之间交换数据的过程和数据本身的内容
浏览器和服务器交互过程: 浏览器请求, 服务请求响应
请求(请求行,请求头,请求体)
响应(响应行,响应头,响应体)
请求部分
- get方式请求
【请求行】 |
- post请求
【请求行】 |
请求行
- 请求行
GET /myApp/success.html?username=zs&password=123456 HTTP/1.1 |
请求方式(8种,put,delete等)
GET:明文传输, 不安全,参数跟在请求路径后面,对请求参数大小有限制,
POST: 暗文传输,安全一些,请求参数在请求体里,对请求参数大小没有有限制,
URI:统一资源标识符(即:去掉协议和IP地址部分)
协议版本:HTTP/1.1
请求头
从第2行到空行处,都叫请求头,以键值对的形式存在,但存在一个key对应多个值的请求头.
作用:浏览器告诉服务器自己相关的设置.
- Accept:浏览器可接受的MIME类型 ,告诉服务器客户端能接收什么样类型的文件。
- User-Agent:浏览器信息.(浏览器类型, 浏览器的版本….)
- Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
- Content-Length:表示请求参数的长度
- Host:初始URL中的主机和端口
- Referrer:从哪里里来的(之前是哪个资源)、防盗链
- Content-Type:内容类型,告诉服务器,浏览器传输数据的MIME类型,文件传输的类型,application/x-www-form-urlencoded .
- Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
- Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接 )
- Cookie:这是最重要的请求头信息之一(会话技术, 后面会有专门的时间来讲的)
- Date:Date: Mon, 22Aug 2011 01:55:39 GMT请求时间GMT
请求体
只有请求方式是post的时候,才有请求体. 即post请求时,请求参数(提交的数据)所在的位置
响应部分
响应部分
【响应行】
HTTP/1.1 200 OK
【响应头】
Accept-Ranges: bytes
ETag: W/"143-1557909081579"
Last-Modified: Wed, 15 May 2019 08:31:21 GMT
Content-Type: text/html
Content-Length: 143
Date: Sun, 08 Dec 2019 02:20:04 GMT
【响应体】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Success
</body>
</html>
响应行
HTTP/1.1 200 |
协议/版本
响应状态码 (记住-背诵下来)
200:正常,跟服务器连接成功,发送请求成功
302:重定向(跳转)
304:读取缓存,表示客户机缓存的版本是最新的,客户机可以继续使用它,无需到服务器请求. 读取缓存
403: forbidden 权限不够,服务器接收到了客户端的请求,但是拒绝处理
404:服务器接收到了客户端的请求,但是我服务器里面没有你要找的资源
500:服务器接收到了客户端的请求,也找到了具体的资源处理请求,但是处理的过程中服务器出异常了
响应头
响应头以key:vaue存在, 可能多个value情况. ==服务器指示浏览器去干什么,去配置什么.==
- Location: http://www.it315.org/index.jsp指示新的资源的位置,通常和状态,码302一起使用,完成请求重定向
- Content-Type: text/html; charset=UTF-8; 设置服务器发送的内容的MIME类型,文件下载时候
a.mp3 b.mp4
Refresh: 5;url=http://www.baidu.com 指示客户端刷新频率。单位是秒 eg: 告诉浏览器5s之后跳转到百度
Content-Disposition: attachment; filename=a.jpg 指示客户端(浏览器)下载文件
Content-Length:80 告诉浏览器正文的长度
Server:apachetomcat 服务器的类型
Content-Encoding: gzip服务器发送的数据采用的编码类型
Set-Cookie:SS=Q0=5Lb_nQ;path=/search服务器端发送的Cookie
Cache-Control: no-cache (1.1)
Pragma: no-cache (1.0) 表示告诉客户端不要使用缓存
Connection:close/Keep-Alive
Date:Tue, 11 Jul 2000 18:23:51 GMT
响应体
页面展示内容, 和网页右键查看的源码一样
第四章-Servlet入门(最重要的东西)
实操-使用IDEA创建web工程配置tomcat
1.目标
- 能够在IDEA配置tomcat 并且创建web工程
2.讲解
2.1配置tomcat
我们要将idea和tomcat集成到一起,可以通过idea就控制tomcat的启动和关闭:

2.2创建JavaWeb工程
2.2.1web工程创建
2.2.2 发布
- 情况一: 已经关联成功的情况(因为我创建项目的时候, 已经选择了tomcat)

- 情况二: 如果之前没有选择tomcat, 现在就需要自己关联发布
3.小结
- 配置tomcat(选择local)
- 创建javaweb项目,选择Java Enterprise

发布
目录结构

先看笔记 配置发布一下, 如果看笔记配置不出来, 看视频 ( 自己操作<=30分钟), 问同桌, 老师
知识点-Servlet概述
1.目标
- 知道什么是Servlet,Servlet作用
2.讲解
2.1 什么是Servlet
Servlet **运行在服务端(tomcat)**的Java小程序(对象),是sun公司提供一套规范. 就是动态资源
2.2Servlet作用
用来接收、处理客户端请求、响应给浏览器的动态资源。
但servlet的实质就是java代码,通过java的API动态的向客户端输出内容
2.3 servlet与普通的java程序的区别
- 必须实现servlet接口
- 必须在servlet容器(服务器 tomcat)中运行
- servlet程序可以接收用户请求参数以及向浏览器输出数据
3.小结
- Servlet是运行在服务器端java小程序, 动态资源
- Servlet的作用: 接收请求,做出响应
案例-Servlet入门案例
1.需求
在IDEA编写Servlet,发布到Tomcat. 在浏览器输入路径请求, 控制台打印Hello…
2.分析
2.1配置文件方式实现
- 创建web工程
- 创建一个类实现Servlet接口
- 在web.xml配置servlet的映射路径
2.2注解方式实现
- 创建web工程
- 创建一个类实现Servlet接口
- 在这个类上面添加@WebServlet(“访问的路径”)
3.实现
3.1配置文件方式实现
- 在com.itheima.web包下创建一个类实现Servlet接口
package com.itheima.web; |
- web.xml配置(该文件在web/WEB-INF 文件夹下):
<?xml version="1.0" encoding="UTF-8"?> |
3.2注解方式实现
- 在com.itheima.web包下创建一个类实现Servlet接口, 添加注解
package com.itheima.web; |
浏览器地址栏输入:http://localhost:8080/day27_servlet/demo02
4.小结
4.1 如果出现实现Servlet报错
- 检查当前的工程是否依赖了Tomcat
- 如果没有依赖, 依赖tomcat

4.2配置文件方式与注解方式比较
注解方式简化的javaweb代码开发,可以省略web.xml配置文件.
但是配置文件方式必须掌握的(后面在框架或者大项目里面会使用到的)
4.3步骤回顾
- xml方式
- 创建一个类实现Servlet接口
- 在web.xml配置servlet
- 注解方式
- 创建一个类实现Servlet接口
- 在类上面添加@WebServlet(“访问的路径”)
知识点-入门案例原理和路径
1.目标
- 掌握Servlet执行原理和Servlet路径的配置url-pattern
2.讲解
2.1Servlet执行原理
通过上述流程图我们重点需要掌握如下几个点:
- Servlet对象是由服务器创建(反射)
- request与response对象也是由tomcat服务器创建
- service()方法也是服务器调用的
2.3 Servlet路径的配置url-pattern
url-pattern配置方式共有三种:
- 完全路径匹配: 以 / 开始. 注: 访问的路径不能多一个字母也不能少一个
例如: 配置了/demo01 请求的时候必须是: /demo01 |
- 目录匹配”以 / 开始需要以 * 结束. 注: Servlet里面用的 不多, 但是过滤器里面通常就使用目录匹配
例如: 配置/* 访问/a, /aa, /aaa; 配置 /aa/* 访问 /aa/b , /aa/cc |
- 扩展名匹配不能以 / 开始, 以 * 开始的 .
例如: *.action; 访问: aa.action, bb.action, c.action; 错误写法: /*.do, 不可以写*.jsp,*.html |
注意的地方:
一个路径只能对应一个servlet, 但是一个servlet可以有多个路径
tomcat获得匹配路径时,优先级顺序:完全路径匹配> 目录匹配 > 扩展名匹配
3.小结
- 讲Servlet原理目的让大家对Servlet执行有一个深入认识, 只需要能懂就可以. 具体操作是服务器(创建servlet,执行service), 你【重点】要做的就是写出Servlet
- 路径有多种方式, 一般用完全路径匹配
第五章-Servlet进阶
知识点-Servlet的生命周期
1.目标
- 掌握Servlet的生命周期
2.讲解
2.1生命周期概述
一个对象从创建到销毁的过程
2.2Servlet生命周期方法
servlet从创建到销毁的过程
出生:(初始化)用户第一次访问时执行。
活着:(服务)应用活着。每次访问都会执行。
死亡:(销毁)应用卸载。
serrvlet生命周期方法:
init(ServletConfig config)
service(ServletRequest req, ServletResponse res)
destroy()
2.3Servlet生命周期描述
常规【重点】
默认情况下, 来了第一次请求, 会调用init()方法进行初始化【调用一次】
任何一次请求 都会调用service()方法处理这个请求
服务器正常关闭或者项目从服务器移除, 调用destory()方法进行销毁【调用一次】
扩展
servlet是单例多线程的, 尽量不要在servlet里面使用值可变的全局(成员)变量,可能会导致线程不安全
单例: 只有一个对象(init()调用一次, 创建一次)
多线程: 服务器会针对每次请求, 开启一个线程调用service()方法处理这个请求
2.4. ServletConfig【了解】
Servlet的配置对象, 可以使用用ServletConfig来获得Servlet的初始化参数,在SpringMVC里面会遇到
- 先在配置文件里面配置初始化参数
- 可以通过akey获得aaa
2.5 启动项
Servlet默认情况下什么是创建? 默认情况下是第一次请求的时候.
如果我想让Servlet提前创建(服务器启动的时候), 这个时候就可以使用启动项 在SpringMVC里面会遇到
3.小结
Servlet生命周期方法
- init() 初始化
- service() 服务
- distory() 销毁
Servlet生命周期描述【面试题】
默认情况下, 第一次请求的时候, 调用init()方法进行初始化【调用一次】
任何一次请求, 都会调用service()方法进行处理这个请求
服务器正常关闭/项目从服务器移除, 调用destory()方法进行销毁【调用一次】
Servlet是单例多线程的
知识点-Servlet体系结构(重点)
1.目标
- 掌握Servlet的继承关系,能够使用IDEA直接创建Servlet
2.讲解
Servlet接口
前面我们已经学会创建一个类实现sevlet接口的方式开发Servlet程序,实现Servlet接口的时候,我们必须实现接口的所有方法。但是,在servlet中,真正执行程序逻辑的是service,对于servlet的初始化和销毁,由服务器调用执行,开发者本身不需要关心。因此,有没有一种更加简洁的方式来开发servlet程序呢?
我们先来查阅API回顾Servlet接口:
由上图可知在servlet接口规范下,官方推荐使用继承的方式,继承GenericServlet 或者HttpServlet来实现接口,那么我们接下来再去查看一下这两个类的API:
- GenericServlet 类
阅读上图API可知,GenericServlet 是一个类,它简化了servlet的开发,已经提供好了一些servlet接口所需的方法,我们开发者只需要重写service方法即可
我们来使用GenericServlet 创建servlet:
- 创建一个类
- 继承GenericServlet
- 重写service方法
package cn.itcast.web; |
虽然,GenericServlet已经简化了servlet开发,但是我们平时开发程序需要按照一种互联网传输数据的协议来开发程序——http协议,因此,sun公司又专门提供了HttpServlet,来适配这种协议下的开发。
- HttpServlet
阅读上图的API可知,继承HttpServlet,我们需要重写doGet、doPost等方法中一个即可,根据Http不同的请求,我们需要实现相应的方法。
我们来使用HttpServlet创建servlet:
- 创建一个类
- 继承HttpServlet
- 重写doGet方法和doPost方法
/** |
通过以上两个API阅读,同学们注意一个细节HttpServlet是GenericServlet的子类,它增强了GenericServlet一些功能,因此,在后期使用的时候,我们都是选择继承HttpServlet来开发servlet程序。
3.小结
- 继承关系
- 我们可以直接创建一个类继承HttpServlet, 直接在IDEA里面new Servlet
4.扩展(Servlet体系源码)
- 看HttpServlet的service()方法

补充案例:登录
流程分析
代码
login.html
|
LoginServlet
package com.itheima.servlet; |
第六章-ServletContext
知识点-ServletContext概述
1.目标
- 知道什么是ServletContext, 以及作用
2.讲解
2.1 servletContext概述
ServletContext: 是一个全局对象, 上下文对象.
服务器为每一个应用(项目)都创建了一个ServletContext对象。 ServletContext属于整个应用(项目)的,不局限于某个Servlet。并且整个项目有且只会有一个ServletContext对象
2.2 ServletContext作用
作为域对象存取数据,让Servlet共享(掌握)
获得文件MIME类型(文件下载)(了解)
获得全局初始化参数(了解)
获取web资源路径 ,可以将Web资源转换成字节输入流(掌握)
3.小结
知识点-ServletContext的功能
1.目标
- 掌握ServletContext的作用
2.路径
- 作为域对象存取数据
- 获得文件mini类型(文件下载)
- 获得全局初始化参数
- 获取web资源路径
3.讲解
3.1作为域对象存取值【重点】

API
- getAttribute(String name) ;向ServletContext对象的map取数据
- setAttribute(String name, Object object) ;从ServletContext对象的map中添加数据
- removeAttribute(String name) ;根据name去移除数据
代码
- ServletDemo01
package com.itheima.servlet; |
- ServletDemo02
package com.itheima.servlet; |
3.2 获得文件mime-type(了解)
- getMimeType(String file)
- 代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
3.3.获得全局初始化参数(了解)
- String getInitParameter(String name) ; //根据配置文件中的key得到value;
在web.xml配置
通过ServletContext来获得
3.4 获取web资源路径
- API
- String getRealPath(String path);根据资源名称得到资源的绝对路径.
- getResourceAsStream(String path) ;返回制定路径文件的流
注意: filepath:直接从项目的根目录开始写
- 代码
/** |
4.小结
作为域对象存取数据【共享】
- setAttribute(String name,Object value) 存
- getAttribute(String name) 取
- removeAttribute(String name) 移除
获得文件的Mime类型
- getMineType(String fileName);
获得全局初始化参数
- 在web.xml配置
- getInitParameter(String name);
获得web资源路径【已经在web目录了】
- getRealPath(String file); 获得文件的绝对路径
- getReSourceAsStream(String file); 获得文件流
案例-统计网站被访问的总次数
1.需求
- 在页面中显示您是第x位访问的用户.
2.思路分析

3.代码实现
- CountServlet
package com.itheima.servlet; |
- ShowServlet
package com.itheima.servlet; |






























