springMVC理解

springMVC是一种思想,将软件划分为,模型Model,视图View,控制器Controller。

MVC的工作原理:用户通过前端视图页面,发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕返回到Controller,再根据请求处理的结果找到对应的视图,经过渲染数据后响应给浏览器。

springMVC基于servlet,封装了servlet的操作,构造了DispatcherServlet前端管理器,对请求和响应统一进行管理。

一、准备工作

1.使用

创建maven项目,并添加web模块,定义打包方式为war包,在pom文件引入对应依赖坐标。

  1. 配置web.xml

注册前端管理器DispatcherServlet:定义<servlet>和<servlet-mapping>

<url-pattern>定义了路径模型,当请求符合该路径,就会被DispatcherServlet进行处理

这里使用 " / " 意思是除了jsp页面以外的所有请求,都会被拦截处理

而jsp页面需要被tomcat的默认servlet来处理,前端控制器无法处理,所以使用" / "

<init-param>是上下文配置路径,也就是加载spring MVC配置文件的路径

<;oad-on-startup>默认是第一次访问时进行初始化servlet,将该值设置为1,表示在服务器启动时就开始初始化DispatcherServlet

  1. 创建请求控制器

请求控制器就是一个个普通的pojo类,但需要@Controller声明为控制层组件bean,交给ioc容器,SpringMVC才识别的到。

  1. 创建SpringMVC的配置文件,配置好web服务器后就可以了

springMVC的配置文件默认处于WEB-INF目录下,但我们都会放到resources目录,

且名字是**<servlet-name>-servlet.xml**

在配置文件中,定义组件扫描component-scan来扫描控制层组件

然后配置thymeleaf的视图解析器,通过逻辑视图来实现页面的重定向和转发。这里使用其他的也可以

二、自定义控制层Controller

1.在控制层定义方法,通过注解@RequestMapping定义请求路径参数,或者按照Resuful风格,定义注解@GetMapping,@PostMapping,@DeleteMapping,@PutMapping,用法类似

2.@RequestMapping标识的位置

可以标识在类上,表示设置请求路径的基础信息,即抽取出相同的请求路径,这样方法中就不用再写出了

可以标识在单个方法上标识,表示设置请求路径的具体信息。

@RequestMapping的属性

value:数组类型,意思是可以设置多个请求路径,也就是一个控制器方法可以处理若干个请求

method:规定控制器方法在请求路径匹配的情况下,继续匹配请求方式get,post等等

params:

headers:

3.ant风格的请求路径

使用 ? 表示任意的单个字符,除了它本身

使用 * 表示当前目录任意的0个或多个字符

使用 ** 表示任意层数的任意目录

4.springMVC中获取请求参数的方式

4.1 通过原生servletAPI:定义HttpServlet的形参,调用getParameter方法等等。

4.2 在springMVC中,只要控制器方法的参数列表和请求的参数保持一致,就可以自动完成接收。

注意参数名称不一致的话,可以使用注解@RequestParam,表示给形参起别名,从而完成映射。

还有两个类似的注解:@RequestHeader用来将请求头的信息和控制器方法的形参绑定@CookieValue:将cookie数据和控制器方法的形参绑定。

4.3 通过pojo类型获取参数,实际上和5.2一样,定义的pojo类,其中的属性名称必须和请求参数保持一致。

4.4 接收PathVariable 路径参数

在路径中使用占位符 {} 动态表示,在控制器方法的参数列表用加上@PathVariable注解的形参进行接收,注意保持名称一致

4.5 接收数组集合参数

4.6 接收日期参数

4.7 接收JSon数据

  1. springMVC的响应参数

5.1 @ResponseBody

5.2 统一响应结果

定义一个Result类,该类的对象将来会转为json格式的字符串,作为响应结果返回给前端--

  1. 向请求域中共享数据

6.1 使用原生servlet的setAttribute方法

6.2 使用ModelAndView类进行共享,使用Model的功能向请求域共享数据,再使用View的视图功能设置逻辑视图,并且控制器方法一定要返回ModelAndView的对象作为返回值。

6.3 使用Model,ModelMap,Map

Model:Model是接口类型,addAttribute和上面的addObject用法一样,定义一个属性名称和属性的值

ModelMap:

Map:使用键值对的方式把属性名称和属性值存到map集合

  1. springMVC实现文件的上传和下载

文件上传:

文件下载:

8.拦截器interceptor

自定义拦截器类,实现HandlerInterceptor接口,重写里面的三个抽象方法,添加业务逻辑

preHandle:在控制器方法执行前执行,返回值为是否放行,false代表拦截,true为放行

postHandle:在控制器方法执行后执行

afterCompletion:在控制器方法执行后,且视图渲染完毕后执行

然后把拦截器类上交ioc容器管理,作为bean组件

在springmvc的配置文件注册拦截器(记得包扫描):

1.通过注解成为bean之后可以直接使用默认的bean名称注册

2.不使用@component,则在xml重新定义一个bean来指定

3.也可以使用,<mvc:interceptor>子标签,里面添加排除拦截的路径和拦截路径

相关推荐
MZ_ZXD0011 分钟前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
PP东4 分钟前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
ManThink Technology9 分钟前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络
invicinble13 分钟前
springboot的核心实现机制原理
java·spring boot·后端
人道领域21 分钟前
SSM框架从入门到入土(AOP面向切面编程)
java·开发语言
大模型玩家七七41 分钟前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
CodeToGym1 小时前
【Java 办公自动化】Apache POI 入门:手把手教你实现 Excel 导入与导出
java·apache·excel
凡人叶枫1 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
JMchen1232 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
阔皮大师2 小时前
INote轻量文本编辑器
java·javascript·python·c#