SpringMVC:从入门到精通,7篇系列篇带你全面掌握--一.SpringMVC的工作流程【内附完整流程图】

目录

一.SpringMVC是什么

二.为什么要使用 SpringMVC

三. SpringMVC的工作流程【附有超详细流程图】

四. SpringMVC的入门小案例

配置pom.xml

创建spring-mvc.xml

配置web.xml

运用SpringMVC注解配置Web层

jsp页面

运行结果

小贴士:关于 SpringMVC中的注解

五.SpringMVC处理静态资源


🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于SpringMVC的相关操作吧

一.SpringMVC是什么

        SpringMVC是Spring提供的一个强大而灵活的web框架,借助于注解,Spring MVC提供了几乎是POJO的开发模式【POJO是指简单Java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的Java对象。POJO让开发者可专注于业务逻辑和脱离框架的单元测试。可以把POJO看作是一个普通的Java类,它具有简单、灵活和可扩展的编程模型,使开发人员可以专注于业务逻辑的实现,而不需要过多考虑框架相关的规范和限制】,使得控制器的开发和测试更加简单。它是一个基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFramework的后续产品,已经融合在Spring Web Flow中 ,你可以把SpringMVC看作是一个控制器,它负责处理用户请求并返回响应。在SpringMVC中,控制器(Controller)、视图(View)和模型(Model)是分离的。控制器负责处理用户请求并返回响应,视图负责显示数据,模型负责存储数据

二.为什么要使用 SpringMVC

  1. 清晰的角色划分:SpringMVC将控制器(controller)、验证器(validator)、命令对象(command object)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、试图解析器(view resolver)等等。每一个角色都可以由一个或多个组件来实现,这样的设计使得开发人员可以更加专注于业务逻辑的实现

  2. 无需配置:SpringMVC是一个典型的轻量级MVC框架,相对于之前的struts2框架,SpringMVC运行更快,其注解式开发更高效灵活。可以和Spring框架无缝整合

  3. 代码可重用性高:SpringMVC支持RESTful风格的URL设计和参数传递,这使得代码具有很好的可读性和可维护性

  4. 易于测试:SpringMVC支持JUnit和Mockito等测试框架,这使得开发人员可以更加方便地进行单元测

三. SpringMVC的工作流程【附有超详细流程图】

关于流程图的详细说明

  1. 用户发送请求到前端控制器(DispatcherServlet
  2. 前端控制器(DispatcherServlet)根据请求信息调用处理器映射(HandlerMapping
  3. 处理器映射器(HandlerMapping)根据 URL/请求参数找到具体的处理(Handler)生成处理器对象及处理器拦截器(如果有则生成)一并返回给前端控制器(DispatcherServlet)
  4. 前端控制器(DispatcherServlet)通过处理器适配器(HandlerAdapter)执行Handle
  5. 处理器处理请求(调用方法处理业务逻辑)
  6. 将结果封装成 ModelAndView 对象并且返回
  7. 前端控制器(DispatcherServlet)将 ModelAndView 对象传给视图解析器(ViewResolver),之后返回视图ModelAndView
  8. 视图解析器(ViewResolver)根据 ModelAndView 对象找到对应的视图(View
  9. 返回真正的视图对象
  10. 将视图进行渲染
  11. 返回渲染完毕的视图
  12. 前端控制器(DispatcherServlet)将响应内容写到响应对象中,响应对象返回给客户端

        其实明白了流程之后,我们便可以很好的将其总结出来了,无非就是用户发送请求到前端控制器,前端控制器根据请求信息(如 URL)来决定选择哪一个页面控制器进行处理并把请求委托给它。页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在 Spring Web MVC 中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个 ModelAndView(模型数据和逻辑视图名)。前端控制器收回控制权,然后根据返回的逻辑视图名,把模型数据传入,选择相应的视图进行渲染

        更加通俗的话,可以举一个例子来熟知,当你在淘宝购物时,你打开了某个商品页面,这个页面是由淘宝的前端控制器根据请求信息(如 URL)来决定选择哪一个页面控制器进行处理并把请求委托给它。接着,该页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象(例如商品信息),然后将命令对象委托给业务对象(例如卖家)进行处理;处理完毕后返回一个 ModelAndView(模型数据和逻辑视图名)。最后,前端控制器收回控制权,并根据返回的逻辑视图名选择相应的视图进行渲染,并把模型数据传入以便视图渲染。

四. SpringMVC的入门小案例

配置pom.xml

首先需要再pom.xml中进行配置,导入相关依赖

<!-- jstl-->
<jstl.version>1.2</jstl.version>
<!-- standard -->
<standard.version>1.1.2</standard.version>
<!-- spring -->
<spring.version>5.0.2.RELEASE</spring.version>




<!-- 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>

创建spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/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"
       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及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <context:component-scan base-package="com.wh"/>

    <!--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>

配置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>

运用SpringMVC注解配置Web层

package com.wh.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author 王辉
 * @site www.shihuihuila.com
 * @create 2023-09-04 18:47
 */

@Controller
@RequestMapping("/smvc1")
public class Springmvc1 {
    @RequestMapping("/print")
    public String test(){
        return "hello_huihui";
    }
}

jsp页面

<%--
  Created by IntelliJ IDEA.
  User: W
  Date: 2023/9/4
  Time: 18:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMVC测试</title>
</head>
<body>
💗💗I LOVE YOU!!💗💗
</body>
</html>

运行结果

小贴士:关于 SpringMVC中的注解

下列都为SpringMVC中的常用注解

  • 1. @Controller:用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象。分发处理器将会扫描使用了该注解的类,并将其注册为一个控制器 
  • 2. @RequestMapping:用于映射请求路径和处理请求的方法 
  • 3. @RequestParam:用于从请求参数中获取值,可以指定参数的名称、是否必须、默认值等
  • 4. @PathVariable:用于获取URL中的参数值,可以指定参数的名称
  • 5. @ModelAttribute:用于将请求参数绑定到模型对象上
  • 6. @RequestBody:用于将请求体中的数据绑定到方法参数上
  • 7. @ResponseBody:用于将方法返回值绑定到响应体上

五.SpringMVC处理静态资源

        如果访问不了静态资源,那或许是因为DispatcherServlet拦截了所有的请求,同时对静态资源的访问也被拦截了。如果你的DispatcherServlet拦截“/”,那么所有的请求都会被拦截,包括对静态资源的访问

那么我们只需要在Spring-mvc中添加一行代码,便可让静态资源成功被访问

 <mvc:resources location="/static/" mapping="/static/**"/>

如此便可以访问静态资源了

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊  

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是辉辉啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值