原视频链接: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. 开发Chrome插件,实现网站自动登录

    近期被一个事情困扰着,我们采购了一款软件,里面有一个数据大屏页,当登录过期后,数据就会保持原状,不再更新.和供应商反馈了很多次,都无法彻底解决数据显示的问题,没办法,自己周末在家研究,网站自动登录的事 ...

  2. CSS 选择器(二):子代选择器(>)

    后代选择器 后代选择器选择的范围广,范围是当前节点的所有子节点,包括其直接子节点. <div id="app"> <div>items-1 <div& ...

  3. 简单概述因特网(Internet)

    学习目的 了解 Internet 的概念,区别因特网与互联网. 了解 Internet 的基本结构. 了解 Internet 的发展历史. Internet 概念 因特网(Internet)是全球性的 ...

  4. MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)

    CRUD 官方文档:https://baomidou.com/ (建议多看看官方文档,每种功能里面都有讲解)[本文章使用的mybatisplus版本为3.5.2] 条件构造器 一般都是用service ...

  5. [CSharpTips]判断两条线段是否相交

    判断两条线段是否相交 主要用到了通过向量积的正负判断两个向量位置关系 向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向:若结果大于0,表示向量b在向量a的逆时针方向:若等于 ...

  6. python中的画图神器——turtle模块

    turtle库的基础命令介绍(1)画布画布cancas是绘图区域,可以设置它的大小和初始位置 turtle.screensize(1000,600,'red') 大小的设置 turtle.setup( ...

  7. 简单创建一个SpringCloud2021.0.3项目(四)

    目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上三篇教程 3. 日志处理 1. 创建日志公共模块 2. Eureka引入日志模块 4. 到此的功能代码 5. 注册中心换成naco ...

  8. bat-MD文件转CSV文件

    目录 1. bat文件里面写死文件名 2. 拖入文件 注意:每个单元格不能出现字符[|.$.;] 1. bat文件里面写死文件名 @echo off && setlocal enabl ...

  9. Paperask一键获取A币

    又到了毕业季,查论文是一件很头疼的事情,网上免费查重检测力度又很一般┑( ̄Д  ̄)┍ 因为一次偶然同学推荐了解到这个网站,只要做新手任务就能得到很多积分,再进行抽奖就可以得到A币或者是至尊券可以免费使 ...

  10. PGCrypto 加密组件使用

    PGCrypto 插件提供了两类加密算法:单向加密和双向加密. 单向加密属于不可逆加密,无法根据密文解密出明文,适用于数据的验证,例如登录密码验证.常用的单向加密算法有 MD5.SHA.HAC 等.这 ...