Spring MVC框架详解

本文详细介绍了SpringMVC框架,包括MVC模式的基本概念、SpringMVC的Controller优势、第一个Controller案例、前端控制器配置、视图解析器、编码过滤器、注解式Controller以及自定义处理器等。通过案例展示了Controller的实现原理,以及如何配置和使用。此外,还讨论了前端控制器的拦截路径、其他常用组件、请求方法映射限定和请求参数映射限定等关键概念。
摘要由CSDN通过智能技术生成

SpringMVC

一、了解什么是MVC

MVC模型:Model-View-Controller,模型-视图-控制器模式。

MVC是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的代码结构组织得更加合理。

  • Model(模型)

    数据模型,提供要展示的数据,因此包含数据和行为,行为是用来处理这些数据的。

    不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。

    也就是数据由实体类或者javabean来提供,行为由service层来提供。

  • View(视图)

    负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。

  • Controller(控制器)

    直接接收用户请求,委托给模型进行处理,处理完毕后把返回的模型数据交给给视图。

    也就是说控制器在中间起到一个调度的作用。

在我们之前的学习中,其实就是把Servlet作为Controller(控制器),把jsp作为View(视图),把javabean作为Model(模型)中的数据,service层作为Model(模型)中的行为。

注意:MVC和三层架构的区别

三层架构是整体后端服务架构,而MVC只是控制了视图和模型之间的关联关系。

可以理解为MVC只工作在三层中的Web层。

二、SpringMVC概述

SpringMVC就是Spring框架提供的一个模块,通过实现MVC模式来很好地将数据、业务与展现进行分离,SpringMVC框架的主要目的是简化Web层开发。

SpringMVC中提供了一种非常好用的组件Controller,它的功能基本与之前使用过的Servlet相同,但是比Servlet更加方便易用。它们都可以用来接受请求、获取参数、操作Session和Cookie、返回响应等。除此之外,SpringMVC还以Controller为核心,提供了一系列支持组件,共同维护Controller的功能。

Controller的优势:
  • 可以自定义Controller类型,无需像Servlet必须继承固定父类。
  • 可以在一个Controller类中处理多个请求,而Servlet通常一个类只能处理一个请求。
  • Controller中方法的参数可以根据自己的需求灵活定义,例如request、response、session等。
  • 可以根据请求参数自动封装并传入pojo对象。
  • 返回各类响应比Servlet方便,例如内部跳转、重定向、返回JSON格式对象等。
  • ……
注意:Controller其本身是不能直接接受HTTP请求的,Controller的实现原理实际上还是依赖于Servlet。可以理解为Controller就是对Servlet进行的封装。

SpringMVC框架跟其他的WebMVC框架一样,都是【请求驱动】,并且设计围绕一个能够分发请求到控制器以及提供其他加快web应用开发功能的核心Servlet(叫做DispatcherServlet,即前端控制器)。

Spring的DispatcherServlet实现比其他框架中还要多的功能。它和spring的ioc容器完全整合,并且允许使用Spring中其他的所有功能。

三、第一个Controller案例
1、搭建工程环境

创建一个新的Maven Web项目,名为springmvc。

2、导入依赖

需要导入的依赖如下:

<!-- Servlet核心依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<!-- JSTL标签库 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!-- Spring依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.29.RELEASE</version>
</dependency>
	
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.29.RELEASE</version>
</dependency>
3、配置前端控制器

SpringMVC中Controller的核心原理其实很简单,用一个核心Servlet拦截所有请求,再根据请求的URL转发至不同的Controller中进行处理。这个Servlet被称为【前端控制器】。接下来我们需要在web.xml中配置它:

<servlet>
    <!-- servlet-name可以自己随便起,和下面servlet-mapping中的name对应即可-->
    <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>
4、定义一个Controller

在com.briup.spring.web.controller包下创建一个类名为HelloController:

public class HelloController implements Controller {
   
	@Override
	public ModelAndView handleRequest(HttpServletRequest httpServletRequest,
			HttpServletResponse httpServletResponse) throws Exception {
   
        ModelAndView mav = new ModelAndView();
		// 设置视图名,也就是要跳转的页面
        mav.setViewName("/hello.jsp");
        // 向作用域中添加一组参数,用于页面显示
		mav.addObject("username", "tom");
		return mav;
	}
}

Controller是一个用来定义所有Controller控制器规范的接口,其中只有一个方法:handleRequest()

该方法类似我们之前在Servlet中service()或doGet()/doPost(),都是请求到来时调用的处理方法。

了解ModelAndView

ModelAndView是一种同时代表模型和视图的对象。我们通常都需要在控制器中指定将哪个模型渲染到哪些视图中,并且决定跳转到哪个视图。SpringMVC对这两项操作进行了封装,以一个ModelAndView对象同时表示两项操作。我们只需要通过设置属性的方式,将需要跳转的视图名称,以及需要展示到前端页面的数据设置到一个ModelAndView对象中即可。

5、将Controller配置到Bean容器中

Controller的作用是代替原先的Servlet接受Http请求,接下来我们需要为这个Controller定义URL映射规则。

我们需要将这个Controller定义到一个Bean容器配置文件中,类似之前Spring部分用到的xml配置文件。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值