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>子标签,里面添加排除拦截的路径和拦截路径

相关推荐
陈一Tender几秒前
JavaWeb后端实战(登录认证 & 令牌技术 & 拦截器 & 过滤器)
java·开发语言·spring boot·mysql
Camel卡蒙几秒前
红黑树详细介绍(五大规则、保持平衡操作、Java实现)
java·开发语言·算法
孤廖27 分钟前
吃透 C++ 栈和队列:stack/queue/priority_queue 用法 + 模拟 + STL 标准实现对比
java·开发语言·数据结构·c++·人工智能·深度学习·算法
我命由我1234529 分钟前
Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
Full Stack Developme39 分钟前
java.net 包详解
java·python·.net
一叶飘零_sweeeet1 小时前
深入 Spring 内核:解密 15 种设计模式的实战应用与底层实现
java·spring·设计模式
凤山老林1 小时前
排序算法:详解插入排序
java·开发语言·后端·算法·排序算法
彦楠1 小时前
IDEA实用快捷键
java·ide·intellij-idea
豆沙沙包?1 小时前
2025年--Lc197-077. 排序链表(链表,尾插法)--Java版
java·数据结构·链表
m0_651593911 小时前
深入理解软件设计中的协议与规范:从理论到Java实践
java·软件工程·代码规范·设计规范