博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc
阅读量:6264 次
发布时间:2019-06-22

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

SpringMVC:是表现层框架和struts2一样,但它和struts2也有不同之处首先springMVC是基于方法来进行开发的即它的每一个请求路径都会对应一个方法并且将请求路径带过来的参数通过参数解析器解析然后绑定到方法的形参,可以设计为单例模式也可以设计成多例模式,但struts2它是基于类来进行开发的参数的传递是通过类的属性来完成的它对于数据的响应是通过OGNL语言完成的且只能是多例模式.
springMVC的流程:
1. 客户端传过来的指定url会被前端控制器DispatcherServlet所拦截
2. 前端控制器会将url发送给处理器映射器HandlerMapping,HandlerMapping会根据url去查找对应的处理器handle,找到后会生成具体的Handler对象和Handler拦截器返回给DispatcherServlet
3. DispatcherServlet会去通过处理器适配器HandlerAdapter处理Handler
4. Handler执行完毕以后会返回一个ModelAndView,HandlerAdapter会将这个ModelAndView返回给DispatcherServlet
5. DispatcherServlet会将这个ModelAndView交给视图解析器ViewReslover,ViewReslover会根据逻辑视图名产生对应的View并返回给DispatcherServlet
6. DispatcherServlet 会对View进行渲染然后填充到request域然后响应到客户端
springMVC使用了基于组件技术,就是将整个业务划分为几个不同的组件来完成,主要由以下几个组件构成:
1. DispatcherServlet:前端控制器,DispatcherServlet是用来调控整个业务流程的,它调用别的组件来实现这个的业务流程,可以说它将这个业务划分为了几个部分让这几个部分解耦和,DispatcherServlet做为核心控制器它在创建时会默认的从DispatcherServlet.properties中加载别的组件,如果在springmvc.xml中配置了组件就加载配置的组件,为了可以在启动服务时加载组件我们需要将DispathcerServlet配置到web.xml中并设置成加载时创建,需要将配置的springmvc.xml通过初始化参数加载.
2. HandlerMapping:处理器映射器,HandlerMapping根据传过来的请求去找到对应的Handler,然后将Handler和Interceptor拦截器封装到HandlerExceutionChain中返回给DispatcherServlet.
3. Handler:处理器,用来处理用户具体的请求
4. HandlerAdapter:处理器适配器,用来执行Handler,HanlderAdapter会通过适配器接口对Hanlder进行适配,适配后就可以执行Handler,通过HandlerAdapter可以执行多种类型的Handler,使用的是适配器设计模型.
5. ViewResolver:视图解析器:ViewResolver负责将HandlerAdapter返回给DispathcerServlet的ModelAndView通过指定的逻辑视图名生成相应的View然后返回给DispatcherServlet.
参数绑定:HandlerAdapter在执行Handler之前会将请求所携带的参数绑定到方法的形式参数上,我们的Handler上的形式参数可以是:
1. HttpServletRequest:通过request对象获取请求
2. HttpservletResponse:通过response处理响应信息
3. HttpSession:通过session对象获得里面存放的对象
4. ModelMap/Model:通过Model向页面传数据
5. 基本数据类型:如果用基本类型那么请求发送过来的参数名要和Hanlder的形参名一样.如果两个名字不一样要绑定的话需要在Handler指定形参前面添加@RequestParam,它可以指定请求发送过来的参数名字,默认值,是否必须要传值.
6. Pojo类:只要pojo类的属性名和请求发过来的参数名相同就可以如果pojo类的属性是一个类那么请求发过来的参数名必须符合OGNL表达式的写法,(类.属性)
7. 自定义参数:如果我们需要将传过来的参数进行简单的转换那么就需要自定义参数,自定义参数我们需要创建一个类去实现Converter接口
8. 字符串数组:只需要请求发过来的参数名和字符串的名字相同就可以.
9. List集合:如果List的泛型是引用类型则传过来的参数名称要是集合名字[].泛型的属性名itemList[0].id
10. Map:传过来的参数名字必须是map类型的参数名[key]
Controller的返回值:
1. ModelAndView:里面包含有model数据和逻辑视图名
2. void:如果形参中有request,response那么就可以用它们来进行转发和重定向,不用将数据返回给DispatcherServlet
3. String:String可以返回一个逻辑视图名,也可以通过redirect,forward来进行转发和重定向
数据回显:当我们请求失败时有可能需要将数据回显,对于简单数据类型会使用Model将参数放到request中model.addAttribute("id", id); springmvc默认支持pojo数据回显,springmvc自动将形参中的pojo重新放回request域中,request的key为pojo的类名,如果参数名和key对应不上我们可以使用@ModelAttribute(key)来讲参数回显.
Json交互:如果Handler要接受一个json数据那么在参数名前面加上@RequestBody,如果要返回一个json数据要在返回值类型上加@ResponseBody
拦截器:是用来对Handler进行预处理和后处理的,拦截器类需要实现HandlerInterceptor接口.
springmvc.xml配置:
5242880

转载地址:http://gekpa.baihongyu.com/

你可能感兴趣的文章
【JS第19期】设计模式-简单工厂模式
查看>>
Flask之旅: 快速上手
查看>>
Android图片加载开源库深度推荐,安利Fresco
查看>>
聊聊flink的MemoryPool
查看>>
聊聊flink KeyedStream的KeySelector
查看>>
spring mvc如何计算BEST_MATCHING_PATTERN_ATTRIBUTE
查看>>
swift 消息监听和键值监听(kvo)
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
Spring定时任务高级使用篇
查看>>
阿里资深技术专家总结:要怎样努力才可以成为公司主力架构师
查看>>
数学推导+Python实现机器学习算法:线性回归
查看>>
Android AccessibilityService机制源码解析
查看>>
Android基础知识
查看>>
寻找数组主元素(Majority Element))
查看>>
如何将ST05生成的trace导入HANA Studio里并以图形化方式显示出来
查看>>
TiDB 在西山居实时舆情监控系统中的应用
查看>>
说一说 JVM 对锁的优化
查看>>
图像处理库GPUImage简单使用
查看>>
基于Java语言构建区块链(五)—— 地址(钱包)
查看>>
Elastic Search 安装和配置
查看>>