1 什么是springMVC ,有什么用?
springmvc 作为web 层,面对的是和页面请求路径直接的配置。由于他的controller注解,也可以称web层为controller层。
mvc 模型, model 为数据模型,用于封装数据对象。
view 是展示数据,如jsp ,html
controller 是处理用户交互的部分,处理程序逻辑
如用户提交注册用户的表单,js要校验数据准确性,来到后台controller 也要进行校验,错误或者失败把错误页面给用户,成功把数据模型传递给页面模型,实现完成的业务需求
主要内容:
前端控制器(DispatcherServlet) 请求到处理器映射(HandlerMapping) 处理器适配器(HandlerAdapter) 视图解析器(ViewResolver) 处理器或页面控制器(Controller) 验证器( Validator) 命令对象(Command 请求参数绑定到的对象就叫命令对象) 表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。
1.1和struts2 比较,
处理请求的机制都是一个核心控制器。
但是springmvc 入口是servlet ,struts2是filter.( 这就更好区分拦截器 和过滤器的区别了)
Spring MVC 是基于方法设计的,而 Struts2 是基于类,Struts2 每次执行都会创建一个动作类。所 以 Spring MVC 会稍微比 Struts2 快些
spring mvc 过滤器和filter 拦截器的区别
过滤器是可以所有url的请求 如 urlPatter = "/"
而spring拦截器基于方法的,只拦截请求的方法,如果是*.jsp 或者*.html 等页面或者静态资源时拦截不到的
2 spring mvc 的使用:
步骤:
1 maven pom.xml 引入坐标
2 web.xml配置核心控制器 dispacherServlet ,拦截所有访问路径
3 springmvc.xml 配置 controller 的包,和视图解析器 ,注解驱动.完毕。
4 测试。
maven 引jar包坐标,
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<artifactId>spring-web</artifactId>
<artifactId>spring-webmvc</artifactId>
<artifactId>servlet-api</artifactId>
<artifactId>jsp-api</artifactId>
1) web.xml
2) springmvc.xml 配置扫面的@controller注解所使用的类所在的包
把url 和扫描的包的url 比对 ,比对成功,视图解析器返回相应的视图结果
3 扫描位置编写类和方法
流程 及原理:
以上是对springmvc 初步的配置和使用:
3 请求参数 和编码过滤器 自定义类型转换器(string -date)
3.1请求参数和返回值对象参数
基本类型参数: 包括基本类型和 String 类型
POJO 类型参数: 包括实体类,以及关联的实体类
数组和集合类型参数: 包括 List 结构和 Map 结构的集合(包括数组)
如果是基本类型或者 String类型: 要求我们的参数名称必须和控制器中方法的形参名称保持一致。(严格区分大小写)
如果是 POJO类型,或者它的关联对象: 要求表单中参数名称和 POJO 类的属性名称保持一致。并且控制器方法的参数类型是 POJO 类型。
如果是集合类型,有两种方式:
第一种: 要求集合类型的请求参数必须在 POJO 中。在表单中请求参数名称要和 POJO 中集合属性名称相同。
给 List 集合中的元素赋值,使用下标。 给 Map 集合中的元素赋值,使用键值对。
第二种: 接收的请求参数是 json 格式数据。需要借助一个注解实现
3.2请求参数乱码问题
post 请求方式:
在 web.xml 中配置一个过滤器 :
get 请求方式:要改 tomcat 的 server.xml 配置文件,如下:
3.3 自定义类型转换器
3.4 另外 springmvc 对于servlet 的几个HttpServelt 域对象也是支持的。
4 对于spring mvc 的拦截器:
我们要想自定义拦截器, 要求必须实现:HandlerInterceptor 接口
1. 拦截器的概述
1. SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。
2. 可以定义拦截器链,连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链 中的拦截器会按着定义的顺序执行。
3. 拦截器和过滤器的功能比较类似,有区别
1. 过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。
2. 拦截器是SpringMVC框架独有的。
3. 过滤器配置了/*,可以拦截任何资源。
4. 拦截器只会对控制器中的方法进行拦截。
4. 拦截器也是AOP思想的一种实现方式
5. 想要自定义拦截器,需要实现HandlerInterceptor接口。
拦截器的前处理和后处理机制,怎么个顺序进入,怎么个顺序退出。
5 其他重要请求的注解
requestparam requestbody pathVarible
获取请求头requestHeader cookieValue SessionAttribute
、
6 响应对象及相关注解
6.1返回页面有两种方式,默认字符串是 转发 。
6.2 如果要响应数据为JSON数据:使用注解@RequestBody
使用@RequestBody注解把json的字符串转换成JavaBean的对象( 不加也可以)
使用@ResponseBody注解把JavaBean对象转换成json字符串,直接响应
数据总是传不过去,改为:
data : JSON.stringify({"name":"hehe","password":"123","age":30}),
注意:json字符串和JavaBean对象互相转换的过程中,需要使用jackson的jar包
>jackson-databind >jackson-core >jackson-annotations
7 图片上传
7.1 普通图片上传
7 自定义异常
系统的 dao、service、controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端 控制器交由异常处理器进行异常处理.spring mvc 的异常处理器HandlerExceptionResolver
自定义异常有4步骤:
1 定义异常类 2定义异常页面 3 定义一场处理器 4 配置一场处理器 5 测试异常 主动抛出异常