传统开发中的控制层:
接收请求参数 request.getParameter
封装实体 new 实体类调用其set方法
访问业务层
接收访问结果
指派页面 通过request和response对象进行页面跳转
将共有行为进行抽取成DispatcherServlet【SpringMVC内部集成】,通过Spring-MVC.xml配置文件去配置。
Spring:
获取请求参数:形参与请求名一致或对象的属性与请求名一致即可自动获取封装,不一致时可用@RequestParam(“请求名”)获取请求的参数
指派页面:内部可通过配置视图解析器中前后缀的方式,简化视图名,可以直接返回字符串或者ModelAndView对象
SpringMVC可以让一个简单的Java类成为处理请求的控制器,无需实现任何借口,支持RESTful编程风格
DispatcherServlet不执行具体操作,负责的是相应调度
1DispatcherServlet接收到请求后,调用HandlerMapping执行请求解析,返回给DS一个处理器执行链
2.拿到处理器执行链后,DS本身并不执行,找HandlerAdaptor帮助进行执行,由HandlerAdaptor调用执行Handler,返回给DS一个ModelAndView
3.解析视图时,会去调用ViewResolve进行解析,返回一个View,最后进行渲染视图
存在问题1;
每个servlet中,都需要加载相应的配置文件
弊端:配置文件加载多次,容器创建多个
解决办法:将其放在filter中,将创建容器的代码放在filter中。将容器对象存放在最大的域中【ServletContext域】
直接找对象拿,不通过属性名更省心
ServletContextLinstener中监测到web应用程序启动
Spring【SpringMVC内部集成】提供了ContextLoaderListener 导入其对应的坐标即可
存在问题2:应用配置文件名写死,解决方法:
1.使用全局初始化参数
获取app时,通过WebAppliacationContextUtils的静态方法,获取应用上下文对象
方法谁调用谁负责传入实参(MVC框架调用)常用的对象都进行了封装
1.DispatcherServlet内部是缺省的,所有的web请求都会通过DispatcherServlet,会将静态资源当作,requesmapping中去匹配,找不到时,便会报错
解决办法:开启静态资源访问权限
可以有多个
解决办法2:交由默认的处理器进行处理
1.tomcat8.5 get请求乱码问题已解决(之前需要再tomcat目录下修改相关配置)
2.post乱码问题
post乱码问题的两个解决办法:
办法1:request对象设置
办法2:配置全局过滤filter,内部设置编码格式
Spring框架已提供:CharacterEncodingFilter
映射地址改为 /*
请求url和请求的方法之间建立映射关系 可以用在类和方法上
注意:可以改变请求的方法类型,和限制必须携代哪些请求参数,内部可以设置输出字符串的编码方式
告知SpringMVC框架进行的是字符串的会写,而不是进行页面的跳转
1.直接返回字符串 【和内部资源视图解析器拼接时,进行返回,拼接是字符串内部进行拼接】
2.通过ModelAndView对象返回
通过ModelAndView的方法设置属性名,里面同直接返回字符串一样,会进行拼接
1.直接返回字符串
需要添加@ResponseBody告知框架,不要进行页面跳转,进行字符串的输出 重点!!!!!
需要指定格式
用到json转换工具
导包
jackson-core
jackson-databind
jackson-annnotations
new ObjectMapper
调用其write
默认属性
value属性是默认属性,只有这一个可以省略不写
内部集成了jackson json转换工具
导入mvc命名空间后添加注解驱动如下
监听器:当事件发生时,执行相关操作,比如服务器一启动,加载Spring核心容器
过滤器:访问目标资源前,做干预操作,如post请求中文乱码问题,配置在web.xml中的filter
拦截器:类似于Servlet开发中的Filter,用于对处理器进行预处理和后处理
拦截器决定是否进行放行操作,拦截器是AOP思想的体现
filter和Interceptor区别:
1.Filter是Servlet规范中的一部分,任何Java Web工程都可以使用 在url-pattern配置/* 后,对所有要访问的资源拦截
2.Inteceptor:是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才可以使用,配置/** 后,可以对所有资源进行拦截
过滤器:实现filter接口,将实现类配置在web.xml中即可
拦截器:实现HandlerInteceptor接口,将实现类配置在Spring-mvc中
preHandler :返回false,后续Controller不再执行
postHandler 目标方法执行完毕之后执行,在视图对象返回前进行
afterCompletion : 视图对象返回之后,在流程执行完毕后执行,做收尾工作
return返回的资源加/ 表示从根目录访问
只有在一个Sevlet请求中才可以获取ServletContext对象
所有的url请求到web端都是字符串
架构风格、设计风格
url+请求方式
GET 获取资源
POST 新建资源
PUT 更新资源
DELETE 删除