news 2026/8/27 16:59:06

jpetstore-6 Spring MVC全链路解析:从DispatcherServlet到JSP视图渲染的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
jpetstore-6 Spring MVC全链路解析:从DispatcherServlet到JSP视图渲染的完整指南

jpetstore-6 Spring MVC全链路解析:从DispatcherServlet到JSP视图渲染的完整指南

【免费下载链接】jpetstore-6A web application built on top of MyBatis 3, Spring 3 and Stripes项目地址: https://gitcode.com/gh_mirrors/jp/jpetstore-6

jpetstore-6 是基于Spring MVC + MyBatis 3 + JSP构建的经典宠物店 Web 应用,是学习 Spring 全栈开发的绝佳样本。本文带你完整走一遍请求链路:从DispatcherServlet如何接管 URL、@Controller如何响应、Model如何传递数据,到最终 JSP 视图如何渲染,帮助新手快速建立对 Spring MVC 的整体认知。

🧭 一图看懂架构:三层各司其职

jpetstore-6 采用经典的「控制器 → 服务 → 数据映射」三层结构,Spring MVC 负责 Web 层,MyBatis 负责数据层:

代表文件职责
Web 层(Spring MVC)web/controllers 目录 下的 5 个控制器接收请求、调用服务、返回视图名
Service 层src/main/java/org/mybatis/jpetstore/service/业务逻辑与事务边界
Mapper 层(MyBatis)src/main/java/org/mybatis/jpetstore/mapper/SQL 映射,读写数据库
View 层(JSP)src/main/webapp/WEB-INF/jsp/页面渲染

所有 JSP 都被放在WEB-INF之下——这是刻意的安全设计:浏览器无法直接访问 JSP 文件,页面只能通过控制器转发渲染。

🚪 入口配置:web.xml 如何拉起 DispatcherServlet

一切从 web.xml 开始,核心只有两件事:

  1. 注册DispatcherServlet:Servlet 名为dispatcher,并指定初始化参数contextConfigLocation指向/WEB-INF/spring-mvc.xml
  2. URL 模式为/:意味着所有请求都会先进入 Spring MVC 的前门,由它统一分派。

同时还注册了ContextLoaderListener,用于加载根应用上下文 applicationContext.xml,其中配置了内嵌 HSQLDB 数据库、事务管理器和 MyBatis 的SqlSessionFactoryBean,并用<mybatis:scan>扫描 Mapper 包。根上下文管数据源和事务,Spring MVC 上下文管控制器——这就是典型的「父子双容器」结构。

🧩 MVC 上下文里只有 4 行关键配置

spring-mvc.xml 内容非常精简,每一行都值得新手记住:

  • <mvc:annotation-driven />:开启@Controller@GetMapping等注解驱动;
  • <context:component-scan base-package="org.mybatis.jpetstore.web.controllers" />:扫描并注册所有控制器 Bean;
  • InternalResourceViewResolver:前缀/WEB-INF/jsp/、后缀.jsp——视图名到 JSP 文件的映射规则就在这一行。

📮 请求路由:5 个控制器覆盖全站 URL

控制器都在org.mybatis.jpetstore.web.controllers包下,职责划分一目了然:

控制器前缀典型路由
RootController/根路径重定向到index.html
CatalogController/catalog浏览分类、商品、搜索
CartController/cart加购、改数量、删商品
AccountController/account登录、注册、修改资料
OrderController/order下单、确认、查看订单

🔄 走一遍真实链路:以"浏览商品分类"为例

以访问/catalog/viewCategory?categoryId=FISH为例,请求的完整旅程如下:

  1. 进入 DispatcherServletweb.xml/下的请求全部交给它;
  2. 映射到方法CatalogController类上标注@RequestMapping("/catalog"),方法viewCategory标注@GetMapping("/viewCategory"),Spring MVC 精确匹配到该方法,并用@RequestParamcategoryId注入参数;
  3. 调用 Service:控制器通过@Autowired注入的CatalogService查询商品列表和分类信息;
  4. 填充 Model:结果通过model.addAttribute("productList", ...)存入 Model,方法返回视图名字符串"catalog/Category"
  5. 视图解析InternalResourceViewResolver把视图名拼成/WEB-INF/jsp/catalog/Category.jsp,转发过去渲染;
  6. JSP 输出:Category.jsp 中用 JSTL 的<c:forEach>遍历productList,拼出带链接的商品表格,最后把 HTML 返回浏览器。

整个过程中控制器从不直接操作数据库,JSP从不直接写业务逻辑——分层边界非常干净,这也是本项目适合新手阅读的原因。

🔐 会话与状态:HttpSession 贯穿购物全流程

购物车和登录态都存放在HttpSession中:

  • CartController的私有方法getCart()负责"会话里没有购物车就建一个",加购、删除都围绕这个对象操作;
  • AccountController登录成功后,把账户信息包进内部类AccountSession存入会话,之后OrderController的每个下单接口都会先检查会话中是否已认证,未登录则重定向到登录页;
  • 下单确认后,控制器会清空购物车并返回订单详情视图。

这种"表单分步提交 + 会话暂存订单"的写法(OrderController中按表单来源只覆盖非空字段),是传统服务端渲染应用中处理多步表单的典型范式。

🚀 三步跑起来:最快的本地体验方式

git clone https://gitcode.com/gh_mirrors/jp/jpetstore-6 cd jpetstore-6 ./mvnw clean package ./mvnw cargo:run -P tomcat9

启动后访问http://localhost:8080/jpetstore/即可。更喜欢 Docker 的话,docker-compose.yaml 已配置好,一条docker compose up -d直接起飞。项目使用内嵌 HSQLDB,无需额外安装数据库——这也是它被广泛用作教学示例的原因。

📚 关键文件索引

文件说明
web.xmlDispatcherServlet 注册与 URL 映射
spring-mvc.xml控制器扫描与视图解析器
applicationContext.xml数据源、事务、MyBatis 配置
CatalogController.java最典型的"查询 + Model + 视图"写法
Category.jspJSTL 遍历 Model 数据的最小示例
ScreenTransitionIT.java端到端页面跳转集成测试

小结:jpetstore-6 用最小的配置展示了 Spring MVC 的完整闭环——web.xml定入口,spring-mvc.xml定规则,控制器接请求,Model 传数据,JSP 出页面。读懂这条链路,再去看 Spring Boot 项目里的自动配置,你会发现不过是在同一套原理之上省去了手动声明而已。

【免费下载链接】jpetstore-6A web application built on top of MyBatis 3, Spring 3 and Stripes项目地址: https://gitcode.com/gh_mirrors/jp/jpetstore-6

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 16:58:01

开源项目维护与社区运营要点

开源项目维护与社区运营要点 开源项目维护的核心是降低协作成本。贡献者需要知道项目接受什么问题、如何复现、谁会处理&#xff0c;以及何时可能得到答复。 让入口清楚 问题模板分别收集缺陷复现、功能建议和安全报告&#xff0c;避免敏感信息进入公开讨论。提交请求说明变更…

作者头像 李华
网站建设 2026/8/27 16:57:18

从跑通到出片:JoyAI-Echo 分钟级长视频生成完整上手指南

从跑通到出片&#xff1a;JoyAI-Echo 分钟级长视频生成完整上手指南 【免费下载链接】JoyAI-Echo JoyAI-Echo&#xff0c;这是一个独立的、仅用于推理的版本&#xff0c;旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。…

作者头像 李华
网站建设 2026/8/27 16:57:04

【必收藏】从0到1掌握AI智能体:大模型的进化与应用实践

前言 近两年&#xff0c;“AI 智能体&#xff08;AI Agent&#xff09;”成为技术圈和产业圈的热门词汇。很多人听过这个概念&#xff0c;却不一定清楚它和模型、大模型的区别&#xff0c;更不知道如何真正落地应用。今天我们就从基础定义、关键特征、应用场景&#xff0c;到架…

作者头像 李华