/**
- SpringMVC 是什么
- springMVC是一种基于java实现MVC设计模型的请求驱动类型的轻量级 Web框架, 它通过一套注解, 让
- 一个简单的java类称为处理请求的控制器, 而无须实现任何接口, 同时它还支持restful编程风格的请求
- 1.清晰的角色划分
-
前段控制器(dispatcherServlet)
-
请求到处理器映射(HandlerMapping)
-
处理器适配器(HandlerAdapter)
-
视图解析器(ViewResolver)
-
处理器或页面控制器(Controller)
-
验证器(Validator)
-
命令对象(Command 请求参数 绑定到 的对象就叫命令对象)
-
表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)
*2.分工明确, 而且扩展点相当灵活,
- 3.由于对象就是一个pojo,无需继承 框架特定 API
-
- 5.可适配, 通过HandlerAdapter , 可以支持任意的类作为处理器
- 6.可定制, HandlerMapping, ViewResolver 等能够非常简单的定制
- 7.数据验证, 绑定, 国际化
- 1.启动服务器, 加载一些配置文件,
-
*DispatcherServlet对象创建
-
*springMvc.xml 被加载了 , 开启注解扫描, 把controller 这个类 变成对象,加载进 容器
-
*InternalResourceViewResolver视图解析器, 变成对象, 调用的时候可以直接工作,完成跳转页面的功能
- 在SpringMVC的各个组件中, 处理器适配器,处理器适配器, 视图解析器 称为 SpringMVC 的三大组件
- *mvc:annotation-driver/会自动加载RequestMappingHandlerMapping(处理映射器)
-
和RequestMappingHandlerAdapter(处理器适配器) RequestMappingHandlerAdapter(处理映射器),
-
可用在SpringMVC.xml配置文件中使用<mvc: annotation-driven/> 替代注释 处理器和适配器的配置
-
它就相当于 在xml 中配置了
-
<!--Begin--->
-
<!--HandleMapping--->
-
开启springmvc 框架注解的支持
- 2.发送请求 ,后台处理请求
- 入门程序 -->DispatcherServlet–>@RequestMapping("/hello"),return “success”
-
dispatcher-->InternalResourceViewResolver(视图解析器对象)-->/WEB-INF/pages/[success].jsp -->
*DispatcherServlet:控制中心, 指挥中心
*
- springMvc框架基于组件方式执行流程
-
- 客户端 --> DispatcherServlet前段控制器 :Request 接受用户请求响应
-
- DispatcherServlet前段控制器 --> HandlerMapping处理器映射器 : 请求查找Handler
- 3 HandlerMapping处理器映射器 -->DispatcherServlet前段控制器 : 放回一个执行链 HandlerExecutionChain
-
- DispatcherServlet前段控制器–>HandlerAdapter处理器适配器 : 请求适配器执行
-
- HandlerAdapter处理器适配器 -->Handler 处理器(也叫Controller) :执行
-
- Handler 处理器 -->HandlerAdapter处理器适配器 : 返回ModelAndView
-
- HandlerAdapter处理器适配器 --> DispatcherServlet前段控制器 : 返回ModelAndView
-
- DispatcherServlet前段控制器–> ViewResolver 视图解析器 : 请求运行视图解析器
-
- ViewResolver 视图解析器–> DispatcherServlet前段控制器 : 返回View
-
- DispatcherServlet前段控制器–>JSP 视图
-
- DispatcherServlet前段控制器–> response 响应
- @RequestMapping(value="/testRequestMapping",method={RequestMethod.Post})
- path=value :用于指定请求的URL ,它和path属性 的作用是一样的
- method : 用于指定请求的方式
- params: y用于指定限制请求参数的条件, 它支持简单的表达式, 要求请求参数的key和value必须和
-
配置的一模一样
- headers: 用于指定限定请求消息头的条件
- 注意: 以上四个属性只要 出现2个或以上时, 他么的关系是与的关系
- 请求参数的绑定:
- 1.绑定机制:
-
表单提交的数据都是 k=v格式的
-
SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中的参数进行绑定的
-
要求: 提交表单的name 和参数的 名称都是相同的
- 2.支持的数据类型:
-
基本数据类型和字符串类型
-
实体类型
-
集合数据类型(List 、map集合)
- 3.基本数据类型 和字符串类型
-
1.提交表单的 name和javaBean 中的属性名称要一致
-
2.如果一个javaBean 类中 包含其他 的引用类型, name表单的name 属性要编写为 对象.属性
- 4.集合属性数据封装
- 进行数据类型转换, String -->Integer
- 自定义数据类型转换器
- ·表单提交的数据类型都是字符串类型, 但是后台定义Integer类型, 数据也可以封装上, 说明spring
- 框架内部都会默认进行数据类型转换
- ·如果想自定义数据类型转换, 可以实现Converter接口
-
1.类型转换器:public class StringToDateConverter implements Converter<String, Date>{
-
2.自定义注册自定义类型转换器,在springmvc.xml配置文件中编写配置,
-
3.在springMVC框架注解的支持处添加 : <mvc:annotation-driven conversion-service="conversionService"/>
*常用的注解:
- 1.RequestParam注解
-
·作用:把请求中的指定名称的参数传递给控制器中的形参赋值
-
·属性: value: 请求参数中的名称
-
required: 请求参数中 是否必须提供此参数, 默认值是true, 必须提供
-
·代码 @RequestMapping(path="/hello")
- 2.RequestBody注解
-
·作用: 用于获取请求体的内容(注意:get方法不可以)
-
·属性: required : 是否必须有请求体, 默认值是true
-
· public String sayHello(@RequestBody String body)
- 3.PathVariable注解
-
·作用: 拥有绑定url 中 的占位符, 列如 : url中有 /delete /{id},{id}就是占位符
-
·属性: value:指定url中的占位符名称
-
·Restful风格的URL
-
1.请求路径一样, 可以根据不同的请求方式去执行后台的不同方法
-
2.restful风格的URL优点
-
结构清晰, 符合标准, 易于理解,扩展方便
-
·代码: public String sayHelo(@PathVarialbe(value="id") String id)
- 4.RequestHeader注解
-
· 作用: 获取指定请求头的值
-
· 属性: value 请求头的名称
-
· 代码: public String sayHelo(@RequestHeader(value="Accept") String header)
- 5.CookieValue注解
-
·作用:用于获取指定cookie 的名称 的值
-
·属性: value :cookie的名称
-
·代码:public String sayHello(@CookieValue="JSESSIONID" String cookieValue)
- 6.ModelAttribute 注解
-
·作用: 出现在方法上,表示当前方法会在控制器方法执行前执行
-
出现在参数上, 获取指定的数据给参数赋值
-
·应用场景
-
当提交表单数据不是完整的实体数据时, 保证没有提交的字段使用数据库原来的数据
-
·具体的代码:
-
修饰的方法有返回值
-
@ModelAttribute
-
public User showUser(String name)
-
修饰的方法没有返回值
-
@ModelAttribute
-
public void ShowUser(String name ,Mao<String ,User>map)
- 7.SessionAttributes注解
-
·作用:用于多次执行控制器方法间的参数共享
-
·属性: value 指定存入属性的名称
-
·代码:
-
@Controller @RequestMapping(path="/user")
-
@SessionAttributes(value={"username","password","age"},types={String.class,Integer.class})
- 课程总结:
-
1.创建工程,导入坐标
-
2.在web.xml中配置前段控制器, (启动服务器, 加载springmvc.xml配置文件)
-
3.编写springmvc.xml配置文件
-
4.编写index.jsp 的页面, 发送请求
-
5.编写 Controller 类, 编写 方法(@RequestMapping(path="/hello")) 处理请求
-
6.编写配置文件,(开启注解扫描) ,配置视图解析器
-
7.执行的流程
-
8.@RequestMapping 注解
-
参数绑定:
-
参数绑定, 解决中文乱码,自定义数据类型转换器
*SpingMVC框架 文件上传的原理分析
- 页面上传提交–>前段控制器–>Controller Fileupload2(MultipartFile upload) ,文件上传向
-
前段控制器<--(request/upload)-->配置文件解析器(解析request)
*注: 其中name必须与 方法的参数名称 相同
-
配置文件解析器对象,要求名称必须是 multipartResolver
- 应用服务器:负责部署我们的应用
- 数据库服务器: 运行我们的数据库
- 缓存和消息服务器: 负责处理大并发访问的缓存和消息
- 文件服务器: 负责存储用户上传文件的服务器
- 异常处理器 处理异常
- 1.编写自定义异常类(做提示信息的)
- 2.编写异常处理器
- 3.配置异常处理器(跳转到提示页面)
- 1.编写拦截器类,实现HandlerInterceptor接口
- 2.配置拦截器
*jdk1.8对接口进行了增强, HandlerInterceptor接口 的方法默认实现了, 可以方法进行重写 - Spring整合SpringMVC,启动Tomcat服务器的时候, 需要加装spring 的配置文件
- ServletContext域对象:服务器启动时创建,服务器关闭才销毁
- 一类监听器, 监听ServletContext域对象创建和销毁的, 执行一次, 服务器启动执行
- 监听器会加装spring 的配置文件 , 创建WEB 版本工厂, 存储 ServletContext对象