SpringMVC:spring实现web模块简化web开发
@RequestMapping 映射请求 为控制器指定可以处理那些url请求
属性 value rul地址 method 限定请求方式 params 规定请求参数得包含什么(一系列操作) headers 和params 支持简单表达式 consums 只接受内容类型是什么的请求 produces 告诉浏览器返回的内容类型是什么
url 地址可写模糊通配符 ?代表一个字符 ,*代表躲个字符/一层路径 , **代表多层路径
@PathVariable 映射URL绑定的占位符 此注解在形参处可获取URL绑定占位符的值
springmvc如何获取请求带来的信息 (请求处理)
@RequestBody 接受JSON数据
@ResponseBody 将返回的数据放到响应体中 (相当于输出页面) 如果是对象jackson包自动将对象转为json格式
@RequestParam 获取请求参数/默认方式形参和请求参数名相同 @RequestHeader 获取请求头中某个key的值 @CookieValue 获取某个Cookie的值 请求参数是POJO Springmvc自动为这个POJO进行赋值
1.将POJO中的每个属性request参数中尝试取出来,并封装即可
2.支持级联属性
springmvc确定POJO三步:
1.没加注解就将参数类型的首字母小写作为值 ,加了@ModelAttribute,就是注解指定的值
2.如果是SessionAttributes 标注的属性就从session域中拿
3.如果都不是就反射创建对象,属性为NULL
数据输出:如何将数据带给页面
可以在方法传入Map 或则Model 或者 ModelMap 或则返回值改为ModelAndView (即包含视图信息(页面地址),也包含模型数据(给页面带数据)) 最后值都放在域中 或则 传入原生API
数据绑定原理和思想:springmvc 利用反射机制对目标处理方法进行解析,将请求消息绑到处理方法形参中
数据转换---数据格式化---数据校验
数据绑定--自定义类型转换器
1.实现Converter接口,写一个自定义的类型转换器 ,Converter是ConversionService中的组件 , 你的Converter得放进ConversionService中,将WebDataBinder中的ConversionService设置成我们这个加了自定义类型转换器的ConversionService
2.配置ConversionService
3.让SpringMVC使用我们的ConversionService <mvc:annotation-driven conversion-service="conversionService"/>
数据格式化 @DataTimeFormat (pattern = "yyyy-MM--dd") @NumverFormat(pattern="#,###.##")
数据校验 springmvc 可用JSR303来做数据校验
Springmvc快速完成ajax功能
1.返回的数据格式是JSON就ok
2.页面发起ajax请求 $.ajax()
springmvc解决方式: 导入kackson包 写配置 (返回方法上面+注解@ResponseBody ) 测试
Springmvc支持文件上传
1.文件上传表单准备 表格属性 enctype="multipart/form-data"
2.导入包(fileupload) commons-fileupload-1.2.1jar commons-io-2.0.jar
3.配置文件上传解析器 (springmvc九大组件之一)
4.文件上传请求处理 在处理器方法的参数里+MultipartFile file
5.多文件上传 在处理器方法的参数里+MultipartFile [] file
拦截器
1.拦截器是一个接口
2.实现了HandlerInterceptor接口
3.配置拦截器
4.拦截器流程
实现了HandlerInterceptor接口,重写方法 , 在springmvc配置文件中注册这个拦截器的工作 , 配置这个拦截器去拦截什么请求
SpringMVC异常处理
流程 所有解析器尝试解析
ExceptionHandlerExceptionResolver @ExceptionHandler
ResponseStatusExceptionResolver @ResponseStatus
DefaultHandlerExceptionResolver 判断是否springmvc自带异常
@ExceptionHandler告诉springmvc这个方法专门处理这个类的异常(指定处理异常的类型)
@ResponseStatus 自定义一个异常
告诉springmvc这个方法处理异常
1.方法形参上随便写一个Exception,用来接受发生的异常
2.要携带异常信息,不能给参数写Model
3.返回ModelAndView
4.多个ExceptionHandler都能处理异常时,精度优先
前端控制器DispatchServlet
<load-on-startup>1</load-on-startup> 服务器启动时创建对象,值越小优先级越高,越先创建对象
servlet启动加载 Servlet原本是第一次访问创建对象
ContextConfigLocation : 指定springmvc配置文件位置
<url-pattern>/</url-pattern>
如果不指定ContextConfigLocation , 就使用默认位置
Tomacat处理静态资源 DefaultServlet是Tomacat处理静态资源的(除了jsp和servlet,其他为静态资源)
服务器的web.xml中有一个DefaultServlet 配置 <url-pattern>/<url-pattern 我们配置一个<url-pattern>/<url-pattern>会将原先配置
覆盖掉DispatchServlet 找不到requestMapping是静态资源的。处理不了。。jsp可以因为他的配置没有被覆盖掉
视图解析器
流程: 请求方法处理后,最终返回一个ModelAndView对象,springmvc在内部将他们装配成一个ModelAndView对象,他包含逻辑名和模型对象的视图
springmvc借助视图解析器得到最终视图对象(view)
视图作用:渲染模型数据,将模型里的数据以某种形式呈现给客户
视图解析器作用:将逻辑视图解析为一个具体的视图对象,所有视图解析器必须实现viweResolver接口
视图解析器根据方法的返回值得到视图对象
多个解析器依次尝试能否得到视图对象 视图对象不同就可以具有不同功能
view作用: 将Model里数据放入request域中 转发到所需页面中
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
DefaultAnnotationHandlerMapping中的handlerMap中保存了每一个资源的映射信息
静态资源不能访问就是handlerMap中没有保存静态资源映射的请求 就没有 HandlerAdapter(方法执行的适配器)
加上<mvc:default-servlet-handler/>,handlerMapping有变化 DefaultAnnotationHandlerMapping默认的没了
用SimpleUrlHanderMapping替换
HandlerMapping 保存了请求映射信息 HandlerAdapter 找到能处理目标处理器类方法的适配器