SpringMVC概述、入门案例以及工作流程

目录

 

1、SpringMVC概述

1.1、SpringMVC概念

1.2、SpringMVC原理

1.3、SpringMVC优势

2、MVC模式回顾

3、入门程序

3.1 创建maven项目

3.2、 pom.xml文件添加依赖和插件

3.3、创建Spring和SpringMVC的配置文件

3.3.1、创建Spring配置文件applicationContext.xml文件

3.3.2、创建SpringMVC的配置文件springmvc.xml

3.4、在web.xml中进行Spring和SpringMVC配置

3.5 创建控制器

3.6 配置视图解析器

3.7 编写index.jsp页面

3.8 测试

3.9 解析

4、SpringMVC工作流程

4.1、工作流程分析

4.2 SpringMVC组件


1、SpringMVC概述

1.1、SpringMVC概念

        SpringMVC 也叫 Spring web mvc。是 Spring内置的一个MVC框架,在 Spring3.0 后发布。SpringMVC框架解决了WEB开发中常见的问题(参数接收、文件上传、表单验证等等),而且使用简单,与Spring无缝集成。支持 RESTful风格的URL请求。采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

1.2、SpringMVC原理

        在没有使用SpringMVC之前我们都是使用Servlet在做Web开发。但是使用Servlet开发在接收请求参数,数据共享,页面跳转等操作相对比较复杂。servlet是java进行web开发的标准,既然springMVC是对servlet的封装,那么很显然SpringMVC底层就是Servlet,SpringMVC就是对Servlet进行深层次的封装。

1.3、SpringMVC优势

1、基于 MVC 架构,功能分工明确。解决页面代码和后台代码的分离。

2、简单易用。SpringMVC 也是轻量级的,jar 很小。不依赖的特定的接口和类就可以开发一个注解的 SpringMVC 项目。

3、作 为 Spring 框 架 一 部 分 , 能 够 使 用Spring的IoC和AOP 。 方 便 整 合MyBatis,Hiberate,JPA等其他框架。

4、springMVC的注解强大易用。

2、MVC模式回顾

模型1:jsp+javabean模型---在jsp页面中嵌入大量的java代码

模型2:jsp+servlet+javabean模型---jsp页面将请求发送给servlet,由servlet调用javabean,再由servlet将制定jsp页面响应给用户。

模型2一般就是现在的MVC模式,也是我们一直使用的。

Model-View-Controller:模型--视图--控制器

Model: 模型层 javaBean 负责数据访问和业务处理 dao service pojo

View: 视图 JSP技术 负责收集和展示数据

Controller: 控制器 servlet技术 中间调度

控制器的工作:

1、接受客户端的请求(包括请求中携带的数据)

2、处理请求:调用后台的模型层中的业务逻辑

3、页面导航:处理完毕给出响应:JSP页面

3、入门程序

3.1 创建maven项目

1、先创建一个maven项目,目录结构如下

SpringMVC概述、入门案例以及工作流程_第1张图片

因为我们创建的这个项目没有用骨架,所以我们在pom.xml中把项目的打包方式改成war包

2、添加web模块

点击file-Protect Structure-Modules

SpringMVC概述、入门案例以及工作流程_第2张图片

添加webapp

SpringMVC概述、入门案例以及工作流程_第3张图片

接下来在下图修改路径为:E:\java IDEA\MySpringMVC\SpringMVC01\src\main\webapp\WEB-INF\web.xml

SpringMVC概述、入门案例以及工作流程_第4张图片

然后点击Artifacts,再点击加号选择Web Application:Exploded

SpringMVC概述、入门案例以及工作流程_第5张图片

SpringMVC概述、入门案例以及工作流程_第6张图片

点击ok就可以了

然后我们准备一些包,准备完之后目录结构如下:

SpringMVC概述、入门案例以及工作流程_第7张图片

 3.2、 pom.xml文件添加依赖和插件



    4.0.0

    com.zpc
    SpringMVC01
    1.0-SNAPSHOT

    
    war

    
        
        
            org.springframework
            spring-webmvc
            5.2.6.RELEASE
        
        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
    

    
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.0
                
                    11
                    11
                
            
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                
                    /
                    8080
                
            
        
    

3.3、创建Spring和SpringMVC的配置文件

我们一般将除了 Controller 之外的所有 Bean 注册到 Spring 容器中,而将 Controller 注册到 SpringMVC 容器中。所以我们在 resources 目录下添加 applicationContext.xml 作为 spring 的配置,添加springmvc.xml作为springmvc的配置文件。

3.3.1、创建Spring配置文件applicationContext.xml文件




        
    

3.3.2、创建SpringMVC的配置文件springmvc.xml




    
    

3.4、在web.xml中进行Spring和SpringMVC配置




    
    
        
        contextConfigLocation
        
        classpath:applicationContext.xml
    
    
    
        org.springframework.web.context.ContextLoaderListener
    

    
    
    
        dispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:SpringMVC.xml
        
        
        1
    
    
    
        dispatcherServlet
        *.do
    


3.5 创建控制器

controller层

package com.kkb.controller;

import com.kkb.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class UsersController {

    @Autowired
    UsersService usersService;
    @RequestMapping("hello.do")
    public ModelAndView add(){
        System.out.println("UserController-----add");
        usersService.add();
        ModelAndView mv = new ModelAndView();
        mv.addObject("UserName","湖人");//相当于request.setAttrobuite("UserName","湖人");
        mv.setViewName("index"); //未来经过SpringMVC的视图解析器处理,转换成物理路径,相当于request.getRequestDispatcher("index.jsp").forward();
        //经过InternalResourceViewResolver对象的处理之后加上前后缀就变为了/jsp/index.jsp
        return mv;
    }
}

service层

package com.kkb.service;

import org.springframework.stereotype.Service;


@Service
public class UsersService {

    public void add(){
        System.out.println("UsersService-------add");
    }
}

3.6 配置视图解析器

在springmvc.xml配置文件中添加视图解析器的配置




    
    
    
    
    
        
        
    

3.7 编写index.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: zhao
  Date: 2021/4/22
  Time: 17:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


index------------${UserName}

3.8 测试

SpringMVC概述、入门案例以及工作流程_第8张图片

3.9 解析

当 Spring 和 SpringMVC 同时出现,我们的项目中将存在两个容器,一个是 Spring 容器,另一个是 SpringMVC 容器,Spring 容器通过 ContextLoaderListener 来加载,SpringMVC 容器则通过 DispatcherServlet 来加载,这两个容器不一样:

SpringMVC概述、入门案例以及工作流程_第9张图片

如图所示:

ContextLoaderListener 初始化的上下文加载的 Bean 是对于整个应用程序共享的,不管是使用什么表现层技术,一般如 dao层、service层 的bean;

DispatcherServlet 初始化的上下文加载的 bean 是只对 Spring Web MVC 有效的 bean,如 Controller、HandlerMapping、HandlerAdapter 等等,该初始化上下文应该只加载 Web相关组件。

1.Spring容器中不能扫描所有Bean嘛?

         不可以。当用户发送的请求达到服务端后,会寻找前端控制器DispatcherServlet去处理,只在SpringMVC容器中找,所以Controller必须在SpringMVC容器中扫描。

2.SpringMVC容器中可以扫描所有Bean嘛?

         可以。可以在SpringMVC容器中扫描所有Bean。但是实际开发中一般不会这么做,原因如下:

       (1)为了方便配置文件的管理

       (2)未来在 Spring+SpringMVC+Mybatis组合中,要写的配置内容很多,一般都会根据功能分开编写

4、SpringMVC工作流程

4.1、工作流程分析

SpringMVC概述、入门案例以及工作流程_第10张图片

(1)用户通过浏览器发送请求到前端控制器DispatcherServlet。

(2)前端控制器直接将请求转给处理器映射器HandleMapping。

(3)处理器映射器HandleMapping会根据请求,找到负责处理该请求的处理器,并将其封装为处理器执行链HandlerExecutionChina后返回给前端控制器DispatcherServlet。

(4)前端控制器DispatcherServlet根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器HandlerAdaptor。

(5)处理器适配器HandlerAdaptor调用执行处理器Controller。

(6)处理器Controller将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给处理器适配器HandlerAdaptor。

(7)处理器适配器直接将结果返回给前端控制器DispatcherServlet。

(8)前端控制器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。

(9)视图解析器ViewResolver将封装了的视图View对象返回给前端控制器DispatcherServlet.

(10)前端控制器DispatcherServlet调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。

(11)前端控制器响应浏览器。

4.2 SpringMVC组件

1.DispatcherServlet:前端控制器,也称为中央控制器或者核心控制器。

用户请求的入口控制器,它就相当于 mvc 模式中的c,DispatcherServlet 是整个流程控制的中心,相当于是 SpringMVC 的大脑,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。SpringMVC框架提供的该核心控制器需要我们在web.xml文件中配置。

2.HandlerMapping:处理器映射器

HandlerMapping也是控制器,派发请求的控制器。我们不需要自己控制该类,但是他是springmvc运转历程中的重要的一个控制器。 HandlerMapping负责根据用户请求找到 Handler 即处理器(也就是我们所说的 Controller),SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等,在实际开发中,我们常用的方式是注解方式。

3.Handler:处理器

Handler 是继 DispatcherServlet 前端控制器的后端控制器,在DispatcherServlet 的控制下 Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发 Handler。(这里所说的 Handler 就是指我们的 Controller)

4.HandlAdapter:处理器适配器

通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展处理器适配器,支持更多类型的处理器,调用处理器传递参数等工作。

5.ViewResolver:视图解析器

ViewResolver 负责将处理结果生成 View 视图,ViewResolver 首先根据逻辑视图名解析成物理视图名称,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。 SpringMVC 框架提供了很多的 View 视图类型,包括:jstlView、freemarkerView、pdfView 等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

 

你可能感兴趣的:(spring,java,springmvc)