前言
在弄懂Spring MVC的原理与架构先,不得不先弄清楚Sevlet与Tomcat,刚开始我甚至将两者弄混,本篇希望能够让uu了解并区分好两者。
正文
Tomcat:
开源的 Servlet 容器和 Web 容器:作为 Servlet 容器,它为 Servlet 提供运行环境,管理 Servlet 的生命周期,包括加载、初始化、调用服务方法以及销毁等。作为 Web 容器,它能够处理 Web 应用中的各种资源,如 HTML 页面、图片等,以及 Servlet 和 JSP。
负责执行和管理 Java Web 应用中的 Servlet 和 JSP:在 Java Web 应用中,Tomcat 能够加载和执行Servlet,根据客户端的请求调用相应的 Servlet 方法来处理请求。对于 JSP,Tomcat 会将其转换为 Servlet,然后像处理普通 Servlet 一样执行,从而实现动态内容的生成。
作为 Web 服务器接收客户端请求,执行后台逻辑并返回响应:当客户端向服务器发送 HTTP 请求时,Tomcat 作为 Web 服务器接收这些请求。然后,它会根据请求的内容,调用相应的 Servlet 或处理 JSP 页面,执行后台的业务逻辑。最后,根据逻辑的处理结果,生成相应的 HTTP 响应并返回给客户端。
Sevlet
纯Java 编写的一个服务器端程序:Servlet 是用 Java 语言编写的,运行在服务器端的程序,用于扩展服务器的功能,使其能够处理客户端的请求。
用来处理来自客户端的 HTTP 请求,并生成相应的 HTTP 响应:客户端通过 HTTP 协议向服务器发送请求,Servlet 接收到请求后,会根据请求的内容进行处理。处理完成后,生成相应的 HTTP 响应。这个过程使得 Servlet 能够根据不同的请求动态地生成内容。
配置方式
传统配置
配置Tomcat就不细说了,我发现有个大佬的文章讲的特别好,很详细(从0到1部署Tomcat和添加servlet(IDEA2024最新版详细教程)),至于Sevlet就很简单了,首先创建类去实现Servlet接口,然后在web.xml中配置
<servlet>
<servlet-name>sevlet1</servlet-name>
<servlet-class>com.test.sevlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sevlet1</servlet-name>
<url-pattern>/sevlet1</url-pattern>
</servlet-mapping>
这两个的作用在这里就是声明Servlet,以及告诉 Tomcat 哪个 URL 对应这个 Servlet"。
<servlet-class>
Servlet 的完整类名
<url-pattern>
浏览器访问的路径
得记住两个<servlet-name>
内的名字需完全一致
Springboot框架中
而我们目前使用 SpringBoot,就不用这么麻烦去配置 Tomcat 和 Sevlet,SpringBoot 把嵌入式 Tomcat 打成依赖 jar,应用启动时直接 new 一个 Tomcat 实例,监听端口、加载类,因此不需要外部 Tomcat ,如果要更换端口之类的,可以在 application.properties 修改;而 Sevlet 也不需要配置,自动配置由 DispatcherServletAutoConfiguratio 中的两个内部类 DispatcherServletConfiguration, DispatcherServletRegistrationConfiguration,前者是配置DispatcherServlet,后者是配置DispatcherServlet的注册类。什么是注册类?我们知道Servlet实例是要被添加(注册)到如tomcat这样的ServletContext里的,这样才能够提供请求服务。所以,DispatcherServletRegistrationConfiguration将生成一个Bean,负责将DispatcherServlet给注册到ServletContext中。(具体详看springboot mvc自动配置(一)自动配置DispatcherServlet和DispatcherServletRegistry)
篇后吐槽
我靠,这周,顶多就干了两天活,项目在上线部署阶段,我好像也确实干不了啥,这工资我拿的有点不好意思了。