Spring MVC 框架基础

一、简介

Spring MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架。它通过将 web 层进行职责解耦,简化了日常的 Web 开发。Spring MVC 与 Spring 框架紧密集成,提供了强大的约定大于配置的契约式编程支持,使得 Web 层的开发更加简洁和易于维护。

二、SpringMVC的作用

干净的Web层设计:Spring MVC 提供了清晰的分层架构,允许开发者设计出干净的Web层。

简洁的Web层开发 :通过注解(如 @RequestMapping)来映射 HTTP 请求到控制器的具体方法,请求参数可以直接映射到方法的参数上。

与Spring框架集成:Spring MVC 天生与 Spring 框架集成,包括IoC容器和AOP。

约定大于配置:虽然Spring MVC不是完全的"约定大于配置",但它确实提供了一系列的默认配置,减少了开发者的配置负担。

单元测试友好:Spring MVC 的设计使得Web层的单元测试变得简单。

灵活的URL映射:通过使用注解或XML配置,可以轻松实现URL到控制器方法的映射。

视图技术集成:Spring MVC 与多种视图技术集成良好,如 Velocity、FreeMarker 等。

数据验证、格式化和绑定:Spring MVC 提供了强大的验证、格式化和数据绑定机制,可以与任何对象一起工作。

JSP标签库:Spring MVC 提供了一套强大的 JSP 标签库,简化了 JSP 页面的开发。

本地化和主题解析:支持国际化(i18n)和主题(themes)。

异常处理:Spring MVC 提供了简单的异常处理机制。

静态资源支持:通过配置,Spring MVC 可以轻松地处理静态资源。

Restful风格支持:Spring MVC 支持通过注解创建 RESTful Web 服务。

三、Spring Web MVC处理请求的流程

(1)核心组件

Spring MVC 的核心组件包括:

  1. 前端控制器(DispatcherServlet):作为中央调度器,它负责接收请求并决定将请求转发到哪个处理器(Controller)。
  2. 处理器映射器(HandlerMapping):负责根据请求的 URL 查找相应的处理器。
  3. 处理器适配器(HandlerAdapter):负责调用具体的处理器(Controller),这是通过适配器模式实现的。
  4. 视图解析器(ViewResolver):负责将处理器(Controller)返回的视图名称解析为具体的视图(View)。
  5. 处理器(Controller):负责处理用户的请求,并返回模型和视图。

(2)处理请求的流程

  1. 用户发送请求到前端控制器(DispatcherServlet)。
  2. 前端控制器请求处理器映射器(HandlerMapping)查找处理器(Controller)。
  3. 处理器映射器返回找到的处理器给前端控制器。
  4. 前端控制器调用处理器适配器(HandlerAdapter)执行处理器。
  5. 处理器执行完成后,返回模型和视图(ModelAndView)给适配器。
  6. 处理器适配器将模型和视图返回给前端控制器。
  7. 前端控制器请求视图解析器(ViewResolver)解析视图。
  8. 视图解析器解析后返回视图给前端控制器。
  9. 前端控制器进行视图渲染,即将模型数据填充到视图。
  10. 前端控制器将最终的响应发送给用户。

四、SpringMVC的入门程序

(1)环境搭建

首先,创建一个 Maven 的 Web 项目,并添加 Spring MVC 的依赖:

XML 复制代码
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.15.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>

(2)配置前端控制器

web.xml 中配置前端控制器:

XML 复制代码
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

(3)配置配置处理器映射器

在Springmvc.xml配置文件中配置处理器映射器:

XML 复制代码
   <!--处理器映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

(4)配置处理器适配器

在springmvc.xml文件配置处理器适配器:

XML 复制代码
<!--处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

(5)配置视图解析器

在springmvc.xml文件配置视图解析器:

XML 复制代码
<!-- 配置视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
		<property name="prefix" value="/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

(6)开发第一个控制器

创建一个简单的控制器来处理请求:

java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {
    @RequestMapping("/hello")
    public ModelAndView sayHello() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", "Hello Spring MVC!");
        modelAndView.setViewName("hello");
        return modelAndView;
    }
}

(7)开发视图

创建一个简单的 JSP 页面来显示控制器传递的消息:

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello Spring MVC</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>

(8)部署与测试

将应用部署到 Tomcat 服务器上,并在浏览器中访问 http://localhost:8080/yourapp/hello,你将看到 "Hello Spring MVC!" 的消息。

总结

Spring MVC 作为 Spring 框架的核心模块之一,为构建灵活且易于维护的 Web 应用程序提供了强有力的支持。通过其独特的 MVC 设计模式,Spring MVC 将应用程序分为模型(Model)、视图(View)和控制器(Controller),使得各个部分的职责清晰分离,从而提高了代码的可读性和可维护性。

在模型(Model)部分,Spring MVC 允许开发者定义数据模型和业务逻辑,这些模型可以是简单的 POJOs,也可以是复杂的业务对象。视图(View)部分则负责展示数据,Spring MVC 支持多种视图技术,包括 JSP、Thymeleaf 和 FreeMarker 等,使得开发者可以灵活选择适合项目需求的视图技术。控制器(Controller)作为模型和视图之间的桥梁,负责接收用户请求、处理业务逻辑并选择适当的视图进行响应。

Spring MVC 的请求处理流程是其核心特性之一,它通过 DispatcherServlet 作为前端控制器来分发请求到不同的处理器。处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)和视图解析器(ViewResolver)等组件协同工作,确保了请求的高效处理和视图的灵活渲染。

Spring MVC 还提供了丰富的高级特性,如异常处理、文件上传、拦截器等,这些特性使得开发者可以轻松实现复杂的业务需求。异常处理器(HandlerExceptionResolver)允许全局处理异常,拦截器(Interceptor)则可以在请求处理的不同阶段执行代码,如身份验证、日志记录等。

此外,Spring MVC 支持 RESTful 风格的 URL 设计,使得开发者可以构建出符合现代 Web 应用设计原则的接口。通过注解和配置,Spring MVC 使得数据绑定、类型转换和消息转换变得简单直观。

总的来说,Spring MVC 不仅是一个功能强大的 Web 框架,更是一个灵活、可扩展的平台,它通过提供一系列约定和组件,使得开发者可以专注于业务逻辑的实现,而无需关心底层的请求处理和数据渲染。随着 Spring 5 的发布,Spring MVC 也在不断地进化和完善,为开发者提供了更加丰富和高效的工具来构建企业级的 Web 应用程序。

相关推荐
路在脚下@3 小时前
Spring如何处理循环依赖
java·后端·spring
丁总学Java4 小时前
--spring.profiles.active=prod
java·spring
weisian1515 小时前
Redis篇--常见问题篇8--缓存一致性3(注解式缓存Spring Cache)
redis·spring·缓存
一只淡水鱼666 小时前
【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响
sql·spring·mybatis·sql注入
荆州克莱6 小时前
Golang的性能监控指标
spring boot·spring·spring cloud·css3·技术
AI人H哥会Java7 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
武昌库里写JAVA7 小时前
【MySQL】MySQL 通过127.0.0.1和localhost登录的区别
spring boot·spring·毕业设计·layui·课程设计
丁总学Java7 小时前
nohup java -jar productQualification.jar --spring.profiles.active=prod $
java·spring·jar
美美的海顿8 小时前
springboot基于Java的校园导航微信小程序的设计与实现
java·数据库·spring boot·后端·spring·微信小程序·毕业设计
一只淡水鱼6611 小时前
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
java·数据库·spring·mybatis