java之路—— SpringMVC的基本详解

13 篇文章 0 订阅

在这里插入图片描述


前言

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的基本流程步骤,要求详细的过程还需要小伙伴多去学习学习

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流光CN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值