【Spring】SpringMVC基本概念

1、介绍

1.1简介

  • Spring MVC 是 Spring Framework 中的一个模块,它基于 Java 实现了 Web MVC 设计模式,用于构建 Web 应用程序。
  • Spring MVC 提供了清晰的职责划分,使得开发者能够更加简洁和直观地开发 Web 层。

1.2优点

  • 松耦合:基于Spring框架的依赖注入(DI)和面向切面编程(AOP)等特性,Spring MVC的各个组件之间耦合度低,易于维护和扩展。
  • 灵活性:支持多种视图技术,如JSP、Thymeleaf、Freemarker等,并且提供了多种处理器映射器、处理器适配器等,可以根据实际需求进行选择和配置。
  • 易于测试:由于各个组件之间的松耦合特性,可以很方便地对各个组件进行单元测试、集成测试等。
  • 易于集成:与Spring框架的其他模块(如Spring Security、Spring Data等)无缝集成,可以快速构建功能强大的Web应用程序。
  • 高性能:使用基于注解的控制器、Spring IoC容器、面向切面编程等技术,提高Web应用程序的性能。

2、核心组件

2.1  DispatcherServlet(前端控制器)

  • 它是Spring MVC的入口点和核心。
  • 负责接收所有的HTTP请求,并根据请求信息调用相应的处理器(Controller)进行处理。
  • 它还负责调用视图解析器(ViewResolver)来解析视图名称,并返回给客户端。

2.2  HandlerMapping(处理器映射器)

  • 负责根据请求的URL和其他条件来确定哪个控制器(Controller)应该处理该请求。
  • 它将请求的URL映射到对应的控制器方法上。
  • Spring MVC提供了多种HandlerMapping的实现,如基于注解的RequestMappingHandlerMapping等。

2.3  Controller(控制器)

  • 负责处理客户端请求并生成相应的响应。
  • 它接收来自DispatcherServlet的请求,调用相应的业务逻辑进行处理,并返回Model和视图名称给DispatcherServlet。
  • 在Spring MVC中,控制器通常是一个实现了特定接口的Java类,或者是一个标注了@Controller注解的类。

2.4  HandlerAdapter(处理器适配器)

  • 负责将请求交给相应的控制器进行处理。
  • 它根据控制器的类型和配置的规则来选择适当的适配器来执行控制器的方法。
  • 处理器适配器是连接DispatcherServlet和控制器之间的桥梁。

2.5  ViewResolver(视图解析器)

  • 负责将逻辑视图名称解析为实际的视图对象。
  • 它根据视图名称找到对应的视图实现,并将其返回给DispatcherServlet进行渲染。
  • Spring MVC支持多种视图技术,如JSP、Thymeleaf、FreeMarker等,每种视图技术都有对应的视图解析器实现。

2.6  Model(模型)

  • 表示应用程序的数据和业务逻辑。
  • 它可以是一个POJO(Plain Old Java Object)或一个JavaBean,用于封装数据并提供业务处理方法。
  • 控制器在处理请求时,会将数据填充到模型中,并将模型传递给视图进行渲染。

2.7  View(视图)

  • 负责呈现模型的数据给用户。
  • 它可以使用JSP、Thymeleaf、FreeMarker等模板技术来实现。
  • 视图接收来自控制器的模型数据,并将其渲染为HTML页面或其他类型的响应返回给客户端。

3、工作流程

  1. 客户端发送请求到DispatcherServlet。
  2. DispatcherServlet根据请求信息调用HandlerMapping,找到处理该请求的Handler。
  3. DispatcherServlet调用HandlerAdapter,执行Handler中的方法。
  4. Handler处理请求并返回ModelAndView对象给DispatcherServlet。
  5. DispatcherServlet调用ViewResolver,将ModelAndView中的视图名称解析为具体的视图实现。
  6. 视图根据Model数据渲染页面,并返回给DispatcherServlet。
  7. DispatcherServlet将渲染后的页面返回给客户端。

4、使用和配置

以下是使用Spring MVC时的一个简单示例,包括配置和控制器代码。

1. 添加Spring MVC依赖

首先,确保pom.xml(Maven项目)中已经包含了Spring MVC的依赖:

<!-- Spring MVC 依赖 -->  
<dependency>  
    <groupId>org.springframework</groupId>  
    <artifactId>spring-webmvc</artifactId>  
    <version>你的Spring版本</version>  
</dependency>  
  
<!-- 如果你使用的是Spring Boot,则会自动包含Spring MVC -->  
<!-- Spring Boot 依赖(可选) -->  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
    <version>你的Spring Boot版本</version>  
</dependency>

2. 配置Spring MVC(非Spring Boot项目)

在web.xml中配置DispatcherServlet:

<web-app>  
    ...  
  
    <servlet>  
        <servlet-name>dispatcher</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>  
        </init-param>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>dispatcher</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>  
  
    ...  
</web-app>

在mvc-dispatcher-servlet.xml中配置Spring MVC组件:

<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:mvc="http://www.springframework.org/schema/mvc"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xsi:schemaLocation="  
       http://www.springframework.org/schema/beans  
       http://www.springframework.org/schema/beans/spring-beans.xsd  
       http://www.springframework.org/schema/mvc  
       http://www.springframework.org/schema/mvc/spring-mvc.xsd  
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context.xsd">  
  
    <context:component-scan base-package="com.example.controller" />  
  
    <mvc:annotation-driven />  
  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/WEB-INF/views/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
  
</beans>

3. 编写控制器(Controller)

package com.example.controller;  
  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.GetMapping;  
  
@Controller  
public class HelloController {  
  
    @GetMapping("/hello")  
    public String hello() {  
        // 返回一个逻辑视图名,由视图解析器解析为实际的JSP页面  
        return "hello";  
    }  
}

4. 创建视图(View)

在/WEB-INF/views/目录下创建hello.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>  
<html>  
<head>  
    <title>Hello World</title>  
</head>  
<body>  
    <h1>Hello, World!</h1>  
</body>  
</html>

5. 如果使用Spring Boot(简化配置)

在Spring Boot项目中,你可以通过@SpringBootApplication和@RestController(或@Controller配合@ResponseBody)来快速构建Web应用程序,而无需手动配置web.xml和mvc-dispatcher-servlet.xml。

// Spring Boot的主应用程序类  
@SpringBootApplication  
public class MyApp {  
  
    public static void main(String[] args) {  
        SpringApplication.run(MyApp.class, args);  
    }  
  
}  
  
// 控制器类

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

专业的ADAS测试记录仪ETHOS 2

随着ADAS驾驶辅助系统技术的快速发展及日臻成熟&#xff0c;近年来ADAS在全球汽车市场已开始快速普及和商业化&#xff0c;而如何确保ADAS系统的可靠和安全俨然成为汽车领域的重要问题。因此&#xff0c;ADAS驾驶辅助系统的测试也成为了各大整车厂及零部件厂商所关注的焦点。 一…

蓝海卓越计费管理系统 agent_setstate.php SQL注入漏洞复现

0x01 产品简介 蓝海卓越计费管理系统是一套以实现网络运营为基础,增强全局安全为中心,提高管理效率为目的的网络安全运营管理系统,提供“高安全、可运营、易管理”的运营管理体验,基于标准的RADIUS协议开发,它不仅支持PPPOE和WEB认证计费,还支持802.1X接入控制技术,与其…

轻松拿捏C语言——二分查找

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; 目录&#x1f389; 一、介绍&#x1f308; 二、步骤&#x1f319; 三、代码☀️ 一、介绍 二分查找是一种在有序数组中…

小程序丨公告栏功能,自动弹出提醒

发布查询时&#xff0c;您是否遇到这样的困扰&#xff1a; 1、查询发布时间未到&#xff0c;学生进入查询主页后发现未发布任何查询&#xff0c;不断咨询原因。 2、有些重要事项需要进入查询主页就进行强提醒&#xff0c;确保人人可见&#xff0c;用户需要反馈“我知道了”才…

Day48 Javascript详解

Day48 Javascript详解 文章目录 Day48 Javascript详解一、什么是javascript二、javascript特点三、 Javascript的历史四、Javascript vs Java五、JS的基本数据类型六、JS基本数据类型的特殊点七、数组 一、什么是javascript JavaScript是一种高级的、解释型的编程语言&#xf…

ST-SLAS Technology 实验室自动化与筛查学会技术

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、出版支持 一、期刊简介 SLAS Technology ——SLAS技术强调促进和改进生命科学研发的科学和技术进步;药物递送;诊断;生物医学和分子成像&#xff1b;以及个性化和精准医疗。这包括高通量和其他实验室自动化技术;…

eclipse配置JDK和Tomcat

eclipse配置JDK jdk配置 配置JDK&#xff1a; 首先&#xff0c;确保JDK已经安装并配置了环境变量。这包括设置JAVA_HOME环境变量&#xff0c;指向JDK的安装目录&#xff0c;以及更新CLASSPATH和PATH环境变量以包含JDK的bin目录。 在Eclipse中&#xff0c;通过Window > Pre…

EFuzz:基于程序环境的通用模糊测试工具

关于EFuzz EFuzz是一款功能强大的模糊测试工具&#xff0c;该工具支持基于程序运行环境来执行模糊测试&#xff0c;广大安全研究人员可以使用该工具对几乎任何程序组件执行安全模糊测试。 该工具在运行之后&#xff0c;会将所有的环境交互信息&#xff08;包括用户输入数据&am…

Linux —— 信号量

Linux —— 信号量 什么是信号量P操作&#xff08;Wait操作&#xff09;V操作&#xff08;Signal操作&#xff09;信号量的类型 一些接口POSIX 信号量接口&#xff1a;其他相关命令&#xff1a; 基于循环队列的生产者和消费者模型同步关系 多生产多消费 我们今天接着来学习信号…

软考--软件设计师-刷题总结

一、数据结构 贪心算法 归并排序将问题先分解、再处理、再合并的方式采用了分治法的思想 分治法&#xff1a;将一个大问题分成若干个小问题 希尔排序&#xff1a; 定义一个 i 变量指向这一组的第二个数据&#xff0c;定义一个 j 变量指向 i - gap 的位置。 将 i 下标的值放到…

使用python不改变格式的情况下批量替换word里面的内容

需要使用如$name,${id}这样的模板 import os import io from python_docx_replace import docx_replace,docx_get_keys from docx import Document from random import randrange student_list1,张三,2202330301 2,李四,2202330302 3,王五,2202330303 review["思路清晰、…

产品数据特性驱动设计

一、什么是数据特性 一个产品在宏观的视角下,是不同功能模块的有机组合;在微观的视角上,是千丝万缕的数据连接。 基于模块化设计思想,对产品进行业务化梳理,对业务进行模块化拆分出功能模块,功能模块就是产品的“逻辑”,而功能中的数据就是“特性”。 业务:比较固定…

防范TOCTOU竞态条件攻击

防范TOCTOU竞态条件攻击 在软件开发过程中&#xff0c;我们常常会遇到需要在使用资源之前检查其状态的情况。然而&#xff0c;如果资源的状态在检查和使用之间发生了变化&#xff0c;那么检查的结果可能会失效&#xff0c;导致软件在资源处于非正常状态时执行无效操作。这种时…

如何提升百度小程序的收录?百度小程序如何做优化?

​ 如何通过百度小程序获得更多的自然流量&#xff1f;这是做百度小程序肯定要考虑的问题&#xff0c;做百度小程序的目的就是想借助百度生态&#xff0c;做相应的关键词给自己的小程序引流&#xff0c;如何把流量给做起来呢&#xff0c;接下来我从不同的方面给大家进行分析讲解…

[牛客网]——C语言刷题day5

答案&#xff1a;D 解析&#xff1a;因为两个指针都指向的字符串常量&#xff0c;不能被重新赋值&#xff0c;*p*q是错误的 在C语言中&#xff0c;赋值语句的返回值都是所赋的值&#xff0c;所以才会有连续赋值的语句&#xff0c;例如ab10&#xff0c;因此&#xff0c;这里的i…

Github 2024-05-25 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Svelte项目1TypeScript项目1Python项目1Go项目1Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust…

sw套合样条曲线

套合样条曲线,可以变成一条曲线,然后可以进行分段

springcloud 之 Ribbon Hystrix Feign bus 动态修改配置

Ribbon 是微服务架构图中负责负载均衡的 组件。 BeanLoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();}测试如下&#xff1a; //微服务方式 Ribbon方式GetMapping("ribbon/{name}")public String RibbonTest(PathVariable String nam…

SSRF服务端请求伪造漏洞原理与修复及靶场实践

SSRF服务端请求伪造漏洞原理与修复及靶场实践 SSRF漏洞原理与检测 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服务器端请求伪造&#xff09;漏洞是一种因为服务端提供了远程访问服务&#xff0c;而并未对请求目标进行限制或限制不严格而引起的安全漏洞&#x…

极空间部署本地最强私有化PDF工具箱『Stirling-PDF』

极空间部署本地最强私有化PDF工具箱『Stirling-PDF』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 关注我的粉丝应该知道&#xff0c;我在前几天教大家怎么在NAS上部署本地最强私有化PDF工具箱『Stirling-PDF』&#xff1a; &#x1f53a;评论区好几位小伙伴都提到了极空间的部署…