不得不看的SpringMVC篇!!!(概述+SpringMVC运行流程+SpringMVC搭建)

Posted 月下赶路人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不得不看的SpringMVC篇!!!(概述+SpringMVC运行流程+SpringMVC搭建)相关的知识,希望对你有一定的参考价值。

文章目录

SpringMVC

SpringMVC概述

首先我们了解一下经典的MVC模式,MVC全称Model View Controller,M指业务模型,V指用户界面,C指控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。Spring MVC属于SpringFrameWork的后续产品。

SpringMVC是Spring框架的一个模块,SpringMVC和Spring无需通过中间整合层进行统一整合,已经融合在Spring Web Flow里面。SpringMVC是一个基于MVC的web框架,方便前后端进行数据的传输。SpringMVC拥有控制器,接收外部请求,解析参数传给服务层。

SpringMVC的运行流程

我们回顾一下我们使用Servlet来完成web项目,如下图:

使用Servlet来完成web项目时,我们通过Servlet来处理用户页面和数据库之间的数据交互,那时候我们所有的Servlet层代码都需要我们自己去写入,并且会有大量的“重复”代码,严重降低了我们开发的效率,使我们不能专注于业务,SpringMVC就可以很好的为我们解决这一问题。

1.用户向服务器发送请求,请求被Spring前置控制器DispatcherServlet捕获;

2.前端控制器DispatcherServlet接收到请求后,调用映射处理器HandlerMapping。处理器HandlerMapping根据请求的url找到处理该请求的处理器Handler(即Controller),将处理器Handler返回给前端控制器DispatcherServlet。

3.DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter。在填充Handler的入参过程中,根据配置,Spring会做出一些额外的工作:

(1)HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应消息。

(2)数据转换:对请求消息进行数据转换。如String转换为Integer、Double等。

(3)数据格式化:对请求消息进行数据格式化。如将字符串转换为格式化数字或格式化日期等等。

(4)数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。

4.Handler控制器执行完毕后,会向DispatcherServlet返回一个ModelAndView对象。

5.根据返回的ModelAndView,选择一个适合的ViewResolver视图解析器(必须是已经注册到Spring中的视图解析器)返回给DispacherServlet;

6.ViewResolver结合Model和View来渲染视图;

7.将渲染后的结果响应给客户端。

搭建SpringMVC

搭建完整的SpringMVC项目需要在spring的基础上进行,大家可以阅读我的这几篇文章进行学习

学习Spring之前必读的文章,Spring框架第0章(Spring核心+优点+体系结构+简单搭建)

Spring框架的IOC设计思想+Spring的Bean管理

一文搞懂SpringAOP(面向切面编程)

Spring事务特征+Spring事务管理+实现+Spring七种事务传播行为+集成MyBatis

1.导入SpringMVC的相关jar包

<!--SpringMVC依赖的jar包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

如果使用jsp的el表达式,还需要导入jstl的jar包

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!--加servlet-->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

2.配置DispatcherServlet

DispatcherServlet是从HttpServlet中继承而来。所以它是一个标准的Servlet,因此我们需要在web.xml文件中进行配置,使它在启动时加载Spring配置文件。

在web.xml文件中配置:

	<!--配置spring核心请求分发的的DisPatcherServlet-->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--把Spring的配置文件交给contextConfogLocation-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <!--服务器启动时就初始化DispatcherServlet和启动 spring-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <!--
        请求映射
        所有的请求都会进入DispatcherServlet(分发器)
    -->
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3.开启SpringMVC注解

在Spring.xml文件中配置开启SpringMVC注解

<!--开启SpringMVC的注解功能-->
<mvc:annotation-driven></mvc:annotation-driven>

4.配置视图解析器

在Spring.xml文件中配置视图解析器

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    <!--控制器返回的所有视图界面的prefix(前缀)都要为value-->
    <property name="prefix" value="/WEB-INF/pages/"></property>
    <!--控制器返回的所有视图界面的suffix(后缀)都要为value-->
    <property name="suffix" value=".jsp"></property>
</bean>

5.控制器类的搭建

我们使用@Controller注解标签标记SpringMVC的Controller对象,即控制器类。同时,我们也要使用RequestMapping注解来标记请求地址映射,可用在类或方法上。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;


@Controller//扫描到这个类后交给IOC管理,用于创建对象,默认是单例的,多线程情况下线程不安全
@RequestMapping(path = "/user")//指定一个映射的地址,属性为value或path都一样,可以指定多个,
public class UserController 

    @RequestMapping(path = "/toLogin")//指定请求方式
    public ModelAndView toLogin() 
        System.out.println("toLogin");
        ModelAndView mv = new ModelAndView("login");;
        return mv;
    


这时当我们要访问toLogin()方法是的路径就是/user/toLogin

以上是关于不得不看的SpringMVC篇!!!(概述+SpringMVC运行流程+SpringMVC搭建)的主要内容,如果未能解决你的问题,请参考以下文章

收藏前端学习你不得不看的优质文章——补充前端知识,常看常新

Eclipse运行Maven的SpringMVC项目Run on Server时出现错误:Error configuring application listener of class org.spr

SpringMVC原理剖析

初步接触springMVC

做数据分析不得不看的书有哪些?

初识SpringMVC