MyBatis+Spring MVC开发指南(四)

前言

《MyBatis+Spring
MVC开发指南(一)》

《MyBatis+Spring
MVC开发指南(二)》

《MyBatis+Spring
MVC开发指南(三)》

即首博客是者系列之末段一篇,涉及Spring+Spring
MVC+MyBatis之间的咬合、Controller的写法分析、异常处理、JSON交互,RESTful支持、拦截器等。

Spring、Spring MVC、MyBatis整合思路分析

Spring、Spring MVC、MyBatis集成原理图

每当这边,我连无见面给起Spring/Spring
MVC/MyBatis整合的每一个细节,而是分析她组成的思绪!

第一,我们得被Spring整合Web,说白了即是于Spring管理Bean,并进行依赖注入等。方法充分简单,就是当web.xml配置一个listener让它去加载Spring的部署文件。

次,我们要让Spring
MVC整合Web,就是当web.xml中去安排前端控制器,指明Spring
MVC的配备文件在哪里和servlet-mapping。

其三,要清楚Spring
MVC是Spring的一个web模块而已,它们中间无需做。

季,要做MyBatis,其实就算是将SqlSessionFactoryBean以及Mapper接口的田间管理交给Spring。

第五,注意注解的安排,想同一怀念干什么呢?

据,Spring MVC基于注解的计算机映射器、处理器适配器;

遵,Spring IOC涉及到的诠释、以及组件注解等;

小结来说,就是Spring负责Mapper、Service、Controller的保管(实例化以及因注入),还见面对Service进行作业控制,可见Spring就是整合的骨干!

分析:Controller到底该怎么勾勒?

Controller类,首先来说,应该打上@Controller注解,同时应为Spring可以扫描到。

为对url进行分类管理,可以于Controller上从上@RequestMapping注解。

咱懂得HTTP请求,常用的有POST和GET2种植办法,那么得于艺术齐动@RequestMapping进行限。

Spring
MVC是依据方法链的,那么Controller的方定义就是坏特别了。特别在何啊?

参数需要绑定(@RequestParam),甚至是亟需好从定义的转向后每当绑定;(如未采用注解需要参数名称相同;自定义参数绑定需要贯彻Converter接口并开展相关部署,要明HandlerApdater是实践Handler的,所以当安排到电脑适配器上)

是不是有参数可以无用传递?或者可以因定默认值呢?

对于频繁组、集合、MAP等这些扑朔迷离的项目,参数绑定需要小心什么吗?(List/Map的绑定,必须靠POJO,也就是说POJO中使有List/Map属性才可以绑定)

参数校验如何做为?(使用@Validated,并以处理器适配器上拓展安排)

对形参列表,哪些有特殊之义?(Model/ModelMap/HttpServletRequest/HttpServletResponse/HttpSession这些好直接运用!)

对形参列表中的POJO,Spring
MVC会自动的停到request域,并可经过@ModelAttribute来指定key;而对于形参列表中的简单类型,Spring
MVC并不曾这么做。无论何时,都休想忘记了极简单易行的方法:通过Model的addAttribute方法好直接设置数据及request域!

艺术的归值,可以回去ModelAndView,还得回去什么也?JSON该如何回到?可免可以回到void呢?(要么是回去逻辑视图,可以ModelAndView指定,也得以经过返回String指明逻辑视图;要么是归响应流数据,比如通过AJAX请求JSON数据。)

何以实现重定向为?(默认的ModelAndView就是forward的,重定向的讲话需要鲜明指明redirect;注意重定向表示URL地址栏发生变化且Request域失效)

上面的解析,不禁为丁想到了以前Struts2的Action开发,那么Spring
MVC和Struts2生怎样区别为?

先是,直观上的话,Spring MVC基于方法开发,而Struts2基于类支出;

亚,从参数绑定来拘禁,Struts2是基于类的积极分子变量进行绑定的,为了避免多线程问题,是多例的;而Spring
MVC可以看都是绑定到艺术的形参列表上,方法执行了便销毁了,可见Spring
MVC是因单例的!而且产生某些公势必生感动,那便是Struts2之Action中之分子变量实在是最好多了,而且到底怎样变量被如何措施所利用到,并无克一目了然,而Spring
MVC却拉我们完成了!

老三,以前工作被,有时候就见面接受Struts2内需提升之邮件,因为在的部分纰漏和安康隐患;而Spring
MVC使用这样久呢,还尚无听见这些“负面新闻”!

Spring MVC如何进行深处理?

酷处理框架

经达成图,相信您会明白,Spring
MVC通过提供一个大局的不胜处理器进行统一之充分处理。具体做法如下:

首先,定义好你的系的片好类型(extends Exception)

次,定义一个大局的好处理器(实现HandlerExceptionResolver接口),在此处,我们可开展非常类型判断,ModelAndView设置等

其三,在spring-mvc.xml配置中,通过<bean>标签加载是深处理器即可。

JSON交互

Spring MVC对JSON的支撑,无非表现于2单方面:

第一,请求过来的是JSON数据类型,那么Spring
MVC可以用那转会为Java对象;

老二,Spring MVC可以把Java对象转化成JSON予以客户端响应;

当骨子里付出中,用底最为多的饶是拿Java对象转成为JSON返回给客户端。

实际,在根据注解的电脑适配器中曾经默认支持了针对性JSON的处理,所以不必我们举行任何安排了!

Spring
MVC使用jackson进行JSON处理,因此要在jackson的依(jackson-core-asl、jackson-mapper-asl)。

@ResponseBody

说白了,@ResponseBody都关涉了来什么啊?

就就是是往response的流着形容了点JSON数据,并告诉浏览器我为您的凡JSON数据类型喔(application/json),仅此而已!

跟@ResponseBody对应的,就是@RequestBody,无非就是是把要类型也JSON的数转发成为相应之Java对象而已。

RESTful支持

RESTful,即Representational State
Trasfer,本质上虽是HTTP开发理念而已。

她实在对HTTP开发要提出了3触及正式:

首先,对URL进行科班

非RESTful风格:   http://…/findUserById.do?id=xxx

RESTful风格:      http://…/user/xxx

卿得观看,RESTful风格的URL不在存在KEY/VALUE了。

其次,HTTP的办法开展专业

万一是查询user,那么下GET方法;如果是骤增,那么以POST;如果是去,使用delete方法。

顶此,你应有有点感触了,那就是说我们走访一个URL,需要经不同之HTTP
METHOD来展开区分处理。这个就起接触麻烦了,实质上,在实际开发被,能够成功就或多或少的,太少了!

老三,对HTTP的content-type进行规范

也就是说,在恳求的时,就指定了急需应的content-type。

即,对RESTful的利用大都停留于首先点。

面,介绍了RESTful的一部分概念,那么Spring MVC该怎么支撑啊?

首先,要清楚RESTful不存在KEY/VALUE,那么泾渭分明,我们得以http://…/user/xxx中的xxx映射到形参列表上。

故,对于@RequestMapping而言,需要运用{xxx}这种占位符,然后于以@PathVariable(“xxx”)进行绑定到亮参上。

次, 你应有发现了RESTful这种作风的URL是从未有过后缀的(什么.do
.action都没有了),那么我们的前端控制器的URL映射只能配置成/了,那么问题便来了。什么问题也,就是针对静态资源的顾问题。

亟待修改web.xml指明CSS/JS/IMG等静态资源的处理方式。(网上例子很多,这里自己重点讲思路,就未多说了)

拦截器

拦截器,有那么些运场景,比如用户征、统一日志处理等。

HandlerInterceptor接口

自打定义拦截器需要实现HandlerInterceptor接口,提供3个章程的实现。这3只措施,顾名思义,不过需要小心的是preHandle返回的凡boolean,也就是说要回到false,那么postHandler/afterCompletion不见面尽。

在拦截器中,我们得以经过request获取URL,获取Session中的用户数量,还可装跳转地址等。

注意拦截器需要配备,也就是说我们得对怎么的URL进行拦阻,如果放行才让HandlerAdapter去实践Handler。(在Spring
MVC配置XML中使用<mvc:interceptors>即可)

暨这边,整个《MyBatis+Spring MVC开发指南》系列就是收了,由于开发中涉及的细节方方面面太多矣,不容许啊非会见了覆盖,希望这个系列能够自思路上吃大家帮忙,足矣!

See u next blog!

网站地图xml地图