Spring MVC(Model-View-Controller)是 Spring 框架 提供的 基于 Java 的 Web 框架,用于构建 可扩展、可维护的 Web 应用。
它基于 MVC 设计模式,将应用逻辑分离为 模型(Model)、视图(View)和控制器(Controller),使代码更清晰、易于维护。
Spring MVC 主要组件
1. DispatcherServlet(前端控制器)
• 作用:拦截所有 HTTP 请求,并将其分发给相应的处理器(Controller)。
• 位置:在 web.xml 或 SpringBootApplication 启动类中配置。
2. Controller(控制器)
• 作用:接收用户请求,调用 Service 处理业务逻辑,并返回数据或视图。
• 注解:使用 @Controller 或 @RestController 标注。
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String sayHello() {
return "Hello, Spring MVC!";
}
}
3. Model(模型)
• 作用:负责存储和处理数据,可以是 Java 对象,也可以是数据库实体。
• 传递方式:Model、ModelMap、ModelAndView。
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/info")
public String getUserInfo(Model model) {
model.addAttribute("username", "Hannah");
return "userInfo"; // 渲染 userInfo.jsp / userInfo.html
}
}
4. View(视图)
• 作用:负责显示数据,支持 JSP、Thymeleaf、Freemarker 等模板引擎。
• 返回方式:
• 直接返回视图名称(return "viewName";)。
• @ResponseBody 直接返回 JSON 数据(适用于 @RestController)。
5. ViewResolver(视图解析器)
• 作用:将 Controller 返回的逻辑视图名解析为具体的视图页面。
• 示例:配置 Thymeleaf 解析器:
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
6. HandlerMapping(处理器映射器)
• 作用:根据请求 URL,找到对应的 Controller 方法。
7. Interceptor(拦截器)
• 作用:拦截请求,执行 权限验证、日志记录 等逻辑。
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.println("请求被拦截!");
return true; // 返回 false 拦截请求
}
}
Spring MVC 处理流程
1. 用户请求 → DispatcherServlet
2. 找到对应的 Controller(HandlerMapping)
3. 执行 Controller 方法(调用 Service 层处理业务)
4. 返回 Model 数据(或 JSON)
5. 视图解析器渲染 View
6. 返回 HTTP 响应
Spring MVC 与 Spring Boot
• Spring MVC:传统 XML 或 Java 配置,手动配置 DispatcherServlet、视图解析器等。
• Spring Boot:简化配置,使用 @SpringBootApplication 自动配置 Spring MVC。
浙公网安备 33010602011771号