定义:Tomcat是一个开源的轻量级Web(Http)服务器和Servlet容器。它实现了Java Servlet等Java EE规范的核心功能,常用于部署和运行Java Web应用程序 。换言之,Tomcat就是一个严格遵循Servlet规范开发出来的、可以独立安装和运行的Java Web服务器/Servlet容器核心功能:
安装与版本对应:
tomcat官网:Apache Tomcat®

目录结构:

Servlet是Java语言编写的、运行在服务器端的程序,它遵循一套标准的API规范(Tomcat是这套规范的一个具体实现/容器,并提供了让Servlet与前端交互的运行时环境)
创建项目/配置文件:
(1)在IEDA中创建Maven项目
(2)在pom.xml文件中添加servlet依赖(置于< project >< /project >标签下)
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<!--servlet依赖版本应与jdk和tomcat的版本相匹配-->
<version>6.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>(3)在main路径下创建webapp/Web-INF/web.xml,在xml文件中添加以下内容
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>(4)下载插件:Smart Tomcat(为了方便启动项目)

API示例:
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
//设置访问路径(url)
@WebServlet("/method")
//继承HttpServlet并重写doGet和doPost方法
public class MethodServlet extends HttpServlet {
//接收method=post的请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
System.out.println("doPost");
resp.setContentType("text/html; charset=utf-8");
resp.getWriter().write("doPost");
}
//接收method=put的请求
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
System.out.println("doPut");
resp.setContentType("text/html; charset=utf-8");
resp.getWriter().write("doPut");
}
//接收method=delete的请求
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
System.out.println("doDelete");
resp.setContentType("text/html; charset=utf-8");
resp.getWriter().write("doDelete");
}
}
定义:Servlet 生命周期由 Web容器(如Tomcat)管理,包含加载、初始化、处理请求和销毁四个阶段。每个阶段对应特定的方法调用,开发者可通过重写这些方法实现自定义逻辑
init(ServletConfig config)方法,在整个servlet实例的生命周期中仅调用一次,主要作用是读取配置和资源加载。若初始化失败,抛出
ServletException,Servlet不会被加入可用队列service(ServletRequest req, ServletResponse res)方法。service() 方法根据
HTTP请求类型(get/post)调用doGet()或doPost()Servlet是Java EE规范中处理Web请求的核心组件,但随着应用复杂度提升,Servlet的直接使用显得笨重。Spring框架通过一系列抽象和扩展,简化了企业级应用开发
我们可以用一个非常形象的比喻来贯穿始终:建造一座房子 第一阶段:Servlet 时代 - 自己烧砖砌墙
目标:建造一个能遮风挡雨的房子(一个能处理HTTP请求的Web应用)你的工作状态:
核心特点:
总结:Servlet提供了Web开发的基础能力,但开发效率极低,代码冗余且难以维护
第二阶段:Spring 时代 - 使用预制件和设计图纸
目标:用更高效、更标准化的方式建造一个结构更好、更易扩展的房子
你的工作状态:
核心特点:
总结:Spring框架通过IoC/DI和AOP等理念,解决了代码耦合和重复劳动问题,但引入了显著的配置复杂度
Spring Boot 1.0.0正式发布于2014年4月1日,标志着该框架的首次稳定版本发布。SpringBoot基于Spring Framework 4进行设计,显著减少了开发者的配置工作量,彻底消除了Spring的配置地狱
官方描述:Spring Web MVC是基于Servlet API构建的原始Web框架,并从一开始就在 Spring框架中。正式名称“Spring Web MVC”, 来自其源模块的名称(spring-webmvc),但它通常被称为“Spring MVC”

MVC的起源与发展:MVC(Model-View-Controller)模式最初由挪威计算机科学家Trygve Reenskaug于1978年在施乐帕克研究中心(Xerox PARC)提出,目的是为Smalltalk编程语言设计用户界面。其核心思想是将应用程序的逻辑分为三个独立组件:
Spring MVC与MVC的关系:Spring MVC是MVC模式在Spring框架中的具体化,同时扩展了传统MVC的功能以适应现代Web开发需求
Postman:主要用于 API 的开发和测试。它提供了一个用户友好的界面,支持发送HTTP请求、管理请求历史、自动化测试以及团队协作
Fiddler:是一个网络调试代理工具,主要用于监控和分析HTTP/HTTPS流量。它可以捕获设备与服务器之间的所有请求和响应,支持修改请求、重放请求以及性能分析
作用:是Spring MVC中最核心、最基础的注解之一,用于将HTTP请求映射到具体的方法上注解级别:类+方法
@RequestMapping("/HelloController")
//@RestController声明该类是一个Spring MVC控制器
@RestController
public class HelloController {
//0.不接收参数
//作为 方法注解 时,@RequestMapping(value = "/hello",method = RequestMethod.GET)等同于@GetMapping(value = "/hello")
//设置返回的响应是json格式,produces = "application/json"
@RequestMapping(value = "/hello",method = RequestMethod.GET,produces = "application/json")
public String hello() {
return "{\"Hello\" : World}";
}
//1.一个参数
@RequestMapping("/receiveAge1")
//不传参或者传递的参数名不匹配时默认为null
public String receiveAge1(Integer age) {
return "接收到参数 age:" + age;
}
@RequestMapping("/receiveAge2")
//不传参或者传递的参数名不匹配时尝试设置为null,但int无法被设置为null,所以抛出IllegalStateException
public String receiveAge2(int age) {
return "接收到参数 age:" + age;
}
//2.接收数组
@RequestMapping("/receiveArray")
public String receiveArray(String[] array) {
return "接收到参数 array:" + Arrays.toString(array);
}
//3.接收对象,需要保证传递的参数名称和数量与Java对象保持一致
@RequestMapping("/receivePerson")
public String receivePerson(Person person) {
return "接收到参数 person:" + person;
}
}
作用:将HTTP请求体中的json数据绑定到Java对象(方法注解)注解级别:方法
@RequestMapping("/receivePerson")
//@RequestBody接收JSON格式的数据
public String receivePerson(@RequestBody Person person) {
return "接收到参数 person:" + person;
}

作用:是Spring MVC框架中从HTTP请求中提取参数/查询字符串的注解,主要用于将请求参数绑定到控制器方法的参数上注解级别:方法
@RequestMapping("/receiveRename")
//@RequestParam将url中key=name的查询字符串绑定到控制器的userName参数上
//required = false设置该参数为非必传(默认为true,必传)
public String receiveRename(@RequestParam(value = "name",required = false) String userName) {
return "接收到参数name:" + userName;
}
注意:需要接收多个同名参数时(如param=value1¶m=value2),直接绑定到List类型需通过该注解明确声明
@RequestMapping("/receiveList1")
public String receiveList1(ArrayList<String> list) {
//返回的list为空
return "接收到参数 list:" + list;
}
@RequestMapping("/receiveList2")
public String receiveList2(@RequestParam(required = false) ArrayList<String> list) {
//正确返回
return "接收到参数 list:" + list;
}
@RequestMapping("/receiveList3")
public String receiveList3(List<String> list) {
//报错
return "接收到参数 list:" + list;
}
后端报错:java.lang.IllegalStateException: No primary or single unique constructor found for interface java.util.List。receiveList3方法使用List< String >接口类型而非具体实现类。Spring虽然支持接口类型参数绑定,但需要满足特定条件:
报错根本原因:Spring尝试实例化List接口失败(接口不可实例化)

作用:用于从URL路径中提取变量值并绑定到方法的参数上注解级别:方法
@RequestMapping("/receivePath/{article}/{blog}")
//required = false设置该参数为非必传(默认为true,必传)
public String receivePath(@PathVariable(value = "article",required = false)Integer title,@PathVariable(value = "blog",required = false)String content) {
return "接收到参数 article:" + title + " blog:" + content;
}
作用:用于处理 HTTP 请求中的 multipart/form-data 类型数据,通常用于文件上传或同时上传文件和其他表单字段的场景注解级别:方法
@RequestMapping("/receiveFile")
public String receiveFile(@RequestPart(value = "file",required = false) MultipartFile imgFile,@RequestParam(value = "userName",required = false) String name) {
//返回原始的文件名
return "用户:" + name+ ",接收到文件:" +imgFile.getOriginalFilename();
}
Controller
作用:是Spring MVC中的核心注解,用于标记一个类作为Web请求的处理器(声明一个类是一个Spring MVC控制器),负责处理HTTP请求并返回视图注解级别:类ResponseBody
作用:指示方法返回值应直接写入HTTP响应体,而非通过视图解析器渲染注解级别:类+方法@RequestMapping("/ControllerResponse")
@Controller
public class ControllerResponse {
//返回视图
@RequestMapping("/HTMLView")
public String HTMLView(){
return "/show.html";
}
//返回数据
@ResponseBody
@RequestMapping("/HTMLData")
public String HTMLData(){
return "/show.html";
}
}

RestController
作用:是Spring MVC中的一个组合注解,它结合了@Controller和@ResponseBody的功能,标记的类所有方法返回值默认直接作为 HTTP 响应体(JSON/XML 等格式),无需额外视图渲染注解级别:类
Gitee地址:九转苍翎 本文源码:SpringBoot_Demo1