Spring MVC(一)介绍、Spring MVC 工作流程 / Spring MVC 原理、使用注解定义接口(接口中的参数、请求转化)
一、介绍
1、引言
2、MVC架构概念
好处:
3、开始使用 Spring MVC
a、xml 文件配置
跟 servlet 有点像,导入 war 包,然后引入依赖:
b、接口实现——HttpRequestHandlerAdapter
能实现的接口有好几种。
这里先展示一种:
当然,也要写配置文件,就像配置 servlet 那样(下面两图中有实现 HttpRequestHandlerAdapter 接口和 SimpleControllerHandlerAdapter 接口):
还要配置加载:
到目前位置就弄好了,再配置 tomcat 运行就能成功运行。
注意:每个接口对应的实现类都不同,接口和实现类要一一对应,不然会报错!
c、接口实现——Controller
看下 Controller 接口的实现:
可以发现这个接口实现的是需要返回值的。
注意:视图的前缀和位置都在配置文件里面写好了,在上面的图片中可以找到。
二、Spring MVC 工作流程 / Spring MVC 原理
为什么这个 DispatcherServlet 不自己把所有东西都做完?
这种最大的好处就是解耦,可插拔的;可以根据自己的需求自由的去配置处理器或者解析器等。
但是这种一样可以去通过枚举获取,为什么不这么做?
最主要还是灵活、开放;比如视图解析器:目前就这么几种,但是不能保证未来还会不会有新的视图解析器;如果有人发明新的页面模板,想要整合到 SpringMVC 中,只要实现 ViewResolver 的接口就行了,把这个 ViewResolver 配置给 DispatcherServlet 即可;整个 MVC 框架不需要任何变动,以不变应万变。 如果是枚举,那么有人发明了新的视图又要去改动源码才能执行。
三、使用注解定义接口
1、依赖导入
首先先导入依赖:
然后配置成 web 工程。
接着就是 Controller文件:
然后就是 web.xml 配置文件:
因为写接口一般都是按上面这么写的,没什么变化,所以有个东西可以代替这两个玩意(看下图)
2、接口中的参数
a、默认参数 / 自定义参数
b、基本类型的参数
注意:如果是 post 请求有中文的话,会乱码,编码解决问题请看上面的 xml 配置里面,已经配好。
c、直接用对象接收参数
先看实体类:
然后代码:
d、@RequestParam 注解的使用(参数别名,默认值、是否必填)
e、数组参数(不能用集合参数(或者说不建议))
先看前端 jsp 代码:
然后后端代码:
f、路径中的参数
3、请求转化
a、限定请求方法
先看下后端代码:
功能是成功访问就输出===,然后跳转页面;然后接着用 postman 来测试这个接口:
可以看到,能成功显示。
这里直接上结论: get、post可以有显示,但是 put、delete 不能显示页面,但是后端却依然接受的到请求,也有打印 ===。这是因为 jsp 页面只支持 get、post、head 方法,其他的只会报错,如果是使用 html 页面,就没有这个问题(意思是其他请求方法也支持):
那么,如果只想支持某些请求方法呢?这里就用到注解中 METHOD 这个属性:
这么写嫌麻烦的话,还有简化写法:
b、地址前缀(解决地址重复问题)
看下图:
现在有两个 Controller ,一般每个 Controller 里面负责自己的增删改查,但是 Controller 间的地址名不能重复:
那么可以给地址加个前缀:
/ user / xxx :这种格式。
但每个这么填就会很麻烦,所以可以统一的加个前缀:
那么此时再按照以前的去访问,就会报错:
要加前缀: