【Spring MVC】MVC设计模式的Java Web框架

Spring

MVC框架简介:

谈及Spring MVC框架之前,我们先了解一下MVC框架是什么:
MVC是一个经典的设计模式,我们可以把他理解为将整个Web应用程序分为三部分:

MVC三层架构

  1. Model(模型):负责处理应用程序的数据逻辑。这部分包含数据对象和与数据库交互的代码。
  2. View(视图):负责展示数据。视图层从模型中获取数据并生成用户界面。常用的视图技术包括JSP、Thymeleaf等。
  3. Controller(控制器):负责处理用户请求并协调模型和视图的交互。控制器接收HTTP请求,调用模型层来处理数据,然后选择合适的视图来展示结果。
    图片转载自:https://www.longkui.site/program/java/article0924/1031/
    图片转载自:谈一谈MVC与三层架构

MVC流行框架

  1. Spring MVC - Java平台上的主流Web框架。
  2. ASP.NET MVC - 微软的.NET平台上的MVC框架。
  3. Ruby on Rails - 基于Ruby语言的MVC框架。
  4. Django - 基于Python的高效Web框架。
  5. Laravel - 基于PHP的现代化Web框架。
  6. Angular - 虽然主要是前端框架,但遵循了MVC模式。
  7. Express.js(与MVC模式结合) - Node.js的轻量级Web框架,通常与MVC架构结合使用。
  8. CakePHP - 一个经典的PHP MVC框架。

MVC框架好处:

  1. 分离关注点:将应用程序的业务逻辑(Model)、用户界面(View)、和请求处理(Controller)分离,便于独立开发、测试和维护。
  2. 可重用性:由于不同层次的代码相对独立,开发者可以重复使用Model或View组件,减少重复代码。
  3. 提高可维护性:清晰的分层结构使得代码更易于理解和维护,当某一层发生变化时,其他层受影响较小。
  4. 并行开发:开发团队可以并行工作,不同的开发人员可以同时处理Model、View、和Controller部分,提高开发效率。
  5. 易于测试:由于业务逻辑与用户界面分离,单独测试每个部分变得更加简单,特别是对Model和Controller层的单元测试。
  6. 灵活性和扩展性:MVC架构使得应用程序更容易扩展和适应新的需求或技术。

Spring MVC框架

SpringMVC是Spring的一个模块,是一个基于MVC设计模式的web框架。
这里我们用一张图来理解它的工作机制
Spring MVC工作机制

组件分析

  1. 前端控制器(DispatcherServlet,默认配置)
  • 作用:负责接收所有HTTP请求,并将其分发给相应的处理器。它通过协调其他组件来处理请求和响应,实现了请求处理流程的集中管理和解耦。
  1. 处理器映射器(Handler Mapping,默认配置)
  • 作用:根据请求的URL、HTTP方法等信息,将请求映射到对应的处理器(控制器)方法。它将请求的路由逻辑与具体的处理器分离。
  1. 处理器适配器(Handler Adapter,默认配置)
  • 作用:根据不同类型的处理器执行请求处理逻辑。它提供了一个统一的接口,允许前端控制器以一致的方式调用不同类型的处理器。
  1. 处理器(Controller,需开发)
  • 作用:负责处理业务逻辑并返回数据或视图。开发者需要根据需求实现控制器类和方法,以处理具体的用户请求和业务逻辑。

处理器开发

在Spring MVC中,处理器(Controller)是应用程序的核心组件之一,它负责处理用户的请求,执行业务逻辑,并返回适当的响应。处理器的开发通常涉及以下几个方面:

1. 定义处理器

处理器通常是一个普通的Java类,被标记为控制器组件。Spring MVC中的控制器类使用@Controller注解标识。

示例:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {

    @RequestMapping(value = "/greet", method = RequestMethod.GET)
    @ResponseBody
    public String greet() {
        return "Hello, World!";
    }
}

2. 处理请求

处理器方法负责接收请求,处理数据,并返回响应。方法可以使用各种注解来映射请求的URL、HTTP方法等。

  • @RequestMapping:映射请求路径到控制器方法,可以指定请求的HTTP方法(GET、POST等)。
  • @GetMapping:用于处理HTTP GET请求,@RequestMapping(method = RequestMethod.GET)的简写。
  • @PostMapping:用于处理HTTP POST请求,@RequestMapping(method = RequestMethod.POST)的简写。

示例:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestBody;

@Controller
public class MyController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello(@RequestParam(name = "name", defaultValue = "Guest") String name) {
        return "Hello, " + name;
    }

    @PostMapping("/submit")
    @ResponseBody
    public String submit(@RequestBody String data) {
        return "Received: " + data;
    }
}

3. 处理请求参数

处理器方法可以通过方法参数获取请求参数。Spring MVC支持多种方式来绑定请求参数到方法参数。

  • @RequestParam:绑定请求参数到方法参数。
  • @PathVariable:绑定URL模板中的变量到方法参数。
  • @RequestBody:将请求体的内容绑定到方法参数(通常用于处理JSON或XML数据)。

示例:

import org.springframework.web.bind.annotation.PathVariable;

@Controller
public class MyController {

    @GetMapping("/users/{id}")
    @ResponseBody
    public String getUser(@PathVariable("id") int userId) {
        // 处理用户ID并返回用户信息
        return "User ID: " + userId;
    }
}

4. 返回视图或数据

处理器方法可以返回不同类型的结果,Spring MVC根据返回值的类型来决定如何处理响应。

  • 返回视图名称:如果方法返回一个字符串,Spring MVC会使用视图解析器将该字符串解析为实际的视图文件(如JSP、Thymeleaf模板)。
  • 返回模型数据:如果方法返回一个对象,Spring MVC会将该对象的数据传递给视图。
  • 返回原始数据:使用@ResponseBody注解的方法会将返回的数据直接写入HTTP响应体中(通常用于REST API)。

示例:

import org.springframework.web.servlet.ModelAndView;

@Controller
public class MyController {

    @GetMapping("/welcome")
    public ModelAndView welcome() {
        ModelAndView modelAndView = new ModelAndView("welcome");
        modelAndView.addObject("message", "Welcome to Spring MVC!");
        return modelAndView;
    }
}

5. 异常处理

在处理器中,可以使用@ExceptionHandler注解处理特定的异常,并返回友好的错误信息。也可以使用@ControllerAdvice进行全局异常处理。

示例:

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public String handleException(Exception ex) {
        return "An error occurred: " + ex.getMessage();
    }
}

在下一章节,我们将会详细学习SpringMVC框架中处理器Controller中的具体内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值