java之路—— SpringMVC的基本详解

简介: java之路—— SpringMVC的基本详解

前言


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把渲染后的视图响应给客户端

b70d0ad91170431ba13eacf2d12611fb.jpg

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

目录
相关文章
|
6月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
|
6月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
|
5月前
|
XML 前端开发 Java
java面试题之个人对SpringMvc的原理实现理解
java面试题之个人对SpringMvc的原理实现理解
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
6月前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
339 3
|
2月前
|
JSON 前端开发 Java
【Java笔记+踩坑】SpringMVC基础
springmvc简介、入门案例、bean加载控制、PostMan工具的使用、普通和JSON和日期格式请求参数传递、响应JSON或jsp或文本、Rest风格
【Java笔记+踩坑】SpringMVC基础
|
6月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——Dept.java
ssh(Spring+Spring mvc+hibernate)——Dept.java
|
3月前
|
设计模式 JSON 前端开发
【Java 第十二篇章】SpringMvc 框架介绍
Spring MVC 是 Spring 框架中的模块,采用 MVC 设计模式构建 Web 应用。核心组件包括 DispatcherServlet、Controller、Model 和 View。流程始于 DispatcherServlet 接收并分发请求至 Controller,Controller 处理业务逻辑并与 Model 交互,再通过 View 展示结果。优势包括松耦合架构支持多种视图技术,强大的请求处理和数据绑定功能简化开发,以及易于与其他 Spring 模块和第三方库集成。
22 0
|
3月前
|
前端开发 Java Spring
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
64 0
|
5月前
|
XML Java 程序员
Java SpringMVC实现PC端网页微信扫码支付完整版
Java SpringMVC实现PC端网页微信扫码支付完整版
245 0
下一篇
无影云桌面