博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC基础知识
阅读量:7080 次
发布时间:2019-06-28

本文共 4665 字,大约阅读时间需要 15 分钟。

一、springMVC概述

springMVC是spring下的一个模块,是基于MVC设计模式的web框架。

二、springMVC的核心流程

请求发给前端控制器(dispatcher),由前端控制器依据处理器映射器(handlerMapping)查找对应的处理器处理请求,返回handlerExecutionChain(包含handler和handlerInterceptor)给前端控制器,前端控制器会再调用处理器适配器(handlerAdapter)来调用对应的处理器(handler),处理器返回模型数据(ModelAndView)给前端控制器,前端控制器依据逻辑视图名调用视图解析器(ViewResolver),返回物理视图,进行视图渲染(就是把ModelAndView里的数据保存到request域中),完成响应。

三、前端控制器的配置

在web.xml里仿照servlet来配置

dispatcherServlet
xxx
contextConfigLocation
classpath:config/springmvc.xml
dispatcher
/
复制代码

四、处理器映射器和处理器适配器配置

1、非注解的处理器适配器和处理品映射器

1.1、处理器适配器 *SimpleControllerHandlerAdapter:这个处理器适配器要求处理器要实现Controller接口,并且这个Controller接口里的方法返回ModelAndView对象

public ModelAndView handleRequest(HttpServletRequest,HttpServletResponse){    return new ModelAndView();}复制代码

*HttpRequestHandlerAdapter:它要求处理器实现HttpRequest接口

public void handlRequest(HttpServletRequest,HttpServletResponse){    }复制代码

因为返回值为void类型所以它可以影响返回的数据类型和响应头 1.2、处理器映射器 *BeanNameUrlHandlerMapping:依据处理器配置的name属性的URL来映射 *SimpleUrlHandlerMapping

controller的id
复制代码

因此这个处理器映射器可以对同一个处理器进行多个虚拟路径的映射

2、注解的处理器适配器和处理器映射器

引入:如果我们没有在springMVC的配置文件里配置视图解析器以及处理器映射器和适配器时发现springMVC也能同样运行,其实如果我们不配置,那么前端控制器会到dispatcher.properties的文件里去加载默认配置的适配器、映射器以及解析器

3.1之前的处理器映射器DefaultAnotationHandlerMapping3.1之后的处理器映射器RequestMappingHandlerMapping3.1之前的处理器适配器AnnotationMthodHandlerAdapter3.1之后的处理器适配器RequestMappingHandlerAdapter复制代码

因此我们要配置springMVC的配置文件,不然前端控制器就要加载过时的处理器适配器和处理器映射器

配置注解的处理器映射以和处理器适配器

*在编写的处理器上用@Controller来表示这是一个处理器*在处理器中方法上添加@RequestMapping("/items")来映射这个方法的URL复制代码

这样的快捷方式,默认绑定了很多的参数绑定器,比如json的装换器

3、视图解析器的配置

复制代码

五、springMVC与mybatis的整合

1、为什么要整合

通过spring来整合表现层、业务层、持久层、是让spring来管理表现层的controller、业务层的service、持久层的mapper,从而让各层互相调用

2、springmvc整合mybatis的配置文件

1、整合DAO

复制代码

2、整合service

复制代码

3、配置事务控制的配置文件

*配置事务管理器

*配置事务通知

*配置AOP

具体的配置请看我的spring精华知识中的spring事务配置那章

注意:对于把上面配置的所有配置文件包括加载进spring容器中的方法就是配置一个监听ServletContext的监听器

contextConfigLocation
classpath:conifg/spring/applicationContext-*.xml
xxxContextLoaderListener
复制代码

六、controller的返回值类型和@RequestMapping的作用

ModelAndView:返回模型数据对象,需要分别设置视图和数据

String:返回逻辑视图名和重定向以及转发

void:实现影响应头等

@RequestMapping可以加载类上来实现窄化请求,同时也可以限定访问的方法

七、springMVC的参数绑定

1、简单参数绑定

只要求页面的参数名字和形参的名字一样即可,否则可以使用@RequestMapping("")来指定

2、pojo类型的参数绑定

要求页面的参数名字与pojo对象里的属性名字一样即可绑定

3、自定义参数绑定

比如日期的参数绑定就要我们自己实现自定义的参数绑定

*在处理器是配置器上加上转换器

复制代码

*在springMVC配置文件里配置转换器

复制代码

八、springMVC与structs的区别

springMVC是基于方法开发而Struts是基于类开发,简单来说就是springMVC是基于URL和controller方法来映射,如果映射成功就会生成一个controller对象,而这个对象里只有映射成功的那个方法,传来的页面参数都会被映射为形参,而方法执行后形参就销毁,所以springMVC可以单例开发。

而Struts是基于类开发,通过成员变量接受参数,单例不安全,因此它是多例的。

九、springMVC的复杂参数绑定

1、对于包装类型的pojo

页面要属性.属性的方式传递包装pojo里pojo对应的属性值。

2、数组类型

页面参数的名字和数组的名字相同即可

3、list和map集合类型

对于list类型,要求要明确是对list里的那个po对象的那个属性赋值;而对于map类型就按map['key']的方式传递

十、springMVC的数据校验和数据回显

1、数据校验

引入:通常对于web开发而言,数据校验,前端页面要进行数据校验,服务器端也要进行数据校验,而服务器端的数据校验通常在表现层对传递而来的数据进行校验和在service层对业务接口使用到的数据进行校验。

springMVC使用的是hibernateValidator的数据校验器的接口。

如何配置

classpath:xxx
复制代码

2、数据回显

对于pojo类型的数据,springMVC自动把页面pojo以类名首字母小写作为key保存到了request域中,而如果要指定保存到request域中的key,可以使用@ModelAttribute("xx")来指定。同时@ModelAttribute("xx")放到方法上可以把方法返回值保存到request域中

而对于简单的数据类型,则只能使用Model来实现回显

十一、springMVC的全局异常处理器

springmvc里的异常处理器是:在表现层、业务层、持久层遇到预期异常都要抛出异常,最后由前端控制器交给全局的异常处理器处理。

全局异常处理器的处理思路:

如果全局异常处理器捕捉到的异常是预期异常那么就在页面回显异常信息,如果不是预期异常那么就要另做处理。

全局异常类只需要实现handlerExceptionResolver即可就可以了,然后实现其方法。

十二、springMVC对于图片的上传

一定要做springMVC的配置文件里配置多组件的解析器

xxx
复制代码

其次是在形参上写MutipartFile mutipartfile的形参

图片上传代码的注意事项:

*图片是否为空

*解决图片的绝对路径和生成新的图片名

*设置图片保存的路径要以多目录形式同时要配置虚拟路径

*保存图片路径到数据库

十三、springMVC与json数据交互

*前端请求的是json数据格式的请求,后端要使用@RequestBody来吧json数据格式来转换成java对象,而后处理后要使用@ResponseBody把Java对象转为json数据返回

*前端请求的是key/value的数据格式,后端直接使用@ResponseBody把Java对象转换为json数据格式返回

一定要配置json数据转换的转换器

而如果是使用的注解便捷配置那么就不用配置json转换的转换器了,它自动配置好了

十四、springMVC与RESUTFUL风格

*要把前端控制器的url-mapping设置为“/”,但这时候要防止对静态资源的访问,所以还要配置对静态资源的访问

复制代码

十五、拦截器

拦截器要实现HandlerIntercptor接口,里面的三个方法分别对应handler方法之前、进入handler方法中后modelAndView返回之前和模型数据返回后的这三个时间段进行调用的。

配置拦截器

springmvc把拦截器配置在了处理器映射器上,映射成功的处理器使用拦截器。

但springMVC也支持全局拦截器的配置,即自动为每个处理器器映射器配置了拦截器

复制代码

转载于:https://juejin.im/post/5bdeed08e51d4573506a1d72

你可能感兴趣的文章
ActiveReports 报表应用教程 (15)---报表换肤
查看>>
Mobile first! Wijmo 5 + Ionic Framework之:费用跟踪 App
查看>>
【案例分享】项目施工进度报告 - 树形报表
查看>>
Linux系统
查看>>
SenchaTouch打包应用程序
查看>>
linux笔记 2-6 文件命令
查看>>
我的友情链接
查看>>
sed的基本用法
查看>>
Session机制的本质
查看>>
华为RH2288H V3服务器raid配置与系统安装
查看>>
VMware Horizon View 5.x系列之使用Linked Clone配置Automated Pools
查看>>
ping一个主机的几种最常见回应信息
查看>>
关于malloc内存申请的深入研究
查看>>
利用Rsync配置双机主备同步WEB网站文件同步,K哥
查看>>
文字渐变效果:图层中的mask属性
查看>>
输入一个正整数num 求N(2~9)进制数
查看>>
nagios nsclient 安装
查看>>
System Center系列Blog链接
查看>>
初创企业存活的4个秘诀
查看>>
升级ios
查看>>