目录

一、SpringMVC概述

二、 SpringMVC入门案例

1、案例实现步骤

2、案例类和注解

三、SpringMVC案例运行流程

1、 启动服务器初始化过程

2、单次请求过程

四、bean加载控制


一、SpringMVC概述

SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

优点:

使用简单,开发便捷(相比于Servlet)

灵活性强

1、三层架构

web层负责页面数据收集,产生页面;service负责业务处理,处理数据;dao负责数据持久化,查询存储一些数据。通过这三层架构最终得到数据组织成页面返回给客户端。

2、MVC模式

客户端发送请求到控制器,控制器controller调用业务层service,业务层调用数据层dao,最后得到数据组织出数据模型model。但是光有模型用户无法查看,所以将页面view抽取出来,与数据配合使用,最后得出页面返回给客户端。

3、异步调用

以前view层采用jsp技术,随着技术迭代,前端发生了变化,采用html,css,vue,elementUI。而后端服务器也发生了变化。浏览器发送请求,前端发出异步调用后端服务器,后端服务器内一步一步将数据处理完成,最终得到model对象,model对象是一个java对象,不能直接传java对象回去页面,而且找到一种前后端通信的格式,就是json数据。

二、 SpringMVC入门案例

1、案例实现步骤

1、创建web工程

2、设置tomcat服务器,加载web工程(tomcat插件)

<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins>
</build>

3、导入坐标(SpringMVC+Servlet)4、

<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency>
</dependencies>

4、定义处理请求的功能类(UserController)

//定义表现层控制器bean
@Controller
public class UserController {//设置映射路径为/save,即外部访问路径@RequestMapping("/save")//设置当前操作返回结果为指定json数据(本质上是一个字符串信息)@ResponseBodypublic String save(){System.out.println("user save ...");return "{'info':'springmvc'}";}
}

对于SpringMVC而言,Controller方法返回值默认表示要跳转的页面,没有对应的页面就会报错。如果不想跳转页面而是响应数据,那么就需要在方法上使用@ResponseBody注解。

5、编写SpringMVC配置类,加载处理请求的Bean

//springmvc配置类,本质上还是一个spring配置类
@Configuration
@ComponentScan("com.csdn.controller")
public class SpringMvcConfig {
}

6、加载SpringMVC配置,并设置SpringMVC请求拦截的路径

//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {@Overrideprotected WebApplicationContext createServletApplicationContext() {//加载springmvc配置类,产生springmvc容器(本质还是spring容器)//初始化WebApplicationContext对象AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();//加载指定配置类ctx.register(SpringMvcConfig.class);return ctx;}//设置由springmvc控制器处理的请求映射路径@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}//加载spring配置类@Overrideprotected WebApplicationContext createRootApplicationContext() {return null;}
}

7、添加tomcat配置

运行结果:

2、案例类和注解

1、 @Controller注解

- 名称:@Controller
- 类型:类注解
- 位置:SpringMVC控制器类定义上方
- 作用:设定SpringMVC的核心控制器bean
- 范例

@Controller
public class UserController {
}

2、@RequestMapping注解

- 名称:@RequestMapping
- 类型:类、方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径
- 范例

@RequestMapping("/save")
public void save(){System.out.println("user save ...");
}

3、 @ResponseBody注解

- 名称:@ResponseBody
- 类型:方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法响应内容为当前返回值,无需解析
- 范例

@RequestMapping("/save")
@ResponseBody
public String save(){System.out.println("user save ...");return "{'info':'springmvc'}";
}

4、 AbstractDispatcherServletInitializer类

- AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类

- AbstractDispatcherServletInitializer提供三个接口方法供用户实现

- createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围。

//加载springmvc配置类,产生springmvc容器(本质还是spring容器)
protected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;
}

- getServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVC进行处理。

//设置由springmvc控制器处理的请求映射路径
protected String[] getServletMappings() {return new String[]{"/"};
}

- createRootApplicationContext()方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式同createServletApplicationContext()

//加载spring配置类
protected WebApplicationContext createRootApplicationContext() {return null;
}

三、SpringMVC案例运行流程

1、 启动服务器初始化过程

1.服务器启动,执行ServletContainersInitConfig类,初始化web容器

2.执行createServletApplicationContext方法,创建了WebApplicationContext对象

3.加载SpringMvcConfig

4.执行@ComponentScan加载对应的bean

5.加载UserController,每个@RequestMapping的名称对应一个具体的方法

6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

2、单次请求过程

1.发送请求localhost/save

2.web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理

3.解析请求路径/save

4.由/save匹配执行对应的方法save()

5.执行save()

6.检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

四、bean加载控制

SpringMVC相关bean(表现层bean)

Spring控制的bean

业务bean(Service)

功能bean(DataSource等)

SpringMVC相关bean加载控制

SpringMVC加载的bean对应的包均在com.itheima.controller包内

Spring相关bean加载控制

方式一:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包内的bean

- 名称:@ComponentScan
- 类型:类注解
- 范例

@Configuration
@ComponentScan(value = "com.itheima",excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class))
public class SpringConfig {
}

属性

1. excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
        2. includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)

方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { protected WebApplicationContext createServletApplicationContext() { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;  }   protected WebApplicationContext createRootApplicationContext() {  AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();      ctx.register(SpringConfig.class);        return ctx;  }   protected String[] getServletMappings() { return new String[]{"/"}; }
}

方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{protected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class}};protected String[] getServletMappings() {return new String[]{"/"};}protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}
}

SpringMVC(一):SpringMVC简介、入门案例相关推荐

  1. 【MyBatis-Plus】简介 入门案例

    ?? 博客主页: ?? 00年出生,即将进入职场闯荡,目标赚钱,可能会有人觉得我格局小.觉得俗,但不得不承认这个世界已经不再是以一条线来分割的平面,而是围绕财富旋转的球面,成为有钱人不是为了去掌控球体 ...

  2. Java框架 SpringMVC介绍及入门案例

    1.SpringMVC简介 1.1.什么是MVC MVC是一种软件架构的思想,将软件按照模型.视图.控制器来划分 M:Model ,模型层,指工程中的 JavaBean ,作用是处理数据 JavaBe ...

  3. SpringMVC(入门案例)

    文章目录 入门 三层架构 SpringMVC 入门案例(重点) 入门案例工作流程分析(重点) SpringMVC技术架构图(重点)6大核心组件 基础配置 controller加载控制 静态资源加载 中 ...

  4. 菜鸟学习 8-3 SpringMVC 入门案例的一些深入

    入门案例的一些深入 一.@RequestMapping注解的详解 1)该注解可以放在方法上,也可以放在类上,放在方法上用于给方法确定路径和加限制条件,放在类上用于给类确定路径,如果类和方法上都有,在请 ...

  5. idea springmvc_IDEA搭建SSM(spring+springmvc+mybatis)Maven项目的入门案例

    上一篇文章已经搭建好了SSM的框架,并且启动成功,今天来编写一下入门案例. 文章的主要内容: 1.hello world的编写 2.引入log4j,在控制台打印sql 3.增删改查的编写 一.在mys ...

  6. Spring-Security 简介、入门案例详解、安全框架、权限验证 SSM项目 使用 JavaConfig配置

    Spring-Security 简介 一.介绍 二.详细步骤 1.创建一个maven项目 添加web 框架. 2.导入依赖 3.项目整体结构 4.Spring 容器配置 5.servletContex ...

  7. ❤️六万字《SpringMVC框架介绍—从入门到高级》(建议收藏)❤️

    <SpringMVC框架介绍>(建议收藏) ❤️希望博友给个三连+关注!!! SSM: mybatis + Spring + SpringMVC MVC三层架构 SpringMVC + V ...

  8. 第一章 Web MVC简介 —— 跟开涛学SpringMVC 博客分类: 跟开涛学SpringMVC webmvcjavaeespring跟开涛学SpringMVC Web MVC简介 1.1、We

    第一章 Web MVC简介 -- 跟开涛学SpringMVC 博客分类: 跟开涛学SpringMVC webmvcjavaeespring跟开涛学SpringMVC Web MVC简介 1.1.Web ...

  9. MyBatis Plus简介和入门案例

    简介 MyBatis-Plus(以下简称MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 润物无声 只做增强不做改变,引入它不会对现有 ...

最新文章

  1. 十六进制时间戳转换成十进制时间戳
  2. Scala range reverse调试
  3. macbook oracle 工具,Navicat for Oracle Mac 四种实用工具
  4. Vue-cli项目中mockjs + axios实现前后端分离代码demo(清晰易懂)
  5. 春风app一直显示服务器内部错误,CHANGES.md
  6. batch spring 重复执行_可能是最漂亮的Spring事务管理详解
  7. [转]sql server 2005 中的内连接和外连接
  8. HTML+JS实现可编辑表格
  9. 成理第二届信安大挑战web篇
  10. Spring Aop 报错 ...but was actually of type 'com.sun.proxy.$Proxy**'的解决方案
  11. 5分钟快速入门大数据、数据挖掘、机器学习
  12. CMOS曝光时间、积分时间
  13. EUI学习之自定义皮肤
  14. 强制跳过WM调整屏幕的方法
  15. 各大硬核应用渠道开放平台SDK文档地址
  16. Xposed 之旅 -- 让微信低版本也可以登录
  17. Elastic Certified Engineer复习记录-复习题详解篇-索引数据(2)
  18. MSC/VLR/SSP
  19. Qt之数据库:MySql驱动编译
  20. 2021年MyBatis面试题30道

热门文章

  1. HDU 4666 Hyperspace(最长曼哈顿距离)
  2. CSS - 浮动元素的margin-left和margin-right
  3. 经典笑话:郭靖与黄蓉的大学生活
  4. C语言--学生个人消费管理系统
  5. 鼠标跟随效果html,javascript 鼠标跟随特效代码及理解
  6. 如何定时执行BAT(批处理)、VBS、Python等脚本 —— 定时执行专家
  7. 【djysim】djyos模拟器-djysim,初步搞定,可以在djysim上面跑GUI了
  8. HI3861学习笔记(25)——接入华为云物联网平台IoT
  9. 计算机网络技术实践评价,计算机网络技术实践
  10. 程序异常是python语言基本控制结构_python-控制结构