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学习笔记的更多相关文章

  1. 史上最全的SpringMVC学习笔记

    SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...

  2. springmvc学习笔记--REST API的异常处理

    前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...

  3. springmvc学习笔记---面向移动端支持REST API

    前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...

  4. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  5. springmvc学习笔记(简介及使用)

    springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...

  6. springmvc学习笔记(常用注解)

    springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...

  7. SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...

  8. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  9. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  10. springMVC 学习笔记(一):springMVC 入门

    springMVC 学习笔记(一):spring 入门 什么是 springMVC springMVC 是 spring 框架的一个模块,springMVC 和 spring 无需通过中间整合层进行整 ...

随机推荐

  1. Socket programming in C on Linux | tutorial

    TCP/IP socket programming This is a quick guide/tutorial to learning socket programming in C languag ...

  2. ListView(1)几个重要属性,关闭滚动到顶部,底部的动画,item之间的分割线,背景等

    见表: android:stackFromBottom="true" 设置该属性之后你做好的列表就会显示你列表的最下面,值为true和false android:transcrip ...

  3. mysql备份恢复数据库据/表

    备份单个数据库,只备份表,如要恢复,必须先创建一个数据库[root@s]# mysqldump -u root -p dbname1 > dbname1.sql[root@s]# mysql - ...

  4. Android开发之火星坐标转换工具

    代码: import java.io.InputStream; import java.io.ObjectInputStream; /* * 把获取到的真实地址转换为火星坐标 */ public cl ...

  5. Math.sqrt

    java.lang.Math.sqrt(double a) 返回正确舍入的一个double值的正平方根.特殊情况: 如果参数是NaN或小于为零,那么结果是NaN. 如果参数是正无穷大,那么结果为正无穷 ...

  6. bzoj2436

    不难发现两边的活动是交替进行的,我们可以dp 先对时间离散化,设f[i,j]到时间i一个会场选j个活动,另一个会场最多有多少活动,那么f[i,j]=max(f[k,j]+s[k,i],f[k,j-s[ ...

  7. uva12716GCD XOR

    筛法,打表. 通过打表可知,但gcd(a,b)==a xor b时,a xor b = a-b. 就是求满足 c = a-b且c = a xor b 的c的个数. #include<cstdio ...

  8. return File

    public ActionResult DownloadMessage() { string strExportData = "无数据!"; byte[] data = Syste ...

  9. error while loading shared libraries: libevent-2.0.so.5解决办法

    安装memcache时,需要建立文件索引或者说文件连接(link),类似windows下的快捷方式 启动服务时出现 error while loading shared libraries: libe ...

  10. 【Unity3D】枪战游戏—发射子弹、射线检测

    一.子弹的碰撞检测: 因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了. 因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处 ...