SpringMVC组件

目录

1、简介

2、SpringMVC与Servlet的关系

3、struc2

4、RESTful 编程风格

5、工作流程

6、代码示例

6.1、导入坐标

provide

6.2、DispathcerServlet

配置web.xml

初始化

优先级

6.3、Controller类及视图页面

6.4、配置注解

6.5、spring-mvc.xml

6.6、客户端发请求

7、组件解析

7.1、执行流程

7.2、解析

8、注解解析

8.1、@RequestMapping

8.2、xml

8.3、知识要点


 ⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE、Spring

1、简介

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于

SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。

SpringMVC 已经成为目前最主流的MVC框架之一,并且随着Spring3.0 的发布,全面超越 Struts2,成为最优

秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时

它还支持 RESTful 编程风格的请求。

Spring MVC 是 Spring 框架中用于构建 Web 应用程序的模块。它是一个基于 MVC(Model-View-Controller)设计模式的轻量级框架,旨在简化 Web 应用程序的开发,并提供灵活性和可扩展性。

下面是 Spring MVC 的主要特点和组件:

  1. MVC 设计模式:Spring MVC 遵循经典的 MVC 设计模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)。这种分层架构使代码更加清晰和易于维护。
  2. 前端控制器:Spring MVC 使用前端控制器(DispatcherServlet)作为入口点,负责接收所有的客户端请求并将其分发给合适的处理器(Controller)进行处理。
  3. HandlerMapping:HandlerMapping 用于将 URL 映射到相应的处理器(Controller)。Spring MVC 提供了多种 HandlerMapping 实现,如 BeanNameUrlHandlerMapping、RequestMappingHandlerMapping 等。
  4. Controller:Controller 是处理客户端请求的组件,它负责处理请求并生成相应的响应数据。Controller 可以是普通的 Java 类,使用 @Controller 注解标记。
  5. HandlerAdapter:HandlerAdapter 用于调用处理器(Controller)来处理客户端请求,并将处理结果封装成 ModelAndView 或 ResponseEntity 返回给前端控制器。
  6. ViewResolver:ViewResolver 用于将逻辑视图名解析为具体的视图对象。Spring MVC 支持多种视图技术,如 JSP、Thymeleaf、Freemarker 等。
  7. View:View 是用于渲染数据并生成响应的组件。它可以是 JSP、HTML 模板或其他模板引擎。
  8. 数据绑定:Spring MVC 支持数据绑定,可以将客户端请求的参数绑定到方法参数、JavaBean 或命令对象中。
  9. 拦截器:拦截器(Interceptor)用于在请求处理的不同阶段插入自定义的处理逻辑。它可以用于执行权限检查、日志记录等操作。
  10. 异常处理:Spring MVC 提供了全局异常处理机制,可以通过 @ControllerAdvice 注解来统一处理应用程序中的异常。
  11. 国际化支持:Spring MVC 提供了国际化和本地化支持,可以轻松实现多语言应用程序。
  12. RESTful Web Services:Spring MVC 提供了对 RESTful Web 服务的支持,通过 @RestController 注解可以创建 REST 风格的控制器。

使用 Spring MVC,开发人员可以快速构建灵活、可维护和可扩展的 Web 应用程序。

它与其他 Spring 模块(如 Spring Boot)集成良好,为开发现代 Web 应用提供了强大的基础。

2、SpringMVC与Servlet的关系

Spring MVC 是基于 Servlet 技术的框架,它实际上是在 Servlet 的基础上进行了封装和扩展,以简化 Web 应用程序的开发。下面是 Spring MVC 和 Servlet 的关系和区别:

关系

  1. Spring MVC 是 Spring 框架的一部分,它是 Spring 提供的用于构建 Web 应用程序的模块。
  2. Servlet 是 Java EE 规范的一部分,它定义了用于处理客户端请求和生成响应的标准 API。

区别

  1. 抽象层次:Servlet 是 Java EE 规范的一部分,提供了底层的 Web 编程接口,开发者需要直接使用 Servlet 接口来处理请求和响应。而 Spring MVC 是在 Servlet API 的基础上进行了高级封装,提供了更方便的编程模型和更强大的功能,使得开发者可以更快速地构建 Web 应用。
  2. 设计思想:Servlet 的设计思想是基于前端控制器模式,其中 Servlet 容器(如 Tomcat)负责接收所有的请求并将其分发给相应的 Servlet 进行处理。而 Spring MVC 的设计思想是基于 MVC 模式,它将应用程序分为模型(Model)、视图(View)和控制器(Controller),从而使代码结构更加清晰和易于维护。
  3. 功能和特性:Spring MVC 提供了许多额外的功能和特性,如拦截器、数据绑定、国际化支持、异常处理、RESTful Web Services 等,这些功能在原生的 Servlet 中是没有的。
  4. 依赖关系:使用原生的 Servlet,开发者需要手动配置和管理 Servlet 和 URL 的映射关系,而使用 Spring MVC,开发者可以通过注解和配置来实现自动的 URL 映射和请求处理。

综上所述,Spring MVC 是对 Servlet 的封装和扩展,它提供了更高级的编程模型和更丰富的功能,使得 Web 应用程序的开发更加简便和高效。使用 Spring MVC 可以更好地实现松耦合、可维护和可扩展的 Web 应用。

3、struc2

Struts2 是一个基于 Java 的开源 Web 应用程序框架,用于构建 Web 应用程序。它是 Struts 框架的后续版本,但在设计和功能上有很大的改进。Struts2 使用了经典的 MVC 设计模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller),以提高代码的可维护性和可扩展性。

主要特点:

  • 提供了强大的拦截器机制,可以在请求处理过程中插入自定义逻辑,如登录验证、权限控制等。
  • 支持数据绑定和验证,能够方便地处理表单数据的提交和校验。
  • 支持国际化和本地化,方便构建多语言应用。
  • 内置标签库和表达式语言,简化页面开发。
  • 可以集成各种视图技术,如 JSP、FreeMarker 等。
  • 使用配置文件和注解来配置应用程序的行为。

4、RESTful 编程风格

REST(Representational State Transfer)是一种软件架构风格,用于构建分布式系统和 Web 服务。RESTful 是一种基于 REST 架构风格的 Web 服务设计风格,它遵循一组约定和原则,使得 Web 服务更加简单、灵活和易于扩展。

主要特点:

  • 资源:RESTful 服务将所有的数据和功能视为资源,每个资源都有唯一的标识符(URI)。
  • 表现层:资源可以有多种表现形式,如 JSON、XML 等,客户端可以根据需要选择适合的表现形式。
  • 状态转移:RESTful 服务通过 HTTP 方法(GET、POST、PUT、DELETE 等)来表示资源的状态转移和操作。
  • 无状态:每个请求都包含足够的信息,使得服务器可以处理请求,而无需维护会话状态。
  • 可缓存:服务器可以将响应进行缓存,以提高性能和可伸缩性。

在 RESTful 编程风格中,资源的标识符(URI)是关键,它代表了资源的唯一性,并且客户端通过 HTTP 方法来执行 CRUD(创建、读取、更新和删除)操作。RESTful 服务通常使用 JSON 或 XML 格式来传输数据,使得客户端和服务器之间的通信更加简单和灵活。

Struts2 是一个用于构建 Web 应用程序的 Java 框架,而 RESTful 编程风格是一种用于构建 Web 服务的设计风格,它们都有各自的优点和用途。在 Web 开发中,可以使用 Struts2 框架来构建整个 Web 应用程序,同时采用 RESTful 编程风格来设计和实现 Web 服务接口,使得应用程序更加模块化和灵活。

5、工作流程

SpringMVC组件_第1张图片

Spring MVC 的工作流程可以简单概括为以下几个步骤:

  1. 请求的到达: 首先,当客户端发送一个 HTTP 请求时,请求会被 Web 服务器接收并传递给 DispatcherServlet(前端控制器)。
  2. 前端控制器: DispatcherServlet 是 Spring MVC 的核心组件之一,它充当前端控制器的角色。它负责接收所有的请求并将请求交给后续的处理组件进行处理。
  3. 处理器映射器(Handler Mapping): DispatcherServlet 通过处理器映射器,根据请求的 URL 找到对应的处理器(Controller)
  4. 处理器适配器(Handler Adapter): 处理器适配器负责将请求传递给对应的处理器(Controller)进行处理,并返回一个 ModelAndView 对象。
  5. 控制器处理: 处理器(Controller)是用户定义的组件,负责处理请求并生成响应。它会根据请求的内容进行业务逻辑处理,然后将处理结果封装在 ModelAndView 对象中返回。
  6. 视图解析器(View Resolver): 视图解析器负责根据 ModelAndView 对象中的视图名称解析出具体的视图(JSP 页面、HTML 页面等)。
  7. 视图渲染: 通过视图解析器解析得到视图后,DispatcherServlet 将 Model 数据传递给视图,视图使用这些数据生成最终的响应内容。
  8. 响应返回: DispatcherServlet 将响应内容发送给客户端,完成请求处理过程。

整个 Spring MVC 的工作流程是由 DispatcherServlet 负责协调和调度的。它根据请求的 URL 找到对应的处理器(Controller)进行处理,并将处理结果传递给适合的视图进行渲染,最终将响应返回给客户端。

在此过程中,Spring MVC 提供了很多可插拔的组件,如处理器映射器、处理器适配器、视图解析器等,这些组件可以根据实际需求进行配置和定制,使得 Spring MVC 可以灵活适应各种不同的业务场景。

6、代码示例

需求是:客户端发起请求,服务器端接收请求,执行逻辑并进行视图跳转。

实现步骤:

① 导入SpringMVC相关坐标

② 配置SpringMVC核心控制器DispathcerServlet

③ 创建Controller类和视图页面

④ 使用注解配置Controller类中业务方法的映射地址

⑤ 配置SpringMVC核心文件 spring-mvc.xml

⑥ 客户端发起请求测试

6.1、导入坐标

SpringMVC组件_第2张图片

SpringMVC组件_第3张图片



    4.0.0

    org.example
    Spring
    1.0-SNAPSHOT
    war

    
        
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                
                    8080
                    
                    UTF-8
                
            
        
    

    
        11
        11
    

    
        
            mysql
            mysql-connector-java
            5.1.32
        
        
            c3p0
            c3p0
            0.9.1.2
        
        
            com.alibaba
            druid
            1.1.10
        
        
            junit
            junit
            4.12
            test
        
        
            
            org.springframework
            spring-context
            5.0.5.RELEASE
        
        
            
            org.springframework
            spring-test
            5.0.5.RELEASE
        
        
            
            org.springframework
            spring-web
            5.0.5.RELEASE
        
        
            
            org.springframework
            spring-webmvc
            5.0.5.RELEASE
        
        
            javax.servlet
            javax.servlet-api
            4.0.1
            provided
        
        
            javax.servlet.jsp
            javax.servlet.jsp-api
            2.2.1
            provided
        
        
            javax.annotation
            javax.annotation-api
            1.3.2
        
    

provide

在 Maven 中设置 provided 的作用是告诉 Maven 编译器和构建工具,在编译和打包时不要将该依赖包(javax.servlet.jsp-api)包含到最终的构建结果中,而是假设这个依赖在目标环境中已经存在。

具体来说,provided 作用域适用于那些在运行时由容器或其他外部环境提供的依赖项,例如 Servlet 和 JSP API。在 Java Web 应用中,这些 API 是由 Web 容器(如 Tomcat、Jetty 等)提供的,因此在构建项目时无需将这些 API 打包进 WAR 文件中。当你部署项目时,Web 容器会负责提供这些 API。

使用 provided 作用域的好处是减少构建结果的大小,因为不会将这些已经存在于目标环境的依赖项包含进去。这样可以避免冲突和版本问题,同时也减少了不必要的重复。

总结:使用 provided 作用域适用于那些在目标运行环境中已经存在的依赖项,例如 Java Web 应用中的 Servlet 和 JSP API,告诉 Maven 在构建时不要将这些依赖包含进去。

6.2、DispathcerServlet

SpringMVC的核心控制器是DispatcherServlet,它是整个SpringMVC框架的前端控制器(Front Controller)。当客户端发送请求时,请求首先会被DispatcherServlet接收,然后DispatcherServlet会根据请求的信息进行处理和分发。

DispatcherServlet的主要职责包括:

  1. 请求分发:根据请求的URL路径,DispatcherServlet会将请求分发给不同的控制器进行处理。这些控制器由开发者定义,并负责处理不同的请求逻辑。
  2. 处理器映射:DispatcherServlet维护了一个处理器映射表,用于将请求映射到对应的处理器(控制器)上。
  3. 视图解析:在处理完请求后,DispatcherServlet会根据处理结果选择对应的视图进行渲染,并返回给客户端。
  4. 统一异常处理:DispatcherServlet还负责统一处理控制器抛出的异常,可以通过配置异常处理器来处理不同类型的异常。
  5. 本地化:DispatcherServlet可以根据客户端请求的语言环境(Locale)选择对应的本地化消息,实现国际化。
  6. 拦截器:DispatcherServlet支持拦截器(Interceptor),拦截器可以在请求处理前后进行预处理和后处理。

总体上,DispatcherServlet起到了框架的总调度中心,负责将请求与相应的控制器进行匹配,然后将处理结果返回给客户端。通过配置DispatcherServlet的不同属性和参数,我们可以实现自定义的请求处理逻辑和视图渲染方式。

配置web.xml

在web.xml配置SpringMVC的核心控制器:

SpringMVC组件_第4张图片

:指定URL的匹配模式,这里是"/",表示将所有请求都交给名为"DispatcherServlet"的Servlet进行处理。

初始化

SpringMVC的初始化发生在Web应用启动时,当容器(例如Tomcat)加载Web应用时,会寻找web.xml文件,并根据其中的配置初始化SpringMVC框架。

具体地说,SpringMVC的初始化是通过配置在web.xml中的DispatcherServlet来完成的。在web.xml中配置DispatcherServlet时,使用了标签,并设置为一个非负整数,例如1。这个参数的值表示容器启动时加载DispatcherServlet的顺序,数值越小优先级越高。

当容器启动时,会按照的数值顺序逐个加载配置了的Servlet。因此,DispatcherServlet配置了,它将在容器启动时被加载。随后,DispatcherServlet会根据配置的contextConfigLocation参数指定的位置加载SpringMVC的配置文件,通常是一个XML文件,用于初始化SpringMVC框架。

一旦SpringMVC初始化完成,它就能够拦截并处理Web应用中的请求,并根据配置的处理器映射和控制器进行相应的业务处理和视图返回。

用于配置Servlet的映射路径,指定哪些请求能够被该Servlet处理。在SpringMVC中,DispatcherServlet是用于处理所有请求的核心控制器,因此的配置方式决定了哪些请求会交给DispatcherServlet进行处理。

在web.xml中,可以按照以下几种方式进行配置:

  1. 精确路径匹配:/path 表示只有请求路径为/path的请求会被该Servlet处理,其他路径的请求将被其他Servlet或处理。
  2. 通配符匹配:*.do 表示以.do结尾的请求路径都会被该Servlet处理,例如/example.do/test.do等。
  3. 目录匹配:/dir/* 表示以/dir/开头的所有请求路径都会被该Servlet处理,例如/dir/test/dir/subdir/file等。
  4. 默认匹配:/ 表示所有请求路径都会被该Servlet处理,相当于将该Servlet设置为Web应用的默认Servlet,用于处理所有请求。

需要注意的是,的配置会影响Servlet的处理优先级,如果有多个Servlet配置了相同的,容器会按照它们在web.xml中的顺序进行匹配,找到最先匹配的Servlet来处理请求。因此,如果存在多个Servlet配置了相同的,应确保它们的配置顺序是符合要求的。在SpringMVC中,通常将配置为/,使DispatcherServlet成为默认的Servlet来处理所有请求。

优先级

在启动web应用时,容器会先加载监听器(如ContextLoaderListener),然后再加载SpringMVC(DispatcherServlet)。这是因为在web.xml中配置了监听器的标签,其中定义了监听器的,容器会根据这个类名实例化并初始化监听器,从而在应用启动时执行监听器的contextInitialized()方法。

在SpringMVC中,DispatcherServlet是用于处理所有请求的核心控制器,需要在web.xml中配置servlet-mapping来将其与请求路径关联起来。通常,配置为一个非负整数(如1),表示容器在启动时会优先加载并初始化这个Servlet。这样,在应用启动时,监听器会先被加载并执行,然后再加载并初始化DispatcherServlet,确保整个Spring容器以及MVC配置都准备好处理请求。

总结起来,web应用启动时的加载顺序通常是:

  1. 加载监听器,执行监听器的contextInitialized()方法,初始化Spring容器。
  2. 加载DispatcherServlet,准备处理请求。

是web.xml中元素的一个子元素,用于指定Servlet在应用启动时的加载顺序。它的取值可以是一个正整数或者负整数,或者也可以不设置。

  1. 设置为正整数:表示该Servlet在容器启动时会被立即加载和初始化。数值越小的Servlet会先被加载和初始化,数值相同的Servlet按照它们在web.xml中的顺序依次加载和初始化。
  2. 设置为负整数或不设置:表示该Servlet在第一次接收到请求时才会被加载和初始化。这种情况下,Servlet会延迟加载,只有在实际需要时才会被初始化。

通常情况下,对于在应用启动时需要进行初始化的Servlet,将设置为正整数,以确保在应用启动时立即加载和初始化。

6.3、Controller类及视图页面

这里渲染的视图是JSP,想要渲染HTML是springBoot部分的内容。

SpringMVC组件_第5张图片

6.4、配置注解

SpringMVC组件_第6张图片

6.5、spring-mvc.xml




    
    
        
    

    
    
        
        
        
    

6.6、客户端发请求

SpringMVC组件_第7张图片

SpringMVC组件_第8张图片

7、组件解析

7.1、执行流程

SpringMVC组件_第9张图片

SpringMVC的执行流程

① 用户发送请求至前端控制器DispatcherServlet。

② DispatcherServlet收到请求调用HandlerMapping处理器映射器。

③ 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果

有则生成)一并返回给DispatcherServlet。

④ DispatcherServlet调用HandlerAdapter处理器适配器。

⑤ HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

⑥ Controller执行完成返回ModelAndView。

⑦ HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

⑧ DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

⑨ ViewReslover解析后返回具体View。

⑩ DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户

7.2、解析

SpringMVC组件解析

1. 前端控制器:DispatcherServlet

用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由

它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。

2. 处理器映射器:HandlerMapping

HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的

映射方式,例如:配置文件方式,实现接口方式,注解方式等。

3. 处理器适配器:HandlerAdapter

通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理

器进行执行。

4. 处理器:Handler

它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由

Handler 对具体的用户请求进行处理。

5. 视图解析器:View Resolver

View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即

具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

6. 视图:View

SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最

常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面

8、注解解析

8.1、@RequestMapping

作用:用于建立请求 URL 和处理请求方法之间的对应关系

位置:

 类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录

 方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径

属性:

value:用于指定请求的URL。它和path属性的作用是一样的

method:用于指定请求的方式

params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样

例如:

params = {"accountName"},表示请求参数必须有accountName

params = {"moeny!100"},表示请求参数中money不能是100

8.2、xml

SpringMVC组件_第10张图片

SpringMVC组件_第11张图片

SpringMVC组件_第12张图片

8.3、知识要点

SpringMVC的相关组件

  1. 前端控制器:DispatcherServlet
  2. 处理器映射器:HandlerMapping
  3. 处理器适配器:HandlerAdapter
  4. 处理器:Handler
  5. 视图解析器:View Resolver
  6. 视图:View

SpringMVC的注解和配置

  1. 请求映射注解:@RequestMapping
  2. 视图解析器配置:
    1. REDIRECT_URL_PREFIX = "redirect:"
    2. FORWARD_URL_PREFIX = "forward:"
    3. prefix = "";
    4. suffix = "";

你可能感兴趣的:(JavaEE,Spring,spring,java,后端,SpringMVC,mvc)