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

📅 2026/8/27 16:59:14
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-6jpetstore-6 是基于Spring MVC MyBatis 3 JSP构建的经典宠物店 Web 应用是学习 Spring 全栈开发的绝佳样本。本文带你完整走一遍请求链路从DispatcherServlet如何接管 URL、Controller如何响应、Model如何传递数据到最终 JSP 视图如何渲染帮助新手快速建立对 Spring MVC 的整体认知。 一图看懂架构三层各司其职jpetstore-6 采用经典的「控制器 → 服务 → 数据映射」三层结构Spring MVC 负责 Web 层MyBatis 负责数据层层代表文件职责Web 层Spring MVCweb/controllers 目录 下的 5 个控制器接收请求、调用服务、返回视图名Service 层src/main/java/org/mybatis/jpetstore/service/业务逻辑与事务边界Mapper 层MyBatissrc/main/java/org/mybatis/jpetstore/mapper/SQL 映射读写数据库View 层JSPsrc/main/webapp/WEB-INF/jsp/页面渲染所有 JSP 都被放在WEB-INF之下——这是刻意的安全设计浏览器无法直接访问 JSP 文件页面只能通过控制器转发渲染。 入口配置web.xml 如何拉起 DispatcherServlet一切从 web.xml 开始核心只有两件事注册DispatcherServletServlet 名为dispatcher并指定初始化参数contextConfigLocation指向/WEB-INF/spring-mvc.xmlURL 模式为/意味着所有请求都会先进入 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-packageorg.mybatis.jpetstore.web.controllers /扫描并注册所有控制器 BeanInternalResourceViewResolver前缀/WEB-INF/jsp/、后缀.jsp——视图名到 JSP 文件的映射规则就在这一行。 请求路由5 个控制器覆盖全站 URL控制器都在org.mybatis.jpetstore.web.controllers包下职责划分一目了然控制器前缀典型路由RootController/根路径重定向到index.htmlCatalogController/catalog浏览分类、商品、搜索CartController/cart加购、改数量、删商品AccountController/account登录、注册、修改资料OrderController/order下单、确认、查看订单 走一遍真实链路以浏览商品分类为例以访问/catalog/viewCategory?categoryIdFISH为例请求的完整旅程如下进入 DispatcherServletweb.xml把/下的请求全部交给它映射到方法CatalogController类上标注RequestMapping(/catalog)方法viewCategory标注GetMapping(/viewCategory)Spring MVC 精确匹配到该方法并用RequestParam把categoryId注入参数调用 Service控制器通过Autowired注入的CatalogService查询商品列表和分类信息填充 Model结果通过model.addAttribute(productList, ...)存入 Model方法返回视图名字符串catalog/Category视图解析InternalResourceViewResolver把视图名拼成/WEB-INF/jsp/catalog/Category.jsp转发过去渲染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),仅供参考