SpringMVC小结
一放下就生疏,所以要温故,所以要笔记。
Tip,多数情况下,SpringMVC建议单例执行,Struts2建议多例执行。
原因就在于Struts2使用属性驱动或模型驱动,而SpringMVC则使用方法的形参接收参数。后者的方法在调用后数据就会销毁。
前提一,SpringMVC的执行流程:DispatcherServlet - HandlerMapping - HandlerAdapter - ViewResolver。
其实就是解析Url,调用合适的Handler,处理Handler的返回数据(ModelAndView,查源码可知其本质仍是操作request和response)。
注意,SpringMVC的Handler又叫Controller,概念可类比Struts2的Action。
前提二,SpringMVC的使用有传统代码和注解两种方式。两种方式需要在xml中配置的HandlerMapping和HandlerAdapter是不同的。
前提三,SpringMVC可以开启RESTful风格访问。
前提四,xml配置文件中的标签都有对应的类或接口,所以如果不知道怎么配置,可以查找对应的类或接口。
Handler(Controller)的实现方式:
①(非注解)实现Controller接口;
②(非注解)实现HttpRequestHandler接口;
③(注解)@Controller@RequestMapping@RequestParam@PathVariable等。
非注解方式需要实现接口的方法,每次实现都只能对应一个Controller,不方便,仅作了解即可。
注解方式,灵活多变(方法有多种返回类型,方法返回的数据有多种操作方式),当是最佳选择。
Handler(Controller)中方法的形参类似Struts2中Action的属性或模型,通过不同的形参可以注入不同的对象(如request,pojo等)。
如:
@RequestMapping(value = "/xxx", method = { RequestMethod.POST, RequestMethod.GET })
public String xxx(HttpServletRequest request) throws Exception {
request.setAttribute("xxx", xxx);
return "abc/xxx";
// return "redirect:xxx.action"; //路径是相对于当前方法路径的上一级路径。
// return "forward:xxx.action"; //路径是相对于当前方法路径的上一级路径。
// 其实就是类内的action。
}
上面就是通过形参注入了request对象,从而可以在方法内部操作该对象。
---------------------------------------------------------------------
SpringMVC已加入了RESTful支持。RESTful是面向资源的架构思想,个人理解:对资源的访问及处理是其重点。
SpringMVC通过以下三点来保证(个人理解):
【】【】@ResponseBody使Controller【直接返回数据】,而不是直接指向具体的视图;同时通过MessageConverter和produces="text/plain;charset=UTF-8"可以返回各种格式的数据(XML,json,RSS,TEXT,字节流等)。
【】【】@ResponseBody就是对应了HTTP协议里的响应体!!!
【】【】ResponseEntity可以认为是ResponseHeader+ResponseBody。
以上三点(直接返回数据而非页面、对应响应体、响应头和响应体),都是针对RESTful风格所需。务必理解啊。
Controller方法直接返回ResponseEntity对象,@ResponseBody将该对象转成符合格式的数据,然后直接返回。
SpringMVC小结的更多相关文章
- springmvc小结(下)
1.@ModelAttribute 1.给共享的数据设置model数据设置,贴在形参上,也可以贴在方法上,设置一个model的key值 2.当controller方法返回一个对象的时候,,缺省值会把当 ...
- springmvc小结(上)
1.springmvc的整体结构以及流程 ①.前端控制器:只需要在web.xml文件中配置即可 作用:接受请求,处理响应结果,转发器,中央处理器 ②.处理器映射器:根据请求的url找到相应的Handl ...
- 现有项目springmvc 小结
1. 接口接收json数据 @RequestBody JSONObject param 2.返回json数据封装 DataPacket.jsonResult
- springmvc 项目完整示例03 小结
利用spring 创建一个web项目 大致原理 利用spring的ioc 原理,例子中也就是体现在了配置文件中 设置了自动扫描注解 配置了数据库信息等 一般一个项目,主要有domain,dao,ser ...
- SpringMVC由浅入深day01_7入门程序小结
7 入门程序小结 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法. 前端控制器配置: 处理器映射器: 非注解处理器映射器(了解) 注解的处理器映射器(掌握) ...
- Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git小结(转)
摘要 出于兴趣,想要搭建一个自己的小站点,目前正在积极的准备环境,利用Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git,这里总结下最近遇到的一些问题及解决 ...
- SpringMVC知识点小结
SpringMVC: 1.SpringMVC和Spring的关系: 软件开发的三层架构: web层[表示层.表现层]---->Service层---->Dao[DataBase Acces ...
- SpringMVC 使用PUT请求遇到的问题小结
最近在使用REST风格的URL进行CURD操作的学习过程中 发现使用PUT请求时候提交表单进行修改操作 报错:Request method 'PUT' not supported 在网上查找资料发现是 ...
- SpringMVC错误小结
No mapping found for HTTP request with URI [/SpringMVC/user.do] in DispatcherServlet with name 'spri ...
随机推荐
- 【小白的CFD之旅】22 好网格与坏网格
网格疏密网格形状其他的一些问题小白的总结郑重申明 网格的作用如此重要,以至于小白纠结了很久.小白知道网格划分过程很大程度上受制于计算资源的限制,但小白还是不太明白,如果计算资源非常充足,不用顾忌资源限 ...
- 如何高效的学习 TensorFlow 代码? 以及TensorFlow相关的论文
https://www.zhihu.com/question/41667903 源码分析 http://www.cnblogs.com/yao62995/p/5773578.html 如何贡献Tens ...
- 李洪强iOS经典面试题
李洪强iOS经典面试题 1. struct和class的区别 swift中,class是引用类型,struct是值类型.值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个"指 ...
- [翻译] Dremel made simple with Parquet
首先自己的 blog 好久没有写技术相关的东西了,今天又动笔了,好高兴!然后转载请注明出处.最后开始正题: 原文:Dremel made simple with Parquet | Twitter E ...
- Python(八)之函数
Python函数 函数作用: (1)代码重用 (2)一种设计工具,分解复杂问题 (3)将相关功能打包并参数化 函数种类: 全局函数:定义在模块中 局部函数:嵌套在其他函数中 lambda函数:表达式 ...
- Android开发(八)——Android组件
参考: [1] Android开发教程:理解Intent和Intent Filter.http://liuzhichao.com/p/506.html
- mysql memory engine
前言 刚刚遇到了mysql无法插入数据,报错:the table xxx is full. 查询原因,是xx表使用了memory engine,其中mysql的memory engine中有max_h ...
- Android线程通信
摘要 andriod提供了 Handler 和 Looper 来满足线程间的通信.例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传 ...
- Python的可视化包 – Matplotlib 2D图表(点图和线图,.柱状或饼状类型的图),3D图表(曲面图,散点图和柱状图)
Python的可视化包 – Matplotlib Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型地2D图表和一些基本的3D图表.Matplotlib最早是为了可 ...
- docker探索-docker容器基本操作(五)
1.创建一个容器并启动 1.1.docker hello word Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序. 输出Hello world ...