java之路—— SpringMVC的基本详解

news2024/9/22 17:34:10

在这里插入图片描述

文章目录

  • 前言
  • 一、 核心的组件
  • 二、基本实现流程
  • 三、MVC的基本配置使用


前言

Spring MVC是一个用于构建Web应用程序的基于MVC(Model-View-Controller)设计模式的框架。 它是Spring Framework的一部分,提供了一种灵活、可扩展且功能强大的方式来开发Java Web应用程序。

以下是关于Spring MVC的主要特点和核心组件:
特点:

解耦合: Spring MVC与具体的视图技术解耦,可以方便地切换不同的视图渲染器,如JSP、Thymeleaf、Freemarker等。

基于注解: 通过使用注解,可以简化配置,并提高开发效率。例如,通过@Controller注解声明控制器类,@RequestMapping注解映射URL请求。

强大的数据绑定和验证: Spring MVC提供了数据绑定和验证功能,让处理表单数据更加方便和安全。

内置支持RESTful风格: Spring MVC原生支持处理RESTful风格的请求,并提供了@RestController注解,使编写RESTful API更加简洁。

拦截器支持: 通过拦截器(Interceptor),可以在请求处理的各个阶段进行预处理和后处理,实现统一的处理逻辑,如身份验证、日志记录等。

通过Spring MVC,开发人员可以使用简洁的代码组织Web应用程序,并实现良好的分层结构和可测试


一、 核心的组件

DispatcherServlet: 中央调度器,负责接受所有的请求,并调度其他组件的执行,负责将用户请求分配给相应的控制器处理,还可以降低不同组件之间的耦合性,是整个Spring MVC的核心模块

Handler: 处理器,完成具体的业务逻辑,数据处理,相当于Servlet

HandlerMapping:用于将所有的请求映射到相应的控制器处理方法。Spring MVC 的 HandlerMapping 可以配置多个,以支持不同的 URL 映射方式。

HandlerInterceptor:处理器拦截器,是一个接口,如果我们需要进行一些拦截处理,可以通过实现该接口完成

HandlerExecutionChain:处理器执行链,包括两部分内容:Handler和HandlerInterceptor(系统会有一个默认的HandlerInterceptor,如果有额外拦截处理,可以添加拦截器进行设置)

HandlerAdapter:处理器适配器,Handler执行业务方法之前,需要进行一系列的操作包括表单的数据验证、数据类型转换、把表单数据封装到POJO等,这些一系列的操作都是由HandlerAdapter完成,DispatcherServlet通过HandlerAdapter执行不同的Handler。也就是将控制器处理方法封装成处理器,同时支持多种处理器,以支持不同的控制器处理方法。

ModelAndView:封装了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet

ViewResolver:视图解析器,DispatcherServlet通过它把逻辑视图解析为物理视图的路径。

View: 负责渲染数据模型并生成最终的响应结果,可以是HTML页面或其他类型的数据格式。

在 Spring MVC 中,我们通常需要定义一个控制器来处理请求,可以通过 @Controller 注解来标识一个控制器。控制器中的处理方法使用 @RequestMapping 注解来映射请求 URL,并通过 @RequestParam 等注解来获取请求参数和路径变量等信息。模型数据可以通过 ModelAndView 或 ModelMap 等方式传递给视图模板进行渲染。

其中除了以上核心组件,Spring MVC还提供了许多其他功能和扩展点,如数据绑定、表单验证、文件上传、异常处理、国际化支持等,以满足各种Web应用程序的需求。


二、基本实现流程

1. 客户端请求被DispatcherServlet接收

2. 根据这些请求,然后HandlerMapping将请求路径分组映射到不同的Handler

3. Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet

4. DispatcherServlet通过HandlerAdapter调用Handler的方法完成业务逻辑处理

5. 返回一个ModelAndView对象给DispatcherServlet

6. DispatcherServlet把获取的ModelAndView对象传给ViewResolver视图解析器,把逻辑视图解析成物理视图

7. ViewResolver返回一个View进行视图渲染(把模型填充到视图中)

8. DispatcherServlet把渲染后的视图响应给客户端

在这里插入图片描述

在上述工作流程中,DispatcherServlet 充当着中央调度器的角色,负责接收客户端的请求,并将请求分发给相应的 Controller 进行处理。HandlerMapping 和 ViewResolver 则负责解析请求信息和视图信息,将请求路由到正确的 Controller 和对应的视图模板进行处理。Controller 则负责处理业务逻辑,通过 ModelAndView 来封装模型数据和视图名称。最终,DispatcherServlet 将视图渲染之后返回给客户端。

整个流程中涉及到的关键组件包括 DispatcherServlet、HandlerMapping、HandlerAdapter、Controller、ViewResolver 和 View 等 ,Spring MVC 框架处理请求的方式非常灵活,可以通过配置多个 HandlerMapping、HandlerAdapter 和 ViewResolver 等来支持不同的 URL 映射方式和控制器处理方法。

三、MVC的基本配置使用

1.导入依赖:在项目的构建工具(如Maven、Gradle)配置文件中添加Spring MVC的依赖项

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>SpringMVC</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>SpringMVC Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
   <!--mvc支持-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.19</version>
    </dependency>

  </dependencies>
</project>

2.配置web.xml:在web.xml文件中配置DispatcherServlet,作为中央调度器。

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

<!--  配置springmvc的核心servlet-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
<!--      告诉springmvc配置文件的位置-->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
<!--    拦截所有请求-->
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

3.创建Spring MVC配置文件:在上述配置中指定的位置创建Spring MVC的配置文件,配置各种的组件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!--  1. 开启注解扫描-->
  <context:component-scan base-package="com.lin.controller"/>
<!--  2. 配置处理器映射器-->
<!--  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />-->
<!--  3. 开启处理器适配器-->
<!--  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />-->
<!--  上面两段配置被下面的一句话所替代(封装)-->
  <mvc:annotation-driven />
  <!--  4. 开启视图解析器-->
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/"/>
    <property name="suffix" value=".jsp"/>
  </bean>
</beans>

4.创建控制器:在指定的控制器包路径中创建处理请求的控制器类,并添加注解以标识为控制器。

@Controller
public class HomeController {
    @RequestMapping("/")
    public String home() {
        return "home";
    }
}

5.创建视图:根据上述配置中的视图解析器,创建对应的JSP视图文件。

6.运行应用程序:部署项目到服务器,并启动服务器,访问相应的URL即可看到处理后的视图。

以上是springmvc的基本流程步骤,要求详细的过程还需要小伙伴多去学习学习

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

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

相关文章

Android APT 系列 (三):APT 技术探究

APT 介绍 什么是 APT ? APT 全称 Annotation Processing Tool&#xff0c;翻译过来即注解处理器。引用官方一段对 APT 的介绍&#xff1a;APT 是一种处理注释的工具, 它对源代码文件进行检测找出其中的注解&#xff0c;并使用注解进行额外的处理。 APT 有什么用&#xff1f;…

基于Java+Swing实现推箱子游戏

基于JavaSwing实现推箱子游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 一、系统介绍 基于JAVA的推箱子游戏系统主要用于实现游戏推箱子功能&#xff0c;提供多种不同难度的关卡。本系统结构如下&#xff1a; &#xff08;1&#xff09;初始化模块: 该模块包括屏幕初…

如何用 ChatGPT 和你的卡片笔记对话?开源应用 Quivr 尝试

卡片 我 非常喜欢使用卡片笔记。其优点明显&#xff0c;例如能显著减轻写作压力。在你面对空白屏幕时&#xff0c;写一篇文章的压力可能会很大&#xff0c;而随时三言两语记录卡片笔记则显得更为轻松。由于笔记以卡片形式存在&#xff0c;可以进行大量重组复用&#xff0c;对于…

基于SpringBoot+vue的音乐网站与分享平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

分布式理论和一致性算法详解

1、什么是分布式系统 分布式系统是一个硬件或软件组成分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统 2、分布式系统的特征 分布性 分布式系统的多台计算机都会在空间上随意分布的&#xff0c;同时&#xff0c;机器的分布情况也会随时变动…

【详细分析】thinkphp反序列化漏洞

文章目录 配置xdebug反序列化漏洞利用链详细分析poc1&#xff08;任意文件删除&#xff09;测试pocpoc2&#xff08;任意命令执行&#xff09;poc3&#xff08;任意命令执行&#xff09; 补充代码基础函数trait关键字应用案例优先级多trait 配置xdebug php.ini [Xdebug] zend…

聊聊我在店铺开放域做性能优化的体会

我们新推出大淘宝技术年度特刊《长期主义&#xff0c;往往从一些小事开始——工程师成长总结专题》&#xff0c;专题收录多位工程师真诚的心路历程与经验思考&#xff0c;覆盖终端、服务端、数据算法、技术质量等7大技术领域&#xff0c;欢迎一起沟通交流。 本文为此系列第五篇…

nodejs+mysql+vue+elementUI 实现选择资源管理工具

我们在写后台管理系统时会遇到上传视频、音频等内容。如果上传资源地方多的话,每个地方都要加上传的代码,比较麻烦。而且遇到有些图片是已经上传过的,下次遇到了又要重复上传,浪费服务器或cos资源。 这时候可以实现一个资源管理工具,上传图片到资源管理工具里,然后再去选…

35年前,金山WPS上的当终于找补回来,没想到,钉钉也深度参与

我们当年上了微软的当&#xff01; 近日&#xff0c;雷军在武汉科技大学毕业典礼致辞&#xff0c;登上了热搜。 关于“小米汽车”的话题再次被推上了舆论的风口。这是54岁雷军的最后一搏&#xff0c;距离2024年量产&#xff0c;时间也所剩不多了。 从软件到电商&#xff0c;到…

Flutter控件封装之视频进度条

视频控制器&#xff0c;三方所提供的样式&#xff0c;有时很难满足我们的需求&#xff0c;对于此情况&#xff0c;我们不得不在此基础上自行封装&#xff0c;今天所分享的文章就是一个很简单的控制器封装案例&#xff0c;包含了基本的播放暂停&#xff0c;全屏和退出全屏&#…

在ElementUI中如何通过按钮控制输入框的隐藏与显示

点击此按钮会出现两个输入框 当点击完新增后会出现两个输入框及一个按钮&#xff0c;解决此方案思路比较简单&#xff1a;就是设置一个属性值&#xff0c;用v-if进行绑定&#xff0c;在什么情况下需要显示就需要设置v-if绑定的值等于需要显示的值 <div style"height:7…

Istio 熔断 连接池 故障处理

istio熔断 熔断主要是无感的处理服务异常并保证不会发生级联甚至雪崩的服务异常。在微服务方面体现是对异常的服务情况进行快速失败&#xff0c;它对已经调用失败的服务不再会继续调用&#xff0c;如果仍需要调用此异常服务&#xff0c;它将立刻返回失败。 与此同时&#xff0…

c语言修炼第一章--初识c语言(1.3)

目录 前言&#xff1a; 1.关键字 1.1常见关键字: 1.1.1typedef类型重定义 1.2.static 1.2.1static修饰局部变量 1.2.2static修饰全局变量 1.2.3static修饰函数 …

待办事项工具用哪个?每天都在用的待办工具

随着职场“内卷”程度的加深&#xff0c;越来越多的上班族感到自己每天都会面临各种繁忙的日程安排、琐碎的待办事项&#xff0c;并且工作事项和家庭事项交织在一起&#xff0c;需要各方面都兼顾到&#xff0c;这简直让人恨不得长出三头六臂。在待办的事情比较多时&#xff0c;…

艺考之路,很艰难也很幸福

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 嘉宾 / 小川同学 产品统筹 / bobo 录音间 / 声湃轩北京站 本期节目是拼娃时代的第三十期&#xff0c;我们请来了拼娃时代的老朋友&#xff0c;小川同学。 拼娃时代的听友们肯定…

带有10位数码管显示的语音芯片ic,节省30%MCU硬件资源WTV890-B001

随着科技的不断发展&#xff0c;WTV890-B001多功能语音芯片的推出&#xff0c;为工程师带来了极大的便利和产品体验&#xff0c;这款多功能语音芯片具有许多优势&#xff0c;其中WTV890-B001版本中&#xff0c;最引人注目的特点是它带有10位的数码管显示功能&#xff0c;无需再…

nginx配置https证书(nginx-docker版本)

1、下载证书文件 以下两种多可配置 2、nginx server下加上配置 注意&#xff1a;ssl_certificate 参数可为crt文件、或者pem文件。需要将文件docker cp进容器中&#xff0c; ssl_certificate、ssl_certificate_key 为容器内的文件路径。 listen 443 ssl;server_name 域名地…

TMS FlexCel Studio for net 7.17 cRACK

TTMS FlexCel Studio for net 100% 托管代码 Excel 文件操作引擎以及 Excel 和 PDF 报告生成&#xff0c;适用于 .NET、Xamarin.iOS、Xamarin.Android、Xamarin.Mac​​ 功能概述 使用 FlexCel Studio for .NET 创建可动态快速读写 Excel 文件的应用程序、Web 服务和移动设备应…

深入理解浏览器的缓存机制之协商缓存与强缓存

目录 什么是浏览器缓存 浏览器缓存的分类 &#x1f397;️ 强缓存 &#x1f397;️ 协商缓存 &#x1f449;&#x1f3fb; 缓存请求流程 &#x1f449;&#x1f3fb; 为什么要有Etag &#x1f449;&#x1f3fb; 缓存优先级 &#x1f449;&#x1f3fb; 启发式缓存 &a…

Midjourney教程古风人像类

古风图像的特点&#xff1a; 人物发型多为飘逸的长发&#xff0c;或是精致的盘发&#xff1b; 人物服装多为飘逸的长袍、长裙&#xff1b; 整体画风以水墨、水彩、工笔为c主&#xff0c;线条写意&#xff0c;色彩清新淡雅&#xff1b; 背景中多用花鸟、亭台楼阁、桃林等构建氛…