SpringMVC入门

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: SpringMVC入门

一、介绍

1.1什么是SpringMVC?


SpringMVC是一种基于Java的Web开发框架,它是Spring框架的一部分。SpringMVC主要用于开发MVC(模型-视图-控制器)架构的Web应用程序。它提供了一组组件和工具,用于处理HTTP请求和响应,以及实现业务逻辑和用户界面的分离。


SpringMVC的核心思想是将应用程序的不同层次进行分离,使得开发人员可以更加专注于业务逻辑的实现。它通过将请求的处理逻辑委托给控制器类来处理用户请求,并且使用视图模板引擎来渲染响应的视图。


SpringMVC还提供了一些特性和功能,如请求映射、数据绑定、表单验证、国际化支持、文件上传等,以帮助开发人员更加高效地开发Web应用程序。


总之,SpringMVC是一个灵活、可扩展且功能强大的Web开发框架,它可以帮助开发人员快速构建可靠的Web应用程序。


1.2SpringMVC的特点和优势


SpringMVC具有许多特点和优势,使其成为流行的Java Web应用程序开发框架之一:


分层结构:SpringMVC遵循经典的MVC(Model-View-Controller)模式,将应用程序分为模型、视图和控制器,提供了清晰的代码分离,有助于更好地组织和维护应用程序。


松散耦合:SpringMVC通过依赖注入和控制反转(IoC)容器实现松散耦合,使应用程序组件之间的关联更加灵活,容易进行单元测试和替换组件。


注解支持:SpringMVC提供了丰富的注解,如@Controller、@RequestMapping等,使开发者能够轻松配置和映射URL到控制器方法,减少了XML配置的需求,提高了代码的可读性。


灵活的视图解析:SpringMVC支持多种视图技术,允许开发者选择适合项目的视图解析器,包括JSP、FreeMarker、Thymeleaf等。


强大的数据绑定:SpringMVC自动将HTTP请求参数绑定到Java对象,简化了数据传输和验证。它还支持数据格式化和转换。


拦截器:开发者可以定义拦截器来处理请求和响应,执行通用的操作,如身份验证、日志记录、性能监控等。


国际化和本地化:SpringMVC提供了本地化和国际化的支持,允许开发者轻松地创建多语言和多地区的应用程序。


RESTful Web服务支持:SpringMVC具备构建RESTful风格的Web服务的能力,支持HTTP方法映射和内容协商,使开发者能够创建符合REST架构的API。


丰富的生态系统:Spring生态系统提供了许多扩展和插件,如Spring Security(身份验证和授权)、Spring Data(数据访问)、Spring Boot(快速应用程序开发)等,可以与SpringMVC无缝集成。


成熟和广泛采用:SpringMVC是一个成熟的框架,已经在许多大型和小型项目中广泛使用,有大量的社区支持和文档资源可用。


总之,SpringMVC的特点和优势包括了清晰的分层结构、松散耦合、注解支持、灵活的视图解析、强大的数据绑定、拦截器支持、国际化和本地化、RESTful支持以及丰富的生态系统,这些特点使其成为一款强大、灵活且可扩展的Java Web应用程序开发框架。


1.3SpringMVC的应用场景

SpringMVC适用于许多不同类型的Web应用程序开发场景,包括但不限于以下情况:


传统Web应用程序:SpringMVC是构建传统的Web应用程序的理想选择,可以用于创建基于浏览器的用户界面,处理表单提交,展示动态内容等。


RESTful Web服务:SpringMVC提供了强大的支持,可用于构建RESTful风格的Web服务,通过HTTP方法映射和内容协商,使开发者能够创建Web API。


单页应用程序(SPA):当构建单页应用程序时,SpringMVC可以用于提供后端支持,处理RESTful请求和提供数据服务,与前端框架(如React、Angular、Vue.js)一起使用。


微服务架构:在微服务架构中,SpringMVC可以用作微服务的前端控制器,处理外部请求并将其路由到适当的微服务。


企业级应用程序:SpringMVC适用于开发大型企业级应用程序,具备复杂的业务逻辑、安全性需求和数据库交互。


跨平台应用程序:由于Java的跨平台特性,SpringMVC可以用于构建跨不同操作系统和浏览器的Web应用程序。


社交媒体和电子商务:SpringMVC可以用于构建社交媒体平台、在线购物网站和其他需要大量用户交互和数据处理的应用程序。


后端服务:除了Web应用程序,SpringMVC还可以用于构建后端服务,例如RESTful API服务、消息队列消费者等。


移动应用程序后端:SpringMVC可以为移动应用程序提供后端支持,处理移动应用程序的请求和数据交互。


SpringMVC在各个应用场景的作用:



传统Web应用程序:就像建造一座传统的家,有前院、后院、客厅和卧室,每个房间都有不同的用途和功能,例如前院用于展示、后院用于休息,SpringMVC帮助构建这种多功能的Web应用程序,以便满足各种用户需求。


RESTful Web服务:类似于建设一个快递服务,你需要一个中央调度中心来处理所有包裹的分发,SpringMVC的DispatcherServlet就像这个中央调度中心,将不同的HTTP请求分发到合适的处理程序,从而构建出支持RESTful架构的Web服务。


单页应用程序(SPA):想象一下你在设计一个互动式的迷宫游戏,玩家可以在不同房间之间移动,而SpringMVC就像是这个游戏的引导程序,根据玩家的行动将他们引导到正确的房间,从而实现前后端的交互。


微服务架构:将微服务比喻成一组小餐馆,每个餐馆提供特定类型的美食,而SpringMVC就像是这些餐馆的前台服务员,接待顾客并将他们引导到适当的餐馆,确保服务的顺畅。


企业级应用程序:企业级应用程序就像是一家大型百货商店,有各种各样的部门和服务,而SpringMVC则扮演着商店的导购员的角色,帮助顾客找到他们需要的商品并提供帮助。


跨平台应用程序:想象你正在建造一个多功能的游乐场,游客可以来自不同的城市和国家,而SpringMVC就像是游乐场的入口,帮助游客顺利进入并享受不同的游乐设施。


社交媒体和电子商务:社交媒体平台就像一个大型社交聚会,而电子商务网站就像是一个购物中心,SpringMVC充当了活动组织者和购物顾问的角色,协助用户参与社交活动和购物体验。


后端服务:后端服务就像是一个快递中心,处理各种不同类型的包裹和请求,SpringMVC就像是这个中心的管理者,确保包裹按时送达和请求得到处理。


移动应用程序后端:移动应用程序后端就像是一家出租汽车服务,处理不同用户的请求并提供相应的服务,SpringMVC则扮演了服务接待员的角色,协助用户完成他们的需求。


总之,SpringMVC是一款多功能的框架,适用于各种Web应用程序开发场景,从传统的Web应用程序到现代的RESTful API服务,都可以使用它来简化开发工作、提高可维护性和扩展性。它的灵活性和丰富的功能使得它成为Java Web开发的首选框架之一。

二、SpringMVC的基本原理

MVC架构模式简介

MVC(Model-View-Controller)是一种常用的软件架构模式,用于设计和组织应用程序的代码。它将一个应用程序分成三个主要部分,每个部分都有不同的责任和功能,以便实现分离关注点和增强代码的可维护性和可扩展性。


以下是 MVC 架构模式的三个核心组件:


模型(Model):


模型代表应用程序的数据和业务逻辑。

它负责管理数据的存储、检索和处理,以及定义应用程序的核心功能。

模型通常是应用程序的后端组件,负责处理数据持久化、验证和处理。

视图(View):


视图是用户界面的可视部分,负责将数据呈现给用户。

它通常是应用程序的前端组件,负责展示数据、接受用户输入和呈现用户界面。

视图通常不包含业务逻辑,仅负责展示数据和接收用户交互。

控制器(Controller):


控制器是模型和视图之间的中介,负责处理用户的输入和业务逻辑。

它接收用户的请求,将请求传递给相应的模型进行处理,然后更新视图以反映模型的状态变化。

控制器充当了应用程序的协调者,确保模型和视图之间的分离性。


947d89d09ec0a13a346c377a792951d3.png


MVC 架构的优势包括:


分离关注点(Separation of Concerns): MVC 将应用程序的不同方面分开,使得代码更易于维护和理解。

可扩展性: 由于各个组件相对独立,因此可以更容易地扩展应用程序的功能。

重用性: 模型、视图和控制器之间的分离使得可以重用这些组件,减少了代码重复。

团队协作: 不同团队成员可以专注于各自的组件,从而提高开发效率。

需要注意的是,MVC 是一种经典的架构模式,有许多变体和衍生版本,如MVC、MVP(Model-View-Presenter)、MVVM(Model-View-ViewModel)等,用于不同的应用场景和技术栈。选择适合项目需求的架构模式是很重要的决策。



SpringMVC的工作流程



客户端发送HTTP请求到前端控制器DispatcherServlet。

DispatcherServlet接收到请求后,根据请求的URL找到对应的处理器HandlerMapping。

HandlerMapping根据请求的URL找到对应的处理器HandlerAdapter。

HandlerAdapter将请求转发给处理器Handler。

Handler根据请求的内容进行处理,并生成ModelAndView对象。

Handler将处理结果封装到ModelAndView对象中,并返回给HandlerAdapter。

HandlerAdapter将ModelAndView对象返回给DispatcherServlet。

DispatcherServlet将ModelAndView对象传递给视图解析器ViewResolver。

ViewResolver根据ModelAndView中的视图名称解析出具体的视图对象View。

View将ModelAndView中的数据渲染到视图中。

View将渲染后的视图返回给DispatcherServlet。

DispatcherServlet将视图返回给客户端。

三、SpringMVC核心组件

Spring MVC 的核心组件包括以下几个关键部分:


DispatcherServlet(前端控制器): DispatcherServlet是整个Spring MVC应用程序的前端控制器,负责接收并分发所有的HTTP请求。它是Spring MVC的入口点,协调整个请求处理过程。


HandlerMapping(处理器映射器): HandlerMapping负责将HTTP请求映射到相应的处理器(Controller)。它根据请求的URL或其他标识来确定应该由哪个Controller来处理请求。


HandlerAdapter(处理器适配器): HandlerAdapter负责执行实际的Controller处理方法。不同类型的Controller(如注解式、基于接口的等)可能需要不同的适配器来执行。


Controller(控制器): Controller是Spring MVC应用程序中的核心组件之一,它包含了应用程序的业务逻辑。Controller接收请求,处理请求,生成ModelAndView对象并将其返回给DispatcherServlet。


ModelAndView(模型与视图): ModelAndView是一个数据模型和视图名称的封装。Controller通常使用ModelAndView来包装要返回的数据模型和视图的名称。


ViewResolver(视图解析器): ViewResolver负责将视图名称解析为实际的视图对象。它根据配置文件或约定来查找视图模板,以便将数据模型渲染为最终的HTML响应。


View(视图): 视图负责将模型数据渲染到页面上,生成最终的HTML或其他响应内容。Spring MVC支持不同类型的视图,包括JSP、Thymeleaf、FreeMarker等。


拦截器(Interceptor): 拦截器允许您在请求处理前和请求处理后执行一些操作。它们用于实现跨越多个请求的通用功能,如身份验证、日志记录等。


ExceptionHandler(异常处理器): 异常处理器用于捕获和处理在请求处理过程中发生的异常。它们允许您定义全局的异常处理策略,以确保应用程序能够 graceful 处理异常情况。


数据绑定与验证(Data Binding and Validation): Spring MVC提供了数据绑定和验证的支持,使您能够将HTTP请求参数绑定到Controller方法的参数,并进行数据验证。

四、SpringMVC中的注解


Spring MVC 中的注解用于配置和定义控制器、请求映射、路径变量、请求参数等方面。以下是Spring MVC中常用的注解:


@Controller: 用于标识一个类为控制器,告诉Spring容器将其作为一个可处理HTTP请求的组件。通常与@RequestMapping一起使用。


@RequestMapping: 用于将请求映射到控制器方法。可以用于类级别和方法级别。它可以指定请求的URL路径、HTTP方法、请求参数等条件。


@GetMapping、@PostMapping、@PutMapping、@DeleteMapping: 这些注解用于分别映射GET、POST、PUT和DELETE请求。它们是@RequestMapping的缩写形式。


@PathVariable: 用于从URL路径中提取路径变量的值。例如,@GetMapping("/user/{id}")中的{id}可以通过@PathVariable注解获取。


@RequestParam: 用于从请求参数中获取值。可以指定参数名称和默认值。例如,@RequestParam("name") String userName会从请求参数中获取名为"name"的值,并将其赋给userName变量。


@RequestBody: 用于将HTTP请求体的内容绑定到Java对象。通常在处理POST请求时使用,将JSON或表单数据转换为对象。


@ResponseBody: 用于将Java对象的内容转换为HTTP响应体。通常在返回JSON或XML响应时使用。


@ModelAttribute: 用于在控制器方法中将模型属性添加到模型中,以便在视图中使用。可以用于方法参数和方法级别。


@SessionAttributes: 用于将模型属性保存到会话中,以便多个请求之间共享数据。


@Valid和@Validated: 用于启用数据验证,通常与Spring的验证框架一起使用,如Hibernate Validator。


@InitBinder: 用于自定义数据绑定规则,通常用于日期格式化、数据转换等自定义绑定操作。


@ResponseStatus: 用于指定HTTP响应的状态码和原因短语。


@ExceptionHandler: 用于捕获和处理特定异常类型的方法,以提供全局异常处理。


@CrossOrigin: 用于启用跨域请求支持,允许跨域请求访问控制器方法。

五、SpringMVC入门

5.1.添加pom.xml依赖

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>mybatis_spring</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>mybatis_spring Maven Webapp</name>
  <url>http://maven.apache.org</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>
        <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version>
        <!--添加jar包依赖-->
        <!--1.spring 5.0.2.RELEASE相关-->
        <spring.version>5.0.2.RELEASE</spring.version>
        <!-- jstl+standard -->
        <jstl.version>1.2</jstl.version>
        <standard.version>1.1.2</standard.version>
        <!-- spring -->
        <spring.version>5.0.2.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!--1.spring相关-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- spring mvc相关依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>${standard.version}</version>
        </dependency>
    </dependencies>
  <build>
      <finalName>mybatis_spring</finalName>
  </build>
</project>


5.2.创建spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<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"
       xmlns="http://www.springframework.org/schema/beans"
       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-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1) 扫描com.zking.zf及子子孙孙包下的控制器(扫描范围过大,耗时)
配置了Spring框架的组件扫描功能,指定了需要扫描的包路径。Spring将会自动扫描这个包及其子包中的类,并将其注册为Spring的组件。
-->
    <context:component-scan base-package="com.ctb"/>
    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven/>
    <!--3) 创建ViewResolver视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--4) 单独处理图片、样式、js等资源 -->
    <mvc:resources location="/css/" mapping="/css/**"/>
     <mvc:resources location="/js/" mapping="/js/**"/>
     <mvc:resources location="WEB-INF/images/" mapping="/images/**"/>
</beans>


5. 3.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  <!-- Spring和web项目集成start -->
  <!-- spring上下文配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-context.xml</param-value>
  </context-param>
  <!-- 读取Spring上下文的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- Spring和web项目集成end -->
  <!-- 中文乱码处理 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- Spring MVC servlet -->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--此参数可以不配置,默认值为:/WEB-INF/springmvc-servlet.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!--web.xml 3.0的新特性,是否支持异步-->
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>


5.4编写web层

package com.liao.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/mvc")
public class Springmvc1 {
    @RequestMapping("/print")
    public String test(){
        return "hello。world";
    }
}


六.静态资源处理

所有静态资源文件都会被spring-mvc.xml配置文件进行拦截,所以要添加配置,让处理器进行扫描,专门处理图片、样式、js等资源...

 <mvc:resources location="/css/" mapping="/css/**"/>
     <mvc:resources location="/js/" mapping="/js/**"/>
     <mvc:resources location="WEB-INF/images/" mapping="/images/**"/>

七、总结

SpringMVC的优势和不足

Spring MVC的优势包括:


灵活性:Spring MVC采用了松耦合的设计,可以与其他框架和技术无缝集成,如Spring框架、Hibernate、MyBatis等。


可扩展性:Spring MVC使用了基于接口的设计,可以方便地进行自定义扩展,满足不同项目的需求。


易于测试:Spring MVC的控制器和业务逻辑可以通过单元测试进行测试,提高代码质量和可维护性。


强大的请求处理能力:Spring MVC提供了丰富的注解和配置选项,可以灵活地处理各种类型的请求,如GET、POST、PUT、DELETE等。


响应速度快:Spring MVC使用了基于注解的处理方式,可以提高请求的响应速度

Spring MVC的不足包括:


学习曲线较陡峭:相比于其他简单的框架,Spring MVC的学习曲线较陡峭,需要对Spring框架的核心概念和设计原理有一定的了解。


配置繁琐:Spring MVC的配置文件较多,需要进行详细的配置,对于初学者来说可能会感到繁琐。


缺乏一些高级特性:相比于其他一些主流的Web框架,如Spring Boot、Node.js等,Spring MVC在某些高级特性方面可能有所欠缺。


性能较低:相比于一些轻量级的Web框架,如Play Framework、Express.js等,Spring MVC的性能可能较低一些,特别是在高并发的情况下。


线程模型不够灵活:Spring MVC采用的是传统的Servlet线程模型,每个请求都会创建一个线程,对于大量的并发请求可能会导致线程资源的浪费。

目录
相关文章
|
设计模式 前端开发 Java
SpringMVC系列(一)之SpringMVC入门详细介绍
SpringMVC系列(一)之SpringMVC入门详细介绍
|
6月前
|
前端开发 Java 应用服务中间件
|
6月前
|
JSON 前端开发 Java
SpringMVC(一)【入门】
SpringMVC(一)【入门】
|
7月前
|
XML 存储 前端开发
SpringMVC入门
SpringMVC入门
37 0
|
XML 前端开发 Java
SpringMVC之入门
SpringMVC之入门
59 0
|
存储 设计模式 前端开发
SpringMvc入门
SpringMvc入门
66 0
|
前端开发 Java 应用服务中间件
SpringMVC学习
SpringMVC学习
55 0
|
前端开发 Java 应用服务中间件
一文带你入门SpringMVC
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。 Spring MVC的特点: 轻量级,简单易学 高效 , 基于请求响应的MVC框架 与Spring兼容性好,无缝结合 约定优于配置 功能强大:RESTful、数据验证、格式化、本地化、主题等 简洁灵活
136 1
一文带你入门SpringMVC
|
前端开发 Java 测试技术
springMVC学习总结
springMVC学习总结
124 0
springMVC学习总结
|
设计模式 JSON 缓存