您的位置:首页 > 编程语言 > Java开发

开涛SpringMVC笔记

2015-08-03 22:55 549 查看

SpringMVC笔记

再次学习开涛SpingMVC,总结此笔记,鸣谢开涛:

1.SpringMVC简介

2.Spring MVC-HelloWorld

3.DispatcherServlet理解

4.Controller接口详解

5.Controller拦截器详解

6.Controller注解详解

6.1 Controller注解——生产者消费者模式

* 未完 *

1.SpingMVC简介

1.请求-响应模型
2.标准MVC模型
3.WebMVC模型
4.Web发展流程
CGI、Servlet、JSP、Model1(JSP+JavaBean)、Model2(Web MVC)

5.WebMVC特点、各模块特点

2.SpringMVC-HelloWrold

1.SpringMVC是什么、有什么用
2.SpingMVC架构——请求处理流程(**)
3.优势
4.HelloWorld(**
流程分析,乱码配置(Post乱码配置)

5.SpringMVC特性(*),即注解配置
常用注解;RestFul注解配置;其他注解配置

3. DispatcherServlet详解

1.dispatcherServlet 作用
2.web.xml配置
3.上下文关系、调用顺序等等(**)
4.初始化顺序;
5.默认配置

4.Controller接口详解

1.Controller作用
2.Controller类图、接口等
3.AbstractController用法
通过response 写响应;

在xml中,在Controller的配置属性property设置:

强制请求方法类型为post或get;

强制要求请求有session,串行访问;

设置客户端缓存时间;客户端不缓存;

ETag(实体标记)缓存机制;(客户端第一次请求时,服务器给客户端一个ETag,当客户端第二次请求时,服务器端计算ETag,没有变化,则http响应头状态为304;

4.ServletForwardingController
客户端请求这个Controller时,这个Controller可以将请求Forward到一个Servlet

5.AbstractCommandController——命令控制器(废除)
客户端请求 user.name,user.pwd时,该控制器能自动装配user bean

6.SimpleFormController(表单控制器)
写一个自定义控制器,实现该接口,其中实现 formBackObject 和referenceData 方法,这两个方法返回的Object就是 你要提交的表单数据对象;

7.CancellableFormController
和上面类似,实现 OnCancel()方法,

8.AbstractWizardFormController——向导控制器
写一个自定义控制器,实现该接口,其中实现 referenceData() _实现逻辑,第一页返回啥,第二页返回啥

processFinish()_结束后返回啥

processCancel()_取消后返回啥

方法,并在xml中配置即可,即可实现一步一步的引导功能;

9.AbstractUrlViewController
在xml文件中配置的类,将请求的Url转换成为返回视图

/index/*,可以匹配 /index/demo

/index/**,可以匹配index下的所有目录,包括/index/demo,index/xxx/demo

/*.html,匹配abc.html

?,匹配一个字符,/index?,匹配 /index1,但是不匹配/index,/index12

,匹配零个或多个字符,如/index/,可以匹配一个/index/demo,但不匹配 /index/demo/demo

**,可以匹配/index/demo/demo

最长匹配优先

10.MultiActionController——废除
场景,每一个功能对应一个控制器,如CRUD操作。

用法:

public (ModelandView | Map | String | void) actionName (httpServletRequest request,HttpServletRespose response, HttpSession session, AnyObject)


实现上述的方法即可,注意参数是可选的

然后在xml文件中配置,引用的类
<bean id ="xx"  class = "org.xx.xx.MethodNameParse“>
根据请求的方法名解析成相应方法

<bean id ="xx" class="org.xx.xx.PropertiesMethodNameReslover>
根据配置的属性映射

11.ResqusetToViewNameTranslator
直接将请求转换成为 返回的逻辑视图名

12.数据类型转换

写一个属性转换编辑器,继承PropertyEditorSupport;

写一个Controller,继承AbstractCommandController,在其中某一个方法中绑定注册属性(例如针对电话号码类转换,就使用CustomDateEditor)转换编辑器;

在xml中注册这个Controller即可;

如果使用WebDataBinder,而不是CustomDateEditor,则注册的这个属性转换器是这个Controller所独享,如果不想独享,使用WebBindingInitializer注册即可。

PropertyEditor 被限制为只能 String<——>Object 之间转换, 不能 Object<——>Object, Spring3 提供了更强大的类 型转换( Type Conversi on) 支持, 它可以在任意对象之间进行类型转换, 不仅仅是 String<——>Object。

13.数据验证(**)
流程:

1、 首先进行数据绑定验证,如果验证失败会通过 MessageCodesResolver 生成错误码放入 Errors 错误

2、 数据不合法验证, 通过自 定义的验证器验证,如果失败需要手动将错误码放入 Errors 错误对象;

错误对象和错误消息:什么场景下使用和怎么使用

数据绑定失败的处理方法

数据不合法时候的处理方法:实现Validator接口,实现其中的supports()和validate()方法即可;

5. 处理器拦截器详解(**)

1.类似于Servlet中的filter过滤器
2.应用场景
日志记录(信息统计,计算PV);

权限检查(登录认证);

性能监控;

通用行为;

OpenSessionInView

3.拦截器接口和适配器
HanderInterceptorAdapter,其中preHander(),postHander(),afterCompletion

实现这个接口,并在xml中在Controller下的属性中进行相应的配置即可达到目的

举例:性能监控,记录这个Controller耗时情况(); 登录认证():

6. 注解式控制器详解

1.常见的注解;
2.注解式控制器运行流程及处理器定义
@Controller

@RequestMapping

窄化请求映射:在类名上为父,在方法上为子;

请求映射规格:URL路径映射(普通URL映射;URI映射;Ant风格映射;正则表达式映射;或 映射)

请求方法限定:限定为post或者get ,@RequestMapping(value=”create”,method = RequestMethod.POST)

请求参数数据限定:@RequestMapping(Params=”create”),匹配 http://xx/params1?create

请求数据中指定参数名和没有指定参数名

请求数据中指定参数名=数据和!=数据

请求数据中参数名之间是”且“关系

请求头(header)数据和上面类似

:    请求数据中指定参数名和没有指定参数名;
请求数据中指定参数名=数据和!=数据;
请求数据中参数名之间是”且“关系;


第六章 注解式控制器详解 ——生产者消费者模式

1.基本概念(Http中传输的类型)
Media Type 媒体类型——即请求的内容类型或响应的内容类型

Context-Type内容类型:请求头的内容类型,即发送到服务器的内容数据的媒体类型

(key/Value数据类型、JSON数据类型)

@RequestMapping(value=”/response/Content-Type“,headers=”Content-Type = application/json”)

Accept:告诉服务器,我需要什么样的媒体类型(举例:xml数据和Json数据)

@RequestMapping(value=”/response/Content-Type“,headers=”Accept = application/json”)

2.生产者消费者流程图
生产者和消费者的理解:谁产生数据、封装数据,谁就是生产者,反之,谁就是消费者

1.生产者、消费者注解使用前提:在xml中配置

2.功能处理方法是消费者时:

@RequestMapping(value=”/consumes”,consumes=”{application/json}”),consumes表示消费者

@RequestMapping(value=”produces”,produces=”{application/json}”),

3.窄化时是覆盖,而不是继承:

即在生产者、消费者模式下,方法级别的映射覆盖类级别的映射;在其他模式下,方法级别的映射 继承消费级别的映射;

4.组合使用的是“或”关系
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc