发布时间:2026/6/29 22:00:27
MVC快速入门
MVC英文是Model View Controller是模型(model)视图(view)控制器(controller)的缩写一种软件设计规范本质上也是一种解耦。Model模型是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View视图是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。Controller控制器是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据控制用户输入并向模型发送数据。什么是SpringMVC而Spring Web MVC 则是一种基于Java 的实现了Web MVC 设计模式的请求驱动类型的轻量级Web 框架即使用了MVC 架构模式的思想将 web 层进行职责解耦基于请求驱动指的就是使用请求-响应模型框架的目的就是为了简化开 发Spring Web MVC 也是要简化我们日常Web 开发的。说白了Spring MVC 就是 【接收请求】【响应数据】Spring MVC 下一般把后端项目分为 Service 层处理业务、Dao 层数据库操作、Entity 层实体类、Controller 层(控制层返回数据给前台页面)。常用组件前端控制器DispatcherServlet接收用户请求给用户返回结果。处理器映射器HandlerMapping根据请求的url路径通过注解或者xml配置寻找匹配的Handler。处理器适配器HandlerAdapterHandler 的适配器调用 handler 的方法处理请求。处理器Handler执行相关的请求处理逻辑并返回相应的数据和视图信息将其封装到ModelAndView对象中。视图解析器ViewResolver将逻辑视图名解析成真正的视图View。视图View接口类实现类可支持不同的View类型JSP、FreeMarker、Excel等MVC案例基于webxml示例源码点击这里maven引入xmlproject xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.seven/groupId artifactIdspring-demo/artifactId version1.0-SNAPSHOT/version /parent artifactId07-spring-mvc-helloworld/artifactId packagingwar/packaging name07-spring-mvc-helloworld Maven Webapp/name urlhttp://maven.apache.org/url properties maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target spring.version5.3.37/spring.version servlet.version4.0.1/servlet.version /properties dependencies dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version${spring.version}/version /dependency dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version${servlet.version}/version /dependency dependency groupIdjavax.servlet/groupId artifactIdjstl/artifactId version1.2/version /dependency dependency groupIdtaglibs/groupId artifactIdstandard/artifactId version1.1.2/version /dependency /dependencies build finalName07-spring-mvc-helloworld/finalName /build /project业务代码编写entity的User类javaData AllArgsConstructor public class User { private String name; private int age; }dao层javaRepository public class UserDaoImpl { public ListUser findUserList() { return Collections.singletonList(new User(seven, 18)); } }service层javaService public class UserServiceImpl { Autowired private UserDaoImpl userDao; public ListUser findUserList() { return userDao.findUserList(); } }controller层javaController public class UserController { Autowired private UserServiceImpl userService; RequestMapping(/user) public ModelAndView list(HttpServletRequest request, HttpServletResponse response) { ModelAndView modelAndView new ModelAndView(); modelAndView.addObject(dateTime, new Date()); modelAndView.addObject(userList, userService.findUserList()); modelAndView.setViewName(userList); // views目录下userList.jsp return modelAndView; } }webapp下的web.xmlxml!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 xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd version3.1 display-nameArchetype Created Web Application/display-name servlet servlet-namespringmvc-demo/servlet-name servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class !-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -- init-param param-namecontextConfigLocation/param-name param-valueclasspath:springmvc.xml/param-value /init-param load-on-startup1/load-on-startup /servlet servlet-mapping servlet-namespringmvc-demo/servlet-name url-pattern//url-pattern /servlet-mapping filter filter-nameencodingFilter/filter-name filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param init-param param-nameforceEncoding/param-name param-valuetrue/param-value /init-param /filter filter-mapping filter-nameencodingFilter/filter-name url-pattern/*/url-pattern /filter-mapping /web-appspringmvc.xmlweb.xml中配置初始化参数contextConfigLocation路径是classpath:springmvc.xml因此文件直接创建在resources目录下xml?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/context xmlns:mvchttp://www.springframework.org/schema/mvc xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd !-- 扫描注解 -- context:component-scan base-packagecom.seven.springmvchelloworld/ !-- 静态资源处理 -- mvc:default-servlet-handler/ !-- 开启SpringMVC注解 -- mvc:annotation-driven/ !-- 可以代替下边的配置实际开发中一般使用上面的方式开启注解-- !--注解映射器 -- !--bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping/-- !--注解适配器 -- !--bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter/-- !-- 视图解析器 -- bean idjspViewResolver classorg.springframework.web.servlet.view.InternalResourceViewResolver property nameviewClass valueorg.springframework.web.servlet.view.JstlView/ property nameprefix value/views// property namesuffix value.jsp/ /bean /beansJSP视图创建userList.jspjava% page contentTypetext/html;charsetUTF-8 languagejava % % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % !DOCTYPE html html langzh-CN head meta charsetutf-8 meta http-equivX-UA-Compatible contentIEedge meta nameviewport contentwidthdevice-width, initial-scale1 titleUser List/title !-- Bootstrap -- link relstylesheet href//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css /head body div classcontainer c:if test${!empty userList} table classtable table-bordered table-striped tr thName/th thAge/th /tr c:forEach items${userList} varuser tr td${user.name}/td td${user.age}/td /tr /c:forEach /table /c:if /div /body /html之后就是使用tomcat部署测试了这块就不说了纯注解版无需配置xml文件依靠注解和配置类完成配置注意需要注意满足sevlet3.0规范具体源码点击这里这个不做过多讲解真实项目的用得较少。因为若是老项目就是基于webxml的若是新项目则直接上springboot了。Spring MVC响应请求直接返回ModelAndView对象ModelAndView对象将数据模型和视图信息封装在一起。javaRequestMapping(/order) public ModelAndView getOrderPage() { // 1. 创建ModelAndView对象 ModelAndView mav new ModelAndView(); // 2. 添加模型数据相当于model.addAttribute Order order orderService.getLatestOrder(); mav.addObject(currentOrder, order); mav.addObject(pageTitle, 订单详情); // 3. 设置视图名称 mav.setViewName(orderDetail); // 视图解析器会处理为完整路径 return mav; }返回视图名称页面跳转该方法返回userDetail.jsp并可以在页面上通过${user}获取数据javaController RequestMapping(/user) public class UserController { RequestMapping(/detail) public String getUserDetail(Model model) { // 模拟查询用户信息 User user userService.findUserById(1); // 将数据添加到Model中会自动存入请求域 model.addAttribute(user, user); // 返回逻辑视图名视图解析器会将其拼接为 /WEB-INF/views/userDetail.jsp return userDetail.jsp; } }使用Map传递数据该方法返回userDetail.jsp并可以在页面上通过${user}获取数据javaController RequestMapping(/user) public class UserController { RequestMapping(/detail) public String getUserDetail(MapString, User map) { // 模拟查询用户信息 User user userService.findUserById(1); // 将数据添加到Model中会自动存入请求域 map.addAttribute(user, user); // 返回逻辑视图名视图解析器会将其拼接为 /WEB-INF/views/userDetail.jsp return userDetail.jsp; } }返回void这种方式绕过了SpringMVC的视图解析提供了最大灵活性但需要自行处理响应细节与Servlet API耦合度高一般不推荐作为主要方式javaRequestMapping(/raw) public void handleRawResponse(HttpServletResponse response) throws IOException { // 设置响应类型和编码 response.setContentType(text/plain; charsetUTF-8); // 直接通过HttpServletResponse输出 PrintWriter out response.getWriter(); out.write(这是一个直接输出的响应); out.flush(); }重定向跳转redirect:会让浏览器地址栏变为新的URL。注意重定向是两次请求原始请求域request scope中的数据会丢失。若要传递参数可使用 RedirectAttributesjavaPostMapping(/submit) public String submitForm(LoginForm form) { // ... 处理表单提交逻辑如保存数据 boolean isSuccess loginService.processLogin(form); // 重定向到另一个地址防止用户刷新浏览器导致表单重复提交 return redirect:/login/success; // 浏览器会向 /login/success 发起新请求 } GetMapping(/success) public String successPage() { return success; // 展示成功页面 }

相关新闻

襄阳外卖餐饮行业调研:中小美团小店选客服外包,培训体系远比低价更关键
2026/6/29 22:00:27

襄阳外卖餐饮行业调研:中小美团小店选客服外包,培训体系远比低价更关键

一、本地餐饮商家外包普遍陷入 “低价误区”我走访大量襄阳做美团外卖的个体户店主后发现,绝大多数人挑选客服外包时,第一筛选条件是报价高低,优先选单价最低的服务商,后续运营很容易出现一系列连锁问题:低价团队坐席人…

阅读更多
Windows本地训练LoRA模型完全指南:从环境配置到效果调优
2026/6/29 21:00:26

Windows本地训练LoRA模型完全指南:从环境配置到效果调优

Windows本地训练LoRA模型完全指南:从环境配置到效果调优 一、前言:为什么自己训练LoRA LoRA(Low-Rank Adaptation)是目前最轻量的模型微调方案。相比动辄几十GB的全量模型训练,LoRA只需几百MB的附加文件,就…

阅读更多
2026深度实测|Copilot高性价比替代方案最全评测,30天轮换实战结论
2026/6/29 21:00:26

2026深度实测|Copilot高性价比替代方案最全评测,30天轮换实战结论

Microsoft Copilot 在行内补全、轻量代码提示上的稳定性一直值得肯定,非常适合日常简单编码、单行语法纠错场景。但面对复杂业务逻辑、多文件联动开发、本土化中文需求适配,以及长期订阅成本问题,我一直在寻找更适配国内开发者的替代工具。我…

阅读更多
GEO代理总部提供售后支持吗
2026/6/29 23:00:27

GEO代理总部提供售后支持吗

售后支持是代理合作关系中最关键的一环。代理商在前方签下客户,如果总部的售后支撑跟不上,客户效果不好、续费不上来,代理商的长期利益就会受到直接损害。那么,GEO代理总部到底提供什么样的售后支持?售后支持的三个层次…

阅读更多
【实战指南】从零部署垃圾分类AI应用:TensorFlow 2.3模型训练与PyQt5界面开发全流程
2026/6/29 23:00:27

【实战指南】从零部署垃圾分类AI应用:TensorFlow 2.3模型训练与PyQt5界面开发全流程

1. 环境配置与数据准备 第一次接触垃圾分类AI项目时,我被8万张图片的数据集吓到了。但实际操作后发现,只要环境搭对了,后面的流程就像搭积木一样简单。建议使用Anaconda创建独立环境,避免版本冲突。我常用的配置是Python 3.7 Ten…

阅读更多
抽象管理化技术领域模型与通用语言
2026/6/29 23:00:27

抽象管理化技术领域模型与通用语言

抽象管理化技术领域模型与通用语言:构建数字时代的沟通桥梁 在数字化转型的浪潮中,技术领域模型与通用语言成为企业高效协作的核心工具。抽象管理化技术通过提炼复杂系统的共性,形成可复用的模型框架,而通用语言则打破部门壁垒&a…

阅读更多
从零到一:手把手教你构建欧奈尔RPS曲线实战系统
2026/6/29 23:00:27

从零到一:手把手教你构建欧奈尔RPS曲线实战系统

1. 为什么你需要欧奈尔RPS曲线系统 如果你经常研究股票走势,一定听说过欧奈尔RPS曲线这个神奇的工具。简单来说,RPS(Relative Price Strength)就是股价相对强度指标,它能帮你快速找出市场上表现最强势的股票。我刚开始…

阅读更多
告别Beat Saber管理烦恼:BSManager一站式解决方案
2026/6/29 23:00:27

告别Beat Saber管理烦恼:BSManager一站式解决方案

告别Beat Saber管理烦恼:BSManager一站式解决方案 【免费下载链接】bs-manager An all-in-one tool that lets you easly manage BeatSaber versions, maps, mods, and even more. 项目地址: https://gitcode.com/gh_mirrors/bs/bs-manager 还在为Beat Saber…

阅读更多
如何在Windows、macOS和Linux上免费畅玩Switch游戏:Ryujinx模拟器实战指南
2026/6/29 22:00:27

如何在Windows、macOS和Linux上免费畅玩Switch游戏:Ryujinx模拟器实战指南

如何在Windows、macOS和Linux上免费畅玩Switch游戏:Ryujinx模拟器实战指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验任天堂Switch的精彩游戏世界却不想…

阅读更多
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告
2026/6/28 0:00:11

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

阅读更多
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?
2026/6/28 0:00:11

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

阅读更多
蒙特卡洛离策略强化学习:工业场景下的无偏评估与稳定训练
2026/6/29 0:00:22

蒙特卡洛离策略强化学习:工业场景下的无偏评估与稳定训练

1. 这不是教科书里的“蒙特卡洛离策略”,而是我在强化学习项目里亲手调通的那套逻辑“Monte Carlo Off-Policy Explained”——看到这个标题,别急着去翻Sutton那本绿皮书第5章。我带过三个工业级强化学习落地项目,从智能仓储调度到金融风控策…

阅读更多
Java开发者转型安全开发:从代码审计到自动化工具实践
2026/6/29 0:00:22

Java开发者转型安全开发:从代码审计到自动化工具实践

1. 转型背景与核心驱动力最近几年,身边不少做Java后端开发的朋友,都开始或多或少地关注起安全开发这个方向。我自己也是从写了七八年Java业务代码,一步步转向了安全领域,现在主要做代码审计和自动化安全工具开发。这个转变不是一时…

阅读更多
HyperFrames 设计、品味与借鉴
2026/6/29 0:00:22

HyperFrames 设计、品味与借鉴

调研对象:https://github.com/heygen-com/hyperframes 核心判断:HyperFrames 最值得学习的不是“用 HTML 渲染视频”这个技术点,而是它把“让 Agent 生成视频”设计成了一套可操作、可验证、可复现的生产协议。 一句话记住:视频生…

阅读更多
GIT修改用户名
2026/6/28 5:47:46

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/28 14:44:43

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/28 14:44:39

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多