原视频链接:https://www.bilibili.com/video/BV1Fi4y1S7ix/?p=43&spm_id_from=pageDriver&vd_source=8ae265768486246506e74053a00b60db P43~P74

目录

一、SpringMVC简介

SpringMVC是一种基于Java实现MVC模型的轻量级Web框架,有使用简单,开发便捷(相比于Servlet)的优点,同时灵活性强

回顾使用Servlet开发表现层的流程

Web程序通过浏览器访问页面,前端页面使用异步提交的方式发送请求到后端服务器。后端服务器采用表现层、业务层、数据层的三层式架构进行开发。页面发送的请求由表现层接收,获取到用户的请求参数后,将请求传送到业务层,再由业务层访问数据层,得到用户想要的数据后,将数据返回给表现层。表现层拿到数据以后,将数据转换为json格式发送给前端页面,前端页面接收数据后解析数据,组织成用户浏览的最终页面信息交给浏览器

1.1、SpringMVC入门案例

①:使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

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

②:创建SpringMVC控制器类(等同于Servlet功能)

//2.1使用Controller定义bean
@Controller
public class UserController {
//2.2设置当前操作的访问路径
@RequestMapping("/save")
//2.3设置当前操作的返回值类型
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'info':'springmvc'}";
}
}

③:初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对于的bean

@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}

④:初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

//4.1AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化web3.0容器的抽象类
//AbstractDispatcherServletInitializer提供了三个接口方法供用户实现
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//创建Servlet容器时,加载springMVC对应的bean并放入webApplicationContext对象中
//而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
} //设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVC进行处理
protected String[] getServletMappings() {
retrun new String[]{"/"};
} //如果创建Servlet容器时加载非SpringMVC对应的bean,使用当前方法进行,使用方法同createServlertApplicationContext()
protected WebApplicationContext createRootApplicationContext() {
retrun null;
}
}

在案例中有几个新的注解:

@Controller

类型:类注解

位置:SpringMVC控制器类定义上方

作用:设定SpringMVC的核心控制器bean

@Controller
public class UserController{
}

@RequestMapping

类型:方法注解

位置:SpringMVC控制器方法定义上方

作用:设置当前控制器方法请求访问路径

@RequestMapping("请求访问路径")
public void save(){
System.out.println("user save ...");
}

@ResponseBody

类型:方法注解

位置:SpringMVC控制器方法定义上方

作用:设置当前控制器方法响应内容为当前返回值,无需解析

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

SpringMVC入门案例工作流程分析

SpringMVC入门程序开发总结(1+N)

  • 一次性工作

    • 创建工程,设置服务器,加载工程
    • 导入坐标
    • 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
    • SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
  • 多次工作

    • 定义处理请求的控制类
    • 定义处理请求的控制方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)

1.2、bean加载控制

在Spring程序开发中,常有的几个包config、controler、service、dao。

SpringMVC相关bean(表现层bean)

Spring控制的bean

  • 业务bean(Service)
  • 功能bean(DataSource等)

SpringMVC加载的bean对应的包均在controler包内,扫描上层包时一定会加载controler包中的bean。因为功能不同,如何避免Spring错误的加载到SpringMVC的bean?

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

@ComponentScan

类型:类注解

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

属性:

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

includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)

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

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

bean加载格式

public class ServletContainersInitConfig extends AbstractDsipatcherServletInitializer {
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其实还为我们准备更加简便的配置方式

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

1.3、PostMan简介

为了后面学习方便,将学习一款模拟前端发送请求的插件

Postman是一款功能强大的网页测试与发送网页HTTP请求的Chrome插件,常用于进行接口测试。

特征:简单、实用、美观、大方

官网:https://www.postman.com/downloads/

Postman基本使用

注册登录

创建工作空间/进入工作空间

发送请求/测试结果

记得开启服务器

地址备份的功能 快捷键:"Ctrl + S"

创建好后点右边的Send就能重复使用了,不同的项目也可以在这里配置方便测试。

GET请求参数

POST请求参数

1.4、SpringMVC解决Post请求中文乱码问题

为web容器添加过滤器并指定字符集,Spring-web包中提供了专用 的字符过滤器

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherSerletInitializer {
//配字符编码过滤器
protected Fillter[] getServletFillters() {
CharacterEncodingFIlter filter = new CharacterEncodingFilter();
filter.setEncoding("utf-8")
return new Filter[]{filter};
}
}

二、请求与响应

2.1、请求映射路径

团队多人开发,每人设置不同的请求路径,冲突问题常常需要设置模块名作为请求路径前缀。比如当项目中出现了两个save请求路径,员工A开发的是book模块,路径就变成"/book/save";员工B开发的是user模块,路径就变成"/user/save"。

之前学的@RequestMapping这个注解它能够设置当前控制器方法请求访问路径,如果设置在类上则统一设置当前控制器方法请求路径前缀。

示例

@Controller
@RequestMapping("/user")
public class UserCOntroller {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
retrun "{'modeule':'user save'}";
}
}

2.2、请求参数传递

  • 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name,int age){
System.out.println("普通参数传递 name ==>"+name);
System.out.println("普通参数传递 age ==>"+age);
return "{'modoule':'common param'}";
}
  • POJO类型参数
  • 嵌套POJO类型参数
  • 数组类型参数
  • 集合类型参数

【SSM】学习笔记(二)——SpringMVC入门的更多相关文章

  1. tensorflow学习笔记二:入门基础 好教程 可用

    http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础   TensorFlow用张量这种数据结构来表示所有的数据.用一 ...

  2. Mybatis学习笔记(二) —— mybatis入门程序

    一.mybatis下载 mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases 下载完后的目录结构: 二. ...

  3. netty权威指南学习笔记二——netty入门应用

    经过了前面的NIO基础知识准备,我们已经对NIO有了较大了解,现在就进入netty的实际应用中来看看吧.重点体会整个过程. 按照权威指南写程序的过程中,发现一些问题:当我们在定义handler继承Ch ...

  4. tensorflow学习笔记二:入门基础

    TensorFlow用张量这种数据结构来表示所有的数据.用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], ...

  5. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...

  6. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  7. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  8. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  9. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  10. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

随机推荐

  1. DolphinScheduler 荣获 2021 中国开源云联盟优秀开源项目奖!

    点击上方 蓝字关注我们 好消息,中国开源云联盟(China Open Source Cloud League,简称"COSCL")于近日公布 2021 杰出开源贡献者.优秀开源项目 ...

  2. 我和Apache DolphinScheduler的这一年

    Apache DolphinScheduler,为Apache开源项目, 简称"DS", 中文名 "小海豚调度"(海豚聪明.人性化,又左右脑可互相换班,终生不用 ...

  3. 【深入学习.Net】.泛型集合【体检管理系统】

    基于泛型List的体检管理系统(蜗牛爬坡) 第五章[体检管理系统] 一.项目展示图(基于.net core6.0) 二.首先准备两个Model类 HealthCheckItem(项目类):Name(项 ...

  4. IdentityServer4登录后无法跳转设置策略

    在中间件中手动改变samesite属性为lax就可以解决问题: services.Configure<CookiePolicyOptions>(options => { option ...

  5. .NET 7 SDK 对容器的内置支持

    大家好,我是等天黑. .NET 又双叒叕出新功能了, 就在前几天,.NET 团队发布博客,宣称在 .NET SDK 中内置了对 .NET 应用容器化的支持. 小试牛刀 在正式介绍它之前,先通过一个简单 ...

  6. Helm安装ingress-nginx-4.0.19

    Application version 1.1.3 Chart version 4.0.19 获取chart包 helm fetch ingress-nginx/ingress-nginx --ver ...

  7. 硬核解析MySQL的MVCC实现原理,面试官看了都直呼内行

    1. 什么是MVCC MVCC全称是Multi-Version Concurrency Control(多版本并发控制),是一种并发控制的方法,通过维护一个数据的多个版本,减少读写操作的冲突. 如果没 ...

  8. git rebase合并多个commit总结

    git rebase 合并多个commit 方法 在开发过程中,有时一个任务会分几次commit提交,这样可能对于有些分支要cherry pick时会比较麻烦,这是我们可以通过git rebase 将 ...

  9. salesforce零基础学习(一百一十七)salesforce部署方式及适用场景

    本篇参考:https://architect.salesforce.com/decision-guides/migrate-change https://developer.salesforce.co ...

  10. 搭建Elasitc stack集群需要注意的日志问题

    文章转载自:https://blog.csdn.net/u013613428/article/details/84943577 {{uploading-image-736853.png(uploadi ...