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 应用程序。

相关推荐
qq_三哥啊2 小时前
【IDEA】设置Debug调试时调试器不进入特定类(Spring框架、Mybatis框架)
spring·intellij-idea·mybatis
别惹CC3 小时前
Spring AI 进阶之路01:三步将 AI 整合进 Spring Boot
人工智能·spring boot·spring
寒士obj3 小时前
Spring事物
java·spring
IT毕设实战小研11 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
甄超锋13 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
Java小白程序员16 小时前
Spring Framework:Java 开发的基石与 Spring 生态的起点
java·数据库·spring
甄超锋17 小时前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
还是鼠鼠18 小时前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
还是大剑师兰特19 小时前
Spring面试题及详细答案 125道(1-15) -- 核心概念与基础1
spring·大剑师·spring面试题·spring教程
python_13621 小时前
web请求和响应
java·spring·github