黑马程序员技术交流社区
标题: 【重庆校区】-【基础框架总结】-【 SpringMVC】 [打印本页]
作者: 陈文老师 时间: 2017-11-22 10:29
标题: 【重庆校区】-【基础框架总结】-【 SpringMVC】
本帖最后由 陈文老师 于 2017-11-22 11:22 编辑
要毕业了?要找工作啦?开不开心?紧不紧张?回首黑马这半年,感觉自己是不是被自己的努力所感动,然而仔细想想学了很多,马上要出去找工作了却脑子一片空白。重庆JavaEE就业2期龙师兄毕业后在寝室闭关修炼半个月(当然不建议大家这样做,一定要趁着你刚毕业,什么都知道赶紧出去找工作,越到后面越忘得多)个人总结了咱们6个月以来所学的一些基础框架和淘淘项目的一些核心技能点,要复习的,赶紧看看吧!但是当答应我,看完后赶紧出去面试哟~~~不要怂,就是干!!!
【基础框架篇】-【SpringMVC】
1 SpringMVC
1.1 是么是springMVC?
1) 和struts2一样是表现层的框架,它是spring框架的一部分
2) 处理流程:
1. 用户发送请求到前端控制器
2. 前端控制器收到请求调用处理器映射器
3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象以及处理器拦截器一并返回给前端控制器
4. 前端控制器通过处理器适配器调用调用处理器
5. 执行处理器(controller,后端控制器)
6. Controller执行完成返回modelandview
7. 适配器将controller执行结果modelandview返回给前端控制器dispatcherServlet
8. dispatcherServlet将modelandview传给视图解析器viewreslover视图解析器
9. 视图解析器返回具体的view
10. 前端控制器对view进行渲染视图
11. 前端控制器响应用户
1) Struts2是类级别的拦截,一个类对应一个requst上下文,springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个rul对应,所以从架构本身上springmvc就容易实现restful风格的url,而struts2的架构实现起来要很麻烦,因为struts2中action的一个方法可以对应一个url,而其类属性却被所有方法所共享,这也就无法用注解或其他方式标识所属方法了
2) 由于以上原因,springmvc的方法之间基本上是独立的,独享request response数据,请求数据通过参数获取,处理结果通过modelmap交回给架构,方法之间不共享变量,而struts2高的就比较乱,虽然方法之间也是独立的,但其所有action变量是共享的,这不会影响程序运行,却给编码和程序阅读带来了很大困扰,每次请求来了就要创建一个action,一个action对应一个request上下文。
3) 由于struts2需要针对每个request进行封装,吧request,session等servlet生命周期的变量封装成一个map,供给每个action使用,保证线程安全,所以在原理上比较消耗内存的
4) 拦截器实现机制上,struts2有自己IDEintercept机制,springMVC用的是独立的aop方式,这样导致struts2的配置文件量还是比springmvc大
5) Springmvc的入口是servlet,而struts2的入口是filter,filter和servlet是不同的,这就导致了二者的机制不同
6) Springmvc集成了ajax,使用起来非常的方便,,只需要一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而struts2拦截器集成了ajax,在action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对比较不方便
7) Springmvc验证支持jsr303,处理起来相对更加的灵活方便,而struts2验证比较繁琐
8) Springmvc与spring的整合是无缝隙的,从这个项目的管理和安全上也比struts2高,
9) 设计思想上,struts2更加符合oop编程思想,springmvc就比较的谨慎,在servlet上扩展
10) Springmvc开发效率和性能高于struts2
11) Springmvc配置很少
1.3 怎么使用springMVC?
1) 创建controller,在类上添加注解@Controller
2) 在方法上添加注解@RequstMapping(“请求url”):注解指定要求的url其中”.action”可加也可以不加
3) 配置包扫描器<context:component-scanback-package=””>
4) 配置前端控制器,在web.xml配置DispatcherServlet,拦截请求格式<url-pattern>
5) 配置处理器映射器<bean class=” RequestMappingHandlerMapping”/>
6) 配置处理器适配器<bean class=” RequestMappingHandlerAdapter”>
7) 这两个配置可以直接配一个<mvc:annotation-driven>搞定
8) 配置视图解析器<bean class=” InternalResourceViewResolver”><property name=”viewClass” value=”jstlview”><propertyname=”prefix” value=””><property name=”suffix” value=””>
9) 在cntroller中使用model或modelmap向页面传递数据
10) 接收参数方式
1. 参数名与处理器形参名一致可直接接收
2. 不一致需要@RequestParam(value=”与传递参数名一致”)常用于处理简单类型的绑定,没有对应的请求参数包异常
3. Restful风格不一致也可以使用@PathVariable(“与传递参数名一致”)
4. 接收pojo可直接在形参上写pojo
5. 接收高级参数
a) 数组:在handler形参可以写数组,也可以将作为pojo的属性接收,对应属性必须是数组
b) 集合:利用pojo属性接收,对应属性必须是list,此时在handler形参上写集合是无法正确接收到数据的
11) 请求乱码问题
1. 配置一个filter,characterEncodingFilter,指定编码格式<init-param>,指定拦截的哪些请求<url-pattern>
12) Json数据交互
1. @RequestBody,用于读取http请求的内容,将读到的内容通过httpMessageConverter接口转换为json、xml等格式的数据并绑定到形参上
2. @ResponseBody,用于将controller的方法返回的对象转换为指定格式的数据,如json、xml等,通过response响应给客户端
13) Springmvc的拦截器
1. 类似于servlet的filter,用于对处理器进行预处理和后处理
2. 需要实现HandlerIntercept接口
3. 配置拦截器:就是想原有拦截器中加入新的拦截器<beanclass=”BeanNameUrlHandlerMapping”><property name=”interceptors”><list><ref=”注入自定义拦截器”>。
4. 全局拦截器:<mvc:interceptuors><mvc:interceptor><mvc:mappingpath=”拦截的范围”><bean class=”自定义拦截器”>
作者: 渝鱼鱼 时间: 2017-11-22 13:25
收藏起来,指不定我什么时候就要用到了,不错
作者: 在路上聊聊 时间: 2017-11-23 15:51
收藏起来,指不定我什么时候就要用到了,不错
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |