1、web框架功能分析
2、模拟springmvc写web框架
3、springmvc整体架构
servlet和spring 实现web框架
IOC
处理器:做业务处理的组件 类 方法 跟url有映射关系
功能分析:
使用内嵌tomcat作为servlet容器,
打开IOC扫描,后置处理器,IOC取出处理器 处理器
spring注解:@Controller 普通的bean Map<url,Object处理器>
springmvc注解:@RequestMapping url
处理器执行:
springmvc处理器类型:
@Controller @RequestMapping(url)方法 反射执行 <url,method> 反射
servlet service() 映射路径 / if else
Controller handleRequest (Controller)处理器 调用 handleRequest
HttpRequestHandler handleRequest (HttpRequestHandler)处理器 调用 handleRequest
/beanName ---> bean处理器 </id,处理器>
适配器:跟映射器一一对应 处理器是由适配器执行的
统一的接口
判断适配是否成功 Object处理器 instanseOf Controller
执行处理逻辑 (Controller)处理器 调用 handleRequest
json返回 User 序列化 @responseBody
参数绑定 @RequestParam(value)
不加注解:参数是怎么注入的
jdk7:asm
jdk8:可以通过反射获取参数名
国际化
异常
扩展
拦截器
过滤器
监听器
dubbo SPI
Tomcat SPI:服务发现机制
特定的目录(目录路径是定死的,相对路径 META-INF/service + 接口全限定名)下:实现类(字符串)
自定义类加载器:隔离应用
webapp目录:放多个war
JDK SPI
自定义类加载器:打破双亲委派
spring SPI
servlet3.0的核心接口:ServletContainerInitializers接口 调用 onStartup
为什么需要这个接口?
springmvc启动:
1、启动tomcat
2、完成IOC创建 初始化 扫描
tomcat.sh --> webapp目录 war(spring) servlet规范
ServletContainerInitializers接口实现类 任意jar
ServletContainerInitializers接口实现类放入standardContext全局变量initializers