java进阶学习2-springmvc


springmvc基础

1. spring是基础层框架,主要解决ioc和aop的问题,springmvc是web应用层框架,解决web应用前后台交互的问题,属于spring系列中的spring-web部分,springdata是数据层框架,解决应用于数据库交互问题,属于spring系列中的spring-dataAccess部分
2. springmvc的设计理念
	1. java web基础架构规范分为servlet容器和容器实例,tomcat等web容器启动后加载容器实例,作为后台服务相应
	2. springmvc解决了servlet实例于servlet容器的高耦合性问题,只通过前端控制器dispatcherServlet这一个来与容器交互,统一接受请求后内部转发处理
3. springmvc请求处理流程
		1. 请求到达前端控制器DispatcherServlet
		2. DispatcherServlet调用handlerMapping映射处理器
		3. 映射处理器匹配url找到具体的后端控制器handler,生成处理器对象和Filter拦截链,返回给DispatcherServlet
		4. DispatcherServlet调用handlerAdapter处理器适配器去调用handler
		5. 执行handler
		6. 处理器适配器返回ModelAndView
		7. DispatcherServlet调用ViewResolver解析视图-根据视图名查找视图
		8. ViewResolver返回View视图
		9. Dispatcher根据选择的视图渲染技术(jsp,freemarker)渲染视图
		10. response返回结果
4. 九大组件  -DispatcherServlet作为servlet是容器技术的一部分,不是springmvc特有的
		1. HandlerMapping 映射处理器
		2. HandlerAdapter 处理器适配器
		3. HandlerExceptionResolver 异常处理器
		4. ViewReslover 视图解析器
		5. MultipartResolver 文件上传处理器
		6. RequestToViewNameTranslator 视图名默认处理器
		7. LocaleResolver ViewResolver使用,表示区域,i18n国际化组件,做语言适配,编码问题
		8. ThemeResolver 主题处理器,视图主题设置
		9. FlashMapManager 负责重定向时的数据传递
5. HttpServletRequest模型视图传参机制
	1. 在传统的前后端不分离的设计中,request负责handler到view之间的数据传递,在handler中可以声明ModelMap,Model,Map等参数用于数据传递,HandlerAdapter会传入他们的同一个子类实现org.springframework.validation.support.BindingAwareModelMap
6. springmvc传递参数机制
	1. 基础数据类型, 直接声明,自动映射,前后台参数名称不一致时可以通过RequestParam做映射
	2. pojo, 直接声明,自动映射
	3. 日期类型,
		1. **org.springframework.core.convert.converter.Converter** 声明类型转换器,实现上述接口并注册继续类型转换
		2. 请求方式转换过滤器,可以按post请求时_method参数定义的请求方式进行转化
7. 过滤器Filter  web.xml中配置
	1. characterEncodingFilter  编码过滤器,针对请求体中的数据,如果是get请求,由于参数存放于url,还需要在tomcat中配置编码
8. 监听器   web.xml中配置
	1. tomcat组件,tomcat启动时会加载
		1. 用来做spring上下文的启动 ContextLoaderListener
		2. 监听tomcat事件,如httpSession和ServletRequest的创建和销毁,变量的创建和销毁,如HttpSessionListener
9. 拦截器 
	1. springMvc组件,实现handlerInterceptor接口,提供preHandle、postHandle、afterCompletion三个方法,用于对handler做拦截增强
	2. 拦截器的执行流程
		1. prehandle
		2. handle
		3. posthandle
		4. DispatcherServelet渲染视图
		5. afterCompletion
10. Restfull风格   @pathVariable
11. 重定向参数传递两种方式
	1. url路径拼接
	2. session存储,例如使用RedirectAttributes对象(实际存储到session中)

手写springmvc框架

1. 自定义注解扫描class文件生成bean
2. 定义DispatcherServlet,实现doget和dopost
3. Servlet启动装载指定配置文件,启动IOC流程
4. 生成HandlerMapping对象,装配url和handler的映射信息
5. 编译时需要指定插件保留方法的类型参数名称-parameters(框架指定必须为此写法),否则编译后方法名为args0、args1这种形式,会导致方法参数装配失败

源码分析

1. DispatcherServlet最终继承Servlet,
	1. 在Servlet中的init()方法中调用了configureAndRefreshWebApplicationContext()->refresh(),启动了springIOC容器,创建了上下文SpringApplicationContext
	2. 在Servlet中的init()方法中调用了onRefresh() -> initStrategies(context),传入上下文,启动了springmvc的web策略初始化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值