Servlet
HTTP协议
概念
- 超文本传输协议【HyperText Transfer Protocol】
- 规定了浏览器和服务器之间数据传输格式
- 是一个基于请求与响应模式的、无状态的、应用层的协议,运行于TCP协议基础之上
特点
- 支持客户端【浏览器】/服务器模式
- 简单快速
- 灵活
- 无状态
通信流程:
- 浏览器与服务器建立连接(三次握手)
- 浏览器向服务器发送请求。(HTTP协议,请求报文)
- 服务器接受请求,并根据请求返回相应的文件作为应答。(HTTP协议,响应报文)
- 浏览器与服务器关闭连接(四次挥手)
面试题
有一个页面,页面中包含四张图片,问浏览器向服务器发送几次请求?
5次请求、HTTP1.1协议中建立一次TCP连接
HTTP请求报文
当浏览器向Web服务器发出请求时,向服务器传递了一个数据块,就是请求报文
| 请求头 | 描述 | | ----------------- | ---------------------------------------------------------- | | Accept | 浏览器通过这个头告诉服务器,它所支持的数据类型 | | Accept-Encoding | 浏览器通过这个头告诉服务器,支持的压缩格式 | | Accept-Language | 浏览器通过这个头告诉服务器,它的语言环境 | | Host | 浏览器通过这个头告诉服务器,想访问哪台主机 | | If-Modified-Since | 浏览器通过这个头告诉服务器,缓存数据的时间 | | Referer | 浏览器通过这个头告诉服务器,客户机是哪个页面来的 | | Connection | 浏览器通过这个头告诉服务器,请求完后是断开链接还是保持链接 | | User-Agent | 浏览器通过这个头告诉服务器,浏览器的基本信息 |
HTTP响应报文
当Web服务器收到浏览器的请求后,服务器要对请求作出响应,就是响应报文
| 响应头 | 描述 | | ------------------- | ---------------------------------------------- | | Location | 服务器通过这个头,来告诉浏览器跳到哪里 | | Server | 服务器通过这个头,告诉浏览器服务器的型号 | | Content-Encoding | 服务器通过这个头,告诉浏览器数据的压缩格式 | | Content-Type | 服务器通过这个头,告诉浏览器数据的类型 | | Content-Length | 服务器通过这个头,告诉浏览器回送数据的长度 | | Content-Language | 服务器通过这个头,告诉浏览器语言环境 | | Refresh | 服务器通过这个头,告诉浏览器定时刷新 | | Content-Disposition | 服务器通过这个头,告诉浏览器以下载方式打开数据 | | Expires | 如果为-1,控制浏览器不要缓存 | | Cache-Control | 如果为no-cache,控制浏览器不要缓存 | | Pragma | 如果为no-cache,控制浏览器不要缓存 |
常见状态码
| 状态代码 | 状态描述 | 说明 | | ------------ | ---------------------- | ------------------------------------------------------------ | | 200 | OK | 客户端请求成功。 | | 302 | Found | 临时重定向。 | | 403 | Forbidden | 服务器收到请求,但是拒绝提供服务。 服务器通常会在响应正文中给出不提供服务的原因。 | | 404 | Not Found | 请求的资源不存在,例如,输入了错误的URL。 | | 500 | Internal Server Error | 服务器发生不可预期的错误,导致无法完成客户端请求。 |
Servlet核心
概念
- Server Applet 服务器小程序
Servlet核心的接口和类
- 除了实现Servlet接口,还可以通过继承GenericServlet或HttpServlet类,完成编写。
Servlet接口
- 所有Servlet都会直接或间接实现该接口
核心方法
- init(ServletConfig config)
- service(ServletRequest req,ServletResponse res)
- destroy()
- ServletConfig getServletConfig()
- String getServletInfo()
GenericServlet抽象类(一般不用)
提供init和destroy方法的简单实现,只需重写抽象service方法即可。
HttpServlet抽象类
HttpServlet是在继承GenericServlet的基础上做了进一步的扩展。(专注于HTTP请求)
对应HTTP请求方法
| 方法名 | 描述 | | ---------- | ------------------- | | doGet | 用于HTTP GET请求 | | doPost | 用于HTTP POST请求 | | doPut | 用于HTTP PUT请求 | | doDelete | 用于HTTP DELETE请求 |
Servlet创建方式
实现Servlet接口:该方式较为麻烦,需要实现接口中所有方法
继承HttpServlet【推荐】
1>重写doGet方法和doPost方法。
2>为了统一处理浏览器请求,doGet调用doPost
Serlet配置方式(一)
配置web.xml:提供\
标签和\ 标签 访问路径url-pattern属性
| 匹配规则 | 语法 | 说明 | | ------------ | ----------- | ---------------------------------------------- | | 精确匹配 | /具体的名称 | 只有url路径是具体的名称的时候才会触发Servlet | | 后缀匹配 | .xxx | 只要是以xxx结尾的就匹配触发Servlet | | 通配符匹配 | / | 匹配所有请求,包含服务器的所有资源 | | 通配符匹配 | / | 匹配所有请求,包含服务器的所有资源,不包括.jsp |
加载属性:
| 加载属性 | 语法 | 说明 | | ------------ | --------------- | ------------------------------------------------------------ | | 加载时机 | load-on-startup | 指定Servlet加载时机。默认-1 第一次访问时创建。 0或正整数启动时创建,数子越小优先级越高 |
配置Servlet参数:\
Serlet配置方式(二)
注解配置
Servlet3.0后支持,推荐使用。
@WebServlet。
配置属性
| 属性名 | 语法 | 说明 | | ----------- | ------------- | ------------------------------------------------------------ | | Servlet名字 | name | 为当前Servlet命名。可选,不能为“”并且不能重复,如果重复启动不会报错误,但是会覆盖掉同名的Servlet | | 访问路径 | value | 配置URL访问路径,可配置多个。 | | 访问路径 | urlPatterns | 配置URL路径 ,和value作用一样,不能同时使用。 | | 加载时机 | loadOnStartup | 配置Servlet的创建的时机。 如果是0或者正数启动程序时创建。数子越小优先级越高。 如果是负数,则访问时创建。 | | 参数 | initParams | 配置Servlet参数 |