原视频链接: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. 深入分析FragmentPagerAdapter和FragmentStatePagerAdapter

    最近遇到比较奇怪的bug,TableLayout+ViewPager实现点击顶部tab切换viewpager视图.但是在Viewpager设置dapter时,最开始设置的是FragmentPagerA ...

  2. ArkUI 自定义组件

    基础入门 组件可以把一段代码封装起来,目的是提高这一段代码的复用率,并且也可以减少开发人员多次编写相同的代码.一旦组件定义好了之后,在页面中只需要通过<element /> 标签引入进来就 ...

  3. 【java】学习路线5-public和private、构造方法、this关键字、封装对象、static关键字、main方法结构解析

    //一个教务管理系统//知识点清单/*public & private 的区别一个是公开的,一个是私有的,作用域不一样,访问的权限不一样咯如果是用private修饰,则调用者只可以是在当前的作 ...

  4. 美团组件化事件总线方案改进:ModularEventBus

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  5. 02_Linux基础-文件系统层次结构-提示符-进程-命令格式-隐藏文件-通配符-绝对相对路径-{1..100}-ls-mkdir-其他基础命令

    02_Linux基础-ls-mkdir-cd-pwd-man-useradd-su-rm-tree-tab-passwd-w-ssh-touch-date-stat-cp-mv-du-文件系统层次结构 ...

  6. Neo4j入门详细教程

    Neo4j安装配置 (1)下载安装包 (2)安装jdk (3)环境变量配置 分三步,具体参考  https://www.bilibili.com/video/BV1Nz411q7bG?from=sea ...

  7. KingbaseES图形化安装未弹出界面应该如何处理

      关键字: KingbaseES.X Windows.Gnome.DISPLAY 一.Linux下图形安装环境要求 1) 系统首先安装了X Windows的图形化支持软件包. 2) 系统安装了KDE ...

  8. 聊聊 asp.net core 认证和授权

    使用asp.net core 开发应用系统过程中,基本上都会涉及到用户身份的认证,及授权访问控制,因此了解认证和授权流程也相当重要,下面通过分析asp.net core 框架中的认证和授权的源码来分析 ...

  9. NODE 基于express 框架和mongoDB的cookie和session认证 和图片的上传和删除

    源码地址 https://gitee.com/zyqwasd/mongdbSession 本项目的mongodb是本地的mongodb 开启方法可以百度一下 端口是默认的27017 页面效果 1. 注 ...

  10. mpdf导出pdf,中文符号乱码

    改源码: 打开vendor/mpdf/mpdf/src/Config/FontVariables.php 在最后一行加入: "gb" => [ 'R' => 'gb.t ...