Java安全
Java 基础知识
01概述
02变量
03运算符
04程序控制语句
05数组
06面向对象编程
07代码练习
08重载
09作用域
10构造方法&构造器
11this
12包
13修饰符
14封装
15继承
16super
17覆盖&重写
18多态
19零钱通项目
20类变量&类方法
21抽象类
22接口
23内部类
24枚举
25泛型
26常用API
27lambda表达式
28正则表达式
29异常
30File&IO流
31日志技术
32多线程
33网络编程
01反射
02反序列化
03JVM
04JDBC
05RMI
06JRMP
07JNDI
08CDI
09JPA
10Servlet
11Filter
12MVC模型
13MVC框架
14类的加载机制
15Maven
16注解
17ORM
18CC链
19JNDI注入
Log4j2
-
+
首页
13MVC框架
## 概述 MVC 框架是基于MVC(Model-View-Controller)设计模式实现的软件框架,旨在简化 Web 应用开发,自动处理请求分发、数据绑定、视图渲染等通用流程,让开发者专注于业务逻辑(Model)、界面展示(View)和控制逻辑(Controller)的核心实现。 MVC 框架屏蔽了底层 Servlet/HTTP 的细节,提供了统一的开发规范和工具类,是现代 Web 开发的基础设施。在 Java 生态中,最主流的 MVC 框架是Spring MVC,此外还有早期的 Struts2 等。 ## 核心功能 无论哪种 MVC 框架,都围绕 MVC 模式提供以下核心能力,解决 Web 开发的共性问题: 请求映射:将 HTTP 请求(如/user/login)自动映射到对应的 Controller 方法(如UserController.login()),无需手动编写 Servlet 的doGet/doPost。 参数解析:自动将请求参数(如表单数据、URL 路径变量)绑定到 Controller 方法的参数(如String username),无需手动调用request.getParameter()。 模型传递:提供便捷的方式将 Model 中的数据(如查询结果)传递到 View(如 JSP、HTML),无需手动调用request.setAttribute()。 视图解析:根据逻辑视图名(如"login")自动定位到物理视图文件(如/WEB-INF/views/login.jsp),简化视图跳转。 拦截器支持:允许在请求处理的前后插入通用逻辑(如登录验证、日志记录),类似 Filter 但更灵活。 扩展功能:内置表单验证、文件上传、JSON 数据处理(前后端分离)等常用功能。 ## Spring MVC Spring MVC 是目前 Java Web 开发中最主流的 MVC 框架,基于 Spring 生态,与 Spring IoC、AOP 无缝集成,轻量且灵活,支持传统 JSP 视图和前后端分离(返回 JSON)两种模式。 ### 核心组件 | 组件 | 作用 | | ----------------- | ------------------------------------------------------------ | | DispatcherServlet | 前端控制器(核心):接收所有 HTTP 请求,协调其他组件完成处理,是整个框架的入口。本质是一个 Servlet。 | | HandlerMapping | 处理器映射:根据请求 URL 查找对应的 Controller 方法(如@RequestMapping("/user/login"))。 | | HandlerAdapter | 处理器适配器:调用 Controller 方法(适配不同类型的 Controller,如注解式、接口式)。 | | Controller | 控制器:业务控制逻辑的实现者(如@Controller标记的类),处理请求并返回模型或视图。 | | ModelAndView | 模型与视图:封装处理结果(Model 数据)和逻辑视图名(如"home"),由 Controller 返回。 | | ViewResolver | 视图解析器:将逻辑视图名解析为物理视图文件(如将"home"解析为/WEB-INF/views/home.jsp)。 | | Interceptor | 拦截器:在请求处理的各个阶段(如 Controller 执行前 / 后)插入自定义逻辑(如登录验证)。 | ### 工作流程 用户发送请求:如访问`http://localhost:8080/user/login`。 DispatcherServlet 接收请求:作为前端控制器,拦截所有请求。 HandlerMapping 查找 Controller:根据 URL(/user/login)找到对应的 Controller 方法(如UserController.login())。 HandlerAdapter 调用 Controller:适配并执行 Controller 方法,传入解析后的请求参数(如用户名、密码)。 Controller 处理业务:调用 Service 层(Model)处理业务(如验证登录),返回ModelAndView(包含用户数据和逻辑视图名"home")。 ViewResolver 解析视图:将逻辑视图名"home"解析为物理路径(如/WEB-INF/views/home.jsp)。 渲染视图:将 Model 中的数据(如用户名)填充到视图,生成 HTML 响应。 DispatcherServlet 返回响应:将渲染后的视图返回给用户。 ### 代码示例 > 定义Controller ```java import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; // 标记为控制器 @Controller @RequestMapping("/user") // 统一URL前缀 public class UserController { // 处理登录请求:URL为/user/login,请求方法为POST @RequestMapping(value = "/login", method = RequestMethod.POST) public String login( // 自动绑定请求参数(表单中的username和password) @RequestParam String username, @RequestParam String password, // 用于传递数据到视图 Model model) { // 调用Service(Model)验证登录(实际中应注入Service) boolean success = "admin".equals(username) && "123456".equals(password); if (success) { model.addAttribute("username", username); // 向视图传递数据 return "home"; // 返回逻辑视图名(将由ViewResolver解析) } else { model.addAttribute("error", "用户名或密码错误"); return "login"; // 登录失败,返回登录页 } } } ``` > 配置视图解析器(Spring 配置文件) ```xml <!-- 视图解析器:将逻辑视图名解析为JSP文件 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <!-- 前缀:视图文件所在目录 --> <property name="suffix" value=".jsp"/> <!-- 后缀:文件扩展名 --> </bean> ``` 当 Controller 返回"home"时,解析为/WEB-INF/views/home.jsp; 返回"login"时,解析为/WEB-INF/views/login.jsp。 ## 其他框架 | 框架名称 | 特点 | | -------- | ------------------------------------------------------------ | | Struts2 | 早期主流 MVC 框架,基于 Filter 实现,提供拦截器、表单验证等功能,配置较繁琐(依赖 XML)。 | | Struts1 | Struts1 是 Apache 推出的早期Java Web MVC 框架,设计理念落后于技术的发展:过度依赖 XML 配置、程安全隐患等问题。 | | JSF | Java EE 官方 MVC 框架,基于组件化开发(如\<h:inputText>),适合快速开发简单页面。 |
毛林
2025年10月27日 20:56
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码