java mvc 框架源码分析_SpringMVC源码解读

1.SpringMVC简介

SpringMVC框架是围绕一个DispatherServlet来设计的。这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还支持文件上传。处理器是应用中使用注解@Controller和@RequestMapping的类和方法,Spring为处理器方法提供了极其灵活的配置。

“对扩展开放”是Spring web MVC 框架的一个重要的设计原则,而对应Spring整个框架来说,其设计原则是“对扩展开放,对修改关闭”。

2.关于DispatherServlet

从这张图可以清晰的看出,DispatherServlet本质上就是一个Servlet。

引申:Servlet生命周期

2.DispatherServlet初始化过程

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1" metadata-complete="true">

contextConfigLocation

classpath:applicationContext.xml

spring

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring-servlet.xml

spring

/

org.springframework.web.context.ContextLoaderListener

1.Servlet 是个接口

public void init(ServletConfig config) throws ServletException;

2.GenericServlet 中实现了初始化方法。

public void init(ServletConfig config) throws ServletException {

this.config = config;

this.init();//空方法,留给子类实现

}

3.HttpServlet 没有对初始化相关的方法进行覆盖。

4.HttpServletBean,重写了init()方法。

其中又调用了一个initServletBean();方法,这本类中也是个空实现。

5.FrameworkServlet 重写了上边留空的方法:initServletBean();

在initServletBean方法中最重要的就是调用了一个initWebApplicationContext() 方法。

initWebApplicationContext()内部调用了onRefresh(), 这个方法在本类中为空实现,留给子类去实现。

6.DispatcherServlet,找到onRefresh()

@Override

protected void onRefresh(ApplicationContext context) {

initStrategies(context);

}

protected void initStrategies(ApplicationContext context) {

initMultipartResolver(context);

initLocaleResolver(context);

initThemeResolver(context);

initHandlerMappings(context);

initHandlerAdapters(context);

initHandlerExceptionResolvers(context);

initRequestToViewNameTranslator(context);

initViewResolvers(context);

initFlashMapManager(context);

}

至此,DispatherServlet初始化完毕!

3.DispatherServlet工作原理

①:DispatcherServlet是springmvc中的前端控制器(front controller),负责接收request并将request转发给对应的处理组件.

②:HanlerMapping是springmvc中完成url到controller映射的组件.DispatcherServlet接收request,然后从HandlerMapping查找处理request的controller.

③:Cntroller处理request,并返回ModelAndView对象,Controller是springmvc中负责处理request的组件(类似于struts2中的Action),ModelAndView是封装结果视图的组件.

④ ⑤ ⑥:视图解析器解析ModelAndView对象并返回对应的视图给客户端.

4.几个关键的类或接口

HandlerMapping

HandlerExecutionChain

HandlerInterceptor

HandlerAdapter

View

5.分步讲解源码

java mvc 框架源码分析_SpringMVC源码解读_第1张图片

你可能感兴趣的:(java,mvc,框架源码分析)