一、HTTP协议
1、HTTP协议的概述
Hpyte Text Transfer Protocol:超文本传输协议。所有的WWW网址都必须遵循此协议
HTTP必须遵循一个请求/响应模式
请求与响应成对出现
必须先有请求,再有响应
HTTP的默认端口号为80
2、HTTP的请求
(1)请求方式:GET、post。。。
(2)请求行:请求方式 请求的文件路径 协议版本
(3)请求头:Referer : 网站的来源。--防盗链
User-Agent:获取浏览器的信息(文件下载时,不同浏览器的编码不同)
If-Modified-Since:和响应头中的Last-Modified共同使用,查找本地缓存。
(4)请求体:post请求中提交的参数
(4)GET与post的区别
GET请求有文件大小的限制。会将请求信息展现在地址栏,不安全。没有请求体
post请求没有文件大小的限制。不会将请求信息展现在地址栏,安全。有请求体
3、HTTP的响应
(1)响应行:协议版本 状态码 状态描述
状态码:200响应成功
302重定向
304查找本地缓存
404本地文件找不到(网址输入错误)
500服务器内部错误
(2)响应头:Last-Modified:最后修改文件的事件
Refresh:定时刷新
Location:重定向(跳转网页)
Content-Disposition:文件下载时的信息
(3)响应体:页面的显示内容(页面代码)
二、Servlet
1、Servlet概述
Servlet是运行在服务器端的一段JAVA程序,用于接收客户端发送的请求并作出响应
2、Servlet的创建
(1)实现Servlet接口,实现方法
(2)继承HttpServlet与GenericServlet重写方法
(3)在web.xml中配置Servlet
3、Servlet的生命周期:
在客户端第一次访问servlet时,服务器会创建servlet对象,并执行init方法进行初始化。客户端发送一次请求时,服务器会创建一个新的线程来执行servlet,这时service方法会被执行。当服务器关闭或者是该项目从服务器中移除时,servlet就会被销毁,destroy方法会被执行。
4、servlet的其他配置
(1)服务器启动时加载
<load-on-start>1-10</load-on-startup>
数字越大,优先级越低,默认的servlet为1
(2)url-pattern
完全路径匹配:以/开头:/aaa
目录匹配:以/开头,以*结尾:/* --*代表所有
扩展名匹配:不能以/开头 :*.do
优先级:完全路径匹配>目录匹配>扩展名匹配
(3)context-param
全局初始化数据
(4)init-param
局部servlet初始化数据,只能定义在<servlet></servlet>标签中
5、开发路径问题:
(1)相对路径:不是以/开头
(2)绝对路径:以/开头
客户端发送的路径--带工程名
服务器端的路径--不带工程名
转发、静态动态include
6、servletConfig
获得servlet的名称 --getServletName()
获得初始化参数 --getInitparameter()
获得所有初始化参数名称 --getInitParamterNames()
7、ServletContext
ServletContext是一个servlet百晓生。一个WEB项目只有一个ServletContext对象,在服务器启动时服务器就会为项目创建一个ServletContext对象。服务器关闭或者项目从服务器中移除时ServletContext对象会被销毁。如果值被保存在ServletContext中,那么它就有了一个作用的范围,所以我们把这种对象成为“域对象”。
获得MIME类型 --getMimeType()
获得全局初始化参数 --getInitparamter()
--getInitparamterNames()
作为域对象存储数据 --Set/Get/Remove Attribute()
读取web项目的文件 getResourceAsStream();
8、Servlet如何实现单例多线程?
当服务器开启时会创建一个servlet对象,当有请求到达服务器时,服务器不会新建一个servlet,而是通过servlet容器的调度线程detacher thread管理下的线程池中分配一个待执行的线程给请求者。请求结束后,线程被回收到线程池中。