SpringMVC学习笔记
1、严格实现MVC设计思想的框架,严格分层,减少耦合;
2、组件(红色必需)
2.1 DispatcherServlet 前端控制器
2.2 Controller 业务控制器
2.3 Handler Mapping 请求匹配器:请求转发到具体Controller
2.4 ViewResolver:控制Controller返回响应后要跳转到不同视图展示的组件
View:针对不同的视图技术(jsp、pdf、excel...)采取不同的处理的组件
每一个ViewResolver必须指定一个View
2.5 Interceptors:拦截器,面向切面技术
2.6 LocalResolver:本地化处理组件
2.7 Validate:校验组件
3、Controller实现方式(原先3之前配置方式 已经淘汰 推荐使用注解)
3.1 实现Controller接口或者继承AbstractController抽象类(传入request和response对象)
3.2 ModelAndView
3.2 用于直接跳转页面的ParameterizableViewController、UrlFilenameViewController(url名和视图名一致)
3.3 自动封装表单参数的控制器(常用):CommandController重写handle方法,参数通过属性编辑器将form参数注入实体类,有些类型如日期需要提供重写的属性编辑器才能正确转换;FormController重写onsubmit方法;
spring3之后不推荐使用 使用注解;
3.4 MultiActionController 红色参数必需
方法:public (ModelAndView|Map|String|void) actionname(HttpServletRequest request,HttpServletResponse response,HttpSession session,Object anyobj);
注意:controller中方法的的参数是按需声明,spring会帮我们自动注入,像HttpServletRequest、HttpServletResponse、HttpSession、ModelView等常见的很容易就可以注入,如果声明的是页面的参数,spring也会安例注入,但是存在数据类型转换异常的风险;
比如:一般页面的参数传到服务器端都是字符串,如果声明的是整形、浮点型、日期类型,必然要进行数据类型强转,所以也必然存在产生转换异常的风险,需要添加属性编辑器来降低这种转换风险。
4、handlerMapping
4.1 默认的ControllerClassNameHandlerMapping
4.2 常用的SimpleUrlhandlerMapping
4.3 BeanNameUrlHandlerMapping
4.4 基于注解Controller时使用的DefaultAnnotationHandlerMapping 推荐使用
5、基于注解的SpringMVC配置
5.1 使用注解 那么spring-mvc.xml需要增加context和mvc两个命名空间
5.2 注解先配置扫描,然后添加配置跳转处理InternalResourceViewResolver,然后再添加注解;
5.3 restful风格请求:先定义URl请求模板,然后通过@Pathvariable指定处理方法接收url中传递过来的参数的变量;
对于特殊格式的参数也需要属性编辑器转换;数据绑定:可以直接使用实体对象作为入参,存在数据格式转换异常的可能;
5.4 可以通过@method来处理get post等不同请求方式的请求
其他注解:@CookieValue @RequestHeader
5.5 如果返回值为void 同时方法中不使用pringwriter 那么会自动匹配requestmapping中配置的同名视图
6、转发和重定向
return "forward:index.jsp"; //转发
return "forward:user.do?method=reg5"; //转发
return "redirect:user.do?method=reg5"; //重定向
return "redirect:http://www.baidu.com"; //重定向
7、XmlViewResovler:
View:JstlView、ExcelView以及自定义View(jsperReport|Pdf|Excel)
视图链
8、拦截器链(一般所有的MVC都会实现拦截器):
实现HandlerInterceptor接口,重写三个方法:prehandler:controller之前执行,posthandler:controller之后视图生成之前,
afterCompletion释放资源
9、视图国际化:
9.1 页面引入spring标签:<% taglib uri="http://www.springframework.org/tags" prefix="spring" %>,使用标签:<spring:message code="xxxkey" /> code对应资源文件(*.properties)的Key值;
9.2 创建并编写资源文件:mess.properties,mess_zh_CN.properties,mess_en_US.properties
9.3 配置支持:<bean:id="messageSource" class="org.springframework.context.support.ResourceBunldleMessageSource">
<property name="basename" value="mess"/>
</bean>
注意id只能叫这个messageSource。
10、注入验证:JSR303 validate bean
@Valid:验证: 对于实体对象jdk提供验证接口 一般其他框架像hibernate提供验证实现
补充:SpringMVC中的 Controller是单例的 如何变成多例的呢?在Controller上加注解@Scope("prototype")
SpringMVC学习笔记的更多相关文章
- 史上最全的SpringMVC学习笔记
SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...
- springmvc学习笔记--REST API的异常处理
前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...
- springmvc学习笔记---面向移动端支持REST API
前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...
- SpringMVC:学习笔记(8)——文件上传
SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...
- springmvc学习笔记(简介及使用)
springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...
- springmvc学习笔记(常用注解)
springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- springmvc学习笔记(19)-RESTful支持
springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...
- springMVC 学习笔记(一):springMVC 入门
springMVC 学习笔记(一):spring 入门 什么是 springMVC springMVC 是 spring 框架的一个模块,springMVC 和 spring 无需通过中间整合层进行整 ...
随机推荐
- mysql 插入汉字 异常 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name'
今天使用mysql出现 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name' 异常 通过查找问题,发现是字段编码不支 ...
- TagHighlight
:UpdateTypesFile 命令会生成相应的上色高亮文件(生成的着色文件可以叫types_c.taghl)还有相应的tags文件,寻找tags或taghl_config.txt确定project ...
- NFC(1)NFC简介,3种模式
简介 NFC(Near Field Communication,近场通信),是一种数据传输技术.但与Wi-Fi.蓝牙.红外线等数据传输技术的一个主要差异就 是有效距离一般不能超过4厘米. NFC支持如 ...
- 面试题_76_to_81_Java 最佳实践的面试问题
包含 Java 中各个部分的最佳实践,如集合,字符串,IO,多线程,错误和异常处理,设计模式等等. 76)Java 中,编写多线程程序的时候你会遵循哪些最佳实践?(答案)这是我在写Java 并发程序的 ...
- 1205. By the Underground or by Foot?(spfa)
1205 简单题 有一些小细节 两个站可能不相连 但是可以走过去 #include <iostream> #include<cstdio> #include<cstrin ...
- java---面试题---.java"源文件中可以包括多个类(不是内部类)
答题时,先答是什么,再答有什么作用和要注意什么 一个".java"源文件中可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致,main方法只能写在 ...
- return File
public ActionResult DownloadMessage() { string strExportData = "无数据!"; byte[] data = Syste ...
- Java [Leetcode 66]Plus One
题目描述: Given a non-negative number represented as an array of digits, plus one to the number. The dig ...
- 分享一段H264视频和AAC音频的RTP封包代码
1. H264视频的RTP封包 static int h264_parse(Track *tr, uint8_t *data, size_t len) { h264_priv *priv = tr-& ...
- 【转】c++内存泄露检测,长文慎入!
原文网址:http://blog.csdn.net/zengraoli/article/details/8905334 关于内存泄露的,今天无意想到,网上找了一下 本篇blog附带的所有工具和代码 ...