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

news2024/9/22 19:26:29

Spring MVC框架

  • MVC框架简介:
    • MVC三层架构
    • MVC流行框架
    • MVC框架好处:
  • Spring MVC框架
    • 组件分析
  • 处理器开发
    • 1. 定义处理器
    • 2. 处理请求
    • 3. 处理请求参数
    • 4. 返回视图或数据
    • 5. 异常处理

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中的具体内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言基础(二十九)

1、快速排序&#xff1a; #include "date.h" #include <stdio.h> #include <stdlib.h> #include <time.h> // 函数声明 void quickSort(int *arr, int low, int high); void swap(int *xp, int *yp); void printArray(int *arr, int s…

CSRF漏洞的预防

目录 CSRF漏洞预防措施 深入研究 CSRF Token的工作原理是什么&#xff1f; 为什么仅依靠Referer头字段来防范CSRF攻击不是完全可靠&#xff1f; SameSite cookie属性如何防止CSRF攻击&#xff1f; SameSite Cookie属性的作用 如何通过SameSite属性防止CSRF攻击 导图 CS…

JavaWeb JavaScript ⑧ DOM编程

在光芒万丈之前&#xff0c;我们都要欣然接受眼下的难堪和不易&#xff0c;接受一个人的孤独和无助&#xff0c;认真做好眼前的每一件事&#xff0c;你想要的都会有 —— 24.8.29 一、什么是DOM编程 简单来说&#xff1a;DOM(Document obiect Model)编程就是使用document对象的…

Python 如何进行密码学操作(cryptography模块)

Python 的密码学操作可以通过 cryptography 模块来实现&#xff0c;这个模块是一个功能强大的库&#xff0c;它提供了现代密码学的基本工具&#xff0c;包括加密、解密、密钥生成、签名等操作。cryptography 模块易于使用&#xff0c;并且安全性高&#xff0c;适合在各种场景下…

【软件测试】8. 测试分类

目录 1. 为什么要对软件测试进行分类&#xff1f; 2.按照测试目标分类 2.1 界面测试 2.2 功能测试 2.3 性能测试 2.4 可靠性测试 2.5 安全性测试 2.6 易用性测试 3.按照执行方式分类 3.1 静态测试 3.2 动态测试 4. 按照测试方法 4.1 白盒测试 4.2 黑盒测试 4.3灰…

【WiFi协议的发展学习1】

WiFi协议的发展 WiFi协议的发展2. WiFi协议发展3. WiFi协议发展小结3.1. 发展归纳3.2. 未来展望4. WiFi产品的特点/功能WiFi协议的发展 自20世纪90年代以来, WiFi技术得到了迅猛发展,已成为人们日常生活、工作和学习中不可或缺的组成部分。WiFi协议的发展不仅推动了无线通信…

TL-Tomcat 整体架构和处理请求流程解析

我们写一个servlet后&#xff0c;在web.xml里配上我们的路径。然后把项目打包成war包放入webapps目录下 然后这样就返回了 这个war包里面的东西和这个文件夹其实是一样的&#xff1a; 那么最终我们把war包删掉 还有原来文件夹下其他的东西 只剩下这么个.class文件 其实这…

TikTok流量推送逻辑与IP的关系

在探讨TikTok流量推送逻辑时&#xff0c;很多用户都好奇这一机制是否与用户的IP地址紧密相关。TikTok作为全球知名的短视频社交平台&#xff0c;其流量推送算法无疑是平台成功的关键因素之一。那么&#xff0c;TikTok的流量推送逻辑究竟是如何运作的&#xff1f;它与IP地址之间…

C语言 | Leetcode C语言题解之第385题迷你语法分析器

题目&#xff1a; 题解&#xff1a; struct NestedInteger* helper(const char * s, int * index){if (s[*index] [) {(*index);struct NestedInteger * ni NestedIntegerInit();while (s[*index] ! ]) {NestedIntegerAdd(ni, helper(s, index));if (s[*index] ,) {(*index…

使用InternLM实现谁是卧底游戏

环境 # 创建虚拟环境 conda create -n spy python3.10 -y conda activate spy pip install streamlit1.37.0 openai1.37.1 git clone https://github.com/sci-m-wang/Spy-Game.git cd Spy-Game 修改脚本who_is_the_spy.py中的client 部分 if "client" not in …

pdf转cad软件,5款快速上手转换软件分享

在当今快节奏的工作环境中&#xff0c;图纸文件的格式转换成为设计师、工程师等职业群体日常工作中不可或缺的一环。尤其是将PDF文件转换为CAD格式&#xff0c;不仅能够提升工作效率&#xff0c;还能确保设计数据的准确性和可编辑性。下面给大家分享5款能够快速上手转换软件&am…

快蜗牛OZON数据分析工具,快蜗牛OZON选品工具

现在电商行业蓬勃发展的时代&#xff0c;OZON是俄罗斯及东欧边相当重要的电商平台&#xff0c;它背后的数据里藏着超多商业机会。快蜗牛数据专门针对 OZON 平台搞数据分析的&#xff0c;能帮咱们卖家看透市场&#xff0c;还能指导商家怎么做生意。接下来看快蜗牛对 OZON 的数据…

物理机安装Centos后无法连接网络(网线网络)怎么办?-呕心沥血总结版-超简单

问题情境 高高兴兴的在物理机上装了个centos7,打开一看,哇,网卡没有我的局域网IP,怎么办,已经插上网线了呀,灯也在闪烁,怎么没有网络呀? 其实,是缺少网卡驱动! 问题解决: 1.查询网卡版本 在服务器上输入命令: lspci | grep Ethernet可以看到,我的网卡是RTL8…

Python Excel 操作全面总结

Excel 是我们日常生活中经常使用的数据处理工具&#xff0c;而 Python 作为一种强大的编程语言&#xff0c;在处理 Excel 文件方面也有着广泛的应用。本文将全面总结 Python Excel 操作&#xff0c;包括如何使用 Python 来读取、写入、修改 Excel 文件&#xff0c;以及如何使用…

2024全国大学生数学建模国赛,成员如何分工协作?

文末获取2024国赛数学建模思路代码&#xff0c;9.5开赛后第一时间更新 大家知道&#xff0c;数学建模竞赛是需要一个团队的三个人在三天或四天的时间内&#xff0c;完成模型建立&#xff0c;编程实现和论文写作的任务&#xff0c;对许多第一次参加建模或者建模经验比较欠缺的团…

电饭煲语音应用方案:工业级性能、简单易用,NRK3301语音识别ic

随着人们对电器的需求不断增大&#xff0c;家用电饭煲经过不断地改革和创新&#xff0c;拥有了更多使用的功能&#xff0c;以往电饭煲只用于煮米饭。如今&#xff0c;还增加了煲汤、煮粥、无水焗、收汁入味等十多种功能。 除此之外&#xff0c;如今的电饭煲越来越人性化&#x…

AI周报(8.25-8.30)

AI应用-Beyond Math 的“数字风洞”应用于 F1 赛车 Beyond Math 的首批市场之一是一级方程式赛车&#xff0c;一些车队正在探索使用该软件来加快他们的空气动力学和车辆设计过程。 BeyondMath 的联合创始人达伦加维&#xff08;Darren Garvey&#xff09;告诉TechCrunch&#…

【MySQL-24】万字全面解析<索引>——【介绍&语法&性能分析&使用规则】

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

一文打通前端环境搭建

目录 nvm管理安装nvm 管理node配置nvm环境变量切换nvm国内镜像 安装nodenpm 镜像切换打包工具yarn安装yarnyarn切换淘宝镜像 安装vue脚手架开发工具vscode安装(傻瓜式安装) 启动项目vue插件配置 关于yarmyarm常用命令 nvm管理 安装nvm 管理node 访问github地址&#xff1a;ht…

Electron 项目实战 02:打包和自动更新

技术选型 electron-forgeelectron-builder electron-forge 是Electron 官方文档介绍的&#xff0c;打包和发布都包含了&#xff0c;但是包含的坑也非常多。electron-builder下载量和集成打包非常顺利&#xff0c;本教程也是采用electron-buid来介绍打包。大家在技术选型的时候…