带着问题看springmvc:
什么是springmvc
springmvc原理
前端控制器,处理器映射器,处理器适配器,视图解析器
springmvc入门程序
目的:对前端控制器,处理器映射器,处理器适配器,视图解析器学习
非注解的处理器映射器,处理器适配器
注解的处理器映射器,处理器适配器
springmvc和mybatis整合
springmvc注解开发
常用的注解学习
参数绑定(简单类型,pojo,集合类型)
自定义的参数绑定
springmvc和struts的区别
springmvc的高级应用
参数绑定(集合类型)
数据回显
上传图片
json数据交互
RESTful支持
拦截器
1.1什么是springmvc
首先看什么是springmvc框架了,
springmvc是spring的一个模块,springmvc和spring无需通过中间整合层进行整合。
springmvc是一个基于mvc的web框架。
1.2什么是mvc,mvc在b/s系统下的应用
mvc是一个设计模式
1.3springmvc框架
前端控制器和后端控制器
前端控制器dispatcherservlet
后端控制器handler
两者之间,前端控制器根据处理器映射器HandlerMapping来匹配对应的后端控制器
请求查找handler,返回一个执行链HandlerExecutionChain{HandlerInterceptor Handler}
处理器适配器HandlerAdapter去执行Handler
处理器适配器调用执行handler,返回ModelAndView给前端控制器
前端控制器将拿到的ModelAndView给视图解析器View resolver请求解析
然后返回一个真正的视图view
然后前端控制器将view进行视图渲染到前端
第一步:发起请求到前端控制器(DispatcherServlet)
第二部:前端控制器请求HandlerMapping查找Handler
可以根据xml配置,注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc的一哥底层对象,包括Model和View
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)
第十一步:前端控制器向用户返回结果
组件:
1.前端控制器Dispatcherervlet(不需要程序员开发)
作用接收请求,响应结果,相当于转发器,中央处理器
有了Dispatcherervlet减少了其他组建之间的耦合度
2.处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的url查找Handler
3.处理器适配器HandlerAdapter(不需要程序员开发)
作用:按照特定的规则(HandlerAdapter要求的规则)执行Handler
4.处理器Handler(需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以正确执行Handler
5.视图解析器 View resolver(不需要程序员开发)
作用:进行视图解析,根据逻辑视图解析成真正的视图(view)
6.视图view(不需要程序员开发,需要程序员开发jsp)
View是一个接口,实现类支持不同的View类型(jsp,freemarker,pdf..)
2.入门程序
配置前端控制器
在web.xml中配置servlet,在web_mvc的jar包中,有一个初始的参数配置
配置处理器映射器
在classpath下的springmvc中配置处理器映射器
配置处理器适配器
配置视图解析器
需要配置解析jsp的视图解析器
开发Handler需要实现Controller接口,才能由org.springframework.web.servlet.handler.SimpleServletHandlerAdapter执行
一个类就一个方法
3.非注解的处理器映射器和适配器
处理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确映射器处理
处理器适配器:
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
4.注解的处理器映射器和适配器
DispatcherServlet.properties
前端控制器从上边的文件中加载处理器映射器,适配器,视图解析器等组建,如果不在springmvc.xml中配置,使用默认加载的。
对注解映射器在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
spring3.1之后org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
对注解适配器在spring3.1之前使用
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
spring3.1之后
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
配置注解的映射器和适配器
开发注解的Handler
使用注解的
5.springmvc和mybatis的整合
三个配置文件
整合service
让spring管理service接口
事务控制
整合springmvc
配置处理器映射器,适配器,视图解析器
编写jsp
加载spring容器
将mapper service controller 加载到spring容器
建议使用通配符加载上边的配置文件
在web.xml中,添加spring容器监听器,加载spring容器
商品修改的功能开发
需求:
操作流程:
1.进入商品查询列表页面
2.点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询)
3.在商品修改页面,修改商品信息,修改后点击提交
1.开发mapper
mapper:
根据id查询商品信息
根据更新商品表的数据
2.开发service
接口功能:
根据id查询商品信息
修改商品信息
3.开发controller
方法:
商品信息修改页面的显示
商品信息修改提交
方法的返回值
ModelAndView
String
1.返回jsp路径,数据通过request
2.请求转发
redirect方式
forward方式
两种方式的区别,第一种重定向,url会变,数据没有,相当于做了一次新的请求跳转
第二种url不变,只是数据还在,相当于中转转发
void
可以用
request.getDispatcher 跳转或者response向客户端写入json格式数据
post乱码问题
@Controller注解必须要加,作用标识符是一个Handler处理器
@RequestMapping注解必须加,作用:
1.对url和Handler的方法进行映射。
2.可以窄化请求映射,设置Handler的根路径,url就是根路径+子路径请求方式
3.可以限制http请求的方法
映射成功后,springmvc框架生成一个Handler对象,对象中只包括一个映射成功的method
注解开发中参数绑定:
将request请求过来的key/value的数据(理解一个串),通过转换(参数绑定的一部分),将key/value串转成形参,将转换后的结果传给形参(整个参数绑定过程)
将自定义转换的实现类注入到适配器中
springmvc是面向方法开发的(更接近service接口的开发方式),struts2面向类开发的
springmvc可以单例开发,struts2只能是多例开发