Tomcat与Servlet
Tomcat 与 Servlet 学习笔记
以下是对于 Tomcat 和 Servlet 的理解。 作为 Qt 开发转行的人来说,学了很久了,感觉今天才把对 Tomcat 和 Servlet 理清楚。 以下都是自我理解,配合 AI 验证,如有错误,还请指正。
1. Tomcat 到底是什么?
一开始网上到处都是一句话概括为 Web 服务器。作为没有前后端开发经验的人来说看得迷迷糊糊的,下面从操作系统方面就很好理解:它就是一个 Java 写好的、可独立运行的程序。
2. Tomcat 有什么作用?
前端发来的 HTTP 协议,本质是 TCP 协议上自定义的一个协议,不过现在已经成为通用协议了(学过 C 语言的应该对使用裸 socket 来创建客户端、服务端很熟悉)。然后 Tomcat 就是对这个自定义 HTTP 协议的一个解析和组装,客户端发送的消息会被 Tomcat 监听到,然后把字节流数据解析,后端就能拿到客户端的数据了。
3. Servlet 是什么?
Servlet 是一个框架,是一个依赖包?都不是,它就是一套约定、标准、规范。就像我们约定的 HTTP 协议一样,被大家所认可了。
4. Servlet 有什么作用?
一套规范、标准的作用,那么肯定就是减少沟通成本,方便你我他。
5. Servlet 的全局理解
刚才说到 Tomcat 可以接收到前端数据,我们不必关心数据传输和解析组装的工作了。那么 Tomcat 收到数据后,我们如何拿到数据?那么 HttpServlet 就该干活了,我们自己的后端就可以继承 HttpServlet 类,重写对应的 doGet()、doPost()、doPut()、doDelete() 拿到前端发送的数据。
实际上 HttpServlet 是 GenericServlet 的子类,而 GenericServlet 实现了 Servlet 接口。只要实现 Servlet 接口就可以拿到客户端的数据。三个类各自职责不一样:Servlet 接口定义自身生命周期;GenericServlet 抽象类实现了 Servlet 接口的大量方法,只需要重写核心的 service() 构造方法,它不绑定 HTTP 协议,也可以适用别的网络请求;而 HttpServlet 抽象类就是专门适配 HTTP 协议的 Servlet,实现了 service() 方法,我们使用只需继承重写 doGet() 方法。
那么拿到的前端数据类是哪一个?是 HttpServletRequest 接口类,实现 Servlet 接口的类只是具备拿到前端数据的能力,而不是前端数据类本身。HttpServletRequest 类其实是 ServletRequest 接口的子类,ServletRequest 只是一个通用协议的请求数据类,不仅限于实现 HTTP 协议。
有请求数据类就有响应数据类,HttpServletResponse 接口类就是返回给前端的数据类,同理它是 ServletResponse 接口的子类,ServletResponse 只是一个通用协议的请求数据类,不仅限于实现 HTTP 协议。
另外还有两个类:
ServletConfig接口:作用是从web.xml或者注解里,读取给当前这一个 Servlet 单独配置的参数。ServletContext接口(全局上下文):整个 Web 项目的全局对象,一个项目只有 1 份。作用是读取整个项目公共配置参数(所有 Servlet 共享),以及存放全局共享数据。
