关于Servlet,你要掌握的核心知识

131 阅读3分钟

一、 什么是 Servlet?

1、Servlet 是 JavaEE 规范之一。规范就是接口的意思

2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。

3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

(Servlet可以理解为就是一个接受请求,进行响应的服务器)

二、如何实现Servlet程序?

1、编写一个类去实现 Servlet 接口

2、实现 service 方法,处理请求,并响应数据

3、到 web.xml 中去配置 servlet 程序的访问地址

image.png

三、 Servlet 的生命周期

1、执行 Servlet 构造器方法
2、执行 init 初始化方法,创建 Servlet 程序会调用。
3、执行 service 方法,每次访问都会调用。
4、执行 destroy 销毁方法,在 web 工程停止的时候调用。

四、通过继承 HttpServlet 实现 Servlet 程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
1、编写一个类去继承 HttpServlet 类
2、根据业务需要重写 doGet 或 doPost 方法
3、到 web.xml 中的配置 Servlet 程序的访问地址

image.png

配置文件

image.png

五、ServletConfig类

ServletConfig类是 Servlet 程序的配置信息类。
Servlet 程序默认是第一次访问的时候创建
ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。

六、ServletContext 类

什么是 ServletContext?

1、ServletContext 是一个接口,它表示 Servlet 上下文对象
2、一个 web 工程,只有一个 ServletContext 对象实例。
3、ServletContext 对象是一个域对象。
4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁

ServletContext 类的四个作用

1、获取 web.xml 中配置的上下文参数 context-param
2、获取当前的工程路径,格式: /工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像 Map 一样存取数据

七、 HTTP 协议

所谓 HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫 HTTP 协议。
HTTP 协议中的数据又叫报文。
客户端给服务器发送数据叫请求。
服务器给客户端回传数据叫响应。
请求又分为 GET 请求,和 POST 请求两种

GET 请求

1、请求行
(1) 请求的方式 GET
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号 HTTP/1.1
2、请求头
key : value 组成 不同的键值对,表示不同的含义。

POST 请求

1、请求行
(1) 请求的方式 POST
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号 HTTP/1.1
2、请求头
key : value 不同的请求头,有不同的含义
空行
3、请求体 ===>>> 就是发送给服务器的数据

八、HttpServletRequest 类

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。然后传递到 service 方法(doGet 和 doPost)中给我们使用。
我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。

HttpServletRequest 类的常用方法

  • i. getRequestURI() 获取请求的资源路径
  • ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
  • iii. getRemoteHost() 获取客户端的 ip 地址
  • iv. getHeader() 获取请求头
  • v. getParameter() 获取请求的参数
  • vi. getParameterValues() 获取请求的参数(多个值的时候使用)
  • vii. getMethod() 获取请求的方式 GET 或 POST
  • viii. setAttribute(key, value); 设置域数据
  • ix. getAttribute(key); 获取域数据
  • x. getRequestDispatcher() 获取请求转发对象(!!)