Spring MVC的核心组件
在SpringMVC的运行流程中我们可以发现DispatcherServlet负责整体调度工作,而实际工作的是三大组件
1.HandlerMapping 【处理器映射器】
作用: 根据请求路径找到对应的方法(处理器)
在服务器启动,SpringMVC的配置文件加载时,会扫描指定的包,当扫描到@RequestMapping注解时,会建立请求路径与当前方法(处理器)的对应关系
处理器: Handler
指的就是我们自己编写的java代码(web层的Controller)
2.HandlerAdapter【处理器适配器】
作用: 反射调用方法执行
处理器的实现方式有多种(把一个普通类变成处理器的方式,一旦一个类变成了处理器,SpringMVC就可以使用反射技术调用此方法执行了):
方式1: 自定义一个类,实现Controller接口,重写handleRequest方法
SimpleControllerHandlerAdapter
方式2: 自定义一个类,实现HttpRequestHandler接口,重写handleRequest方法
HttpRequestHandlerAdapter
方式3: 自定义一个类,在方法上添加@RequestMapping注解
RequestMappingHandlerAdapter
当根据请求路径找到对应的类或方法时,判断(适配)当前处理器的实现方式,并调用指定的处理器适配器类执行,处理器适配器类的执行,就可以让方法执行了.
if(处理器实现了 Controller接口){
// 调用处理接口类的处理器适配器执行
}else if(处理器实现了 HttpRequestHandler接口){
// 调用处理接口类的处理器适配器执行
}else if(处理器类上面有注解){
// 调用处理注解的处理器适配器执行
}
3.viewResolver【视图解析器】
作用: 根据逻辑视图匹配到真正的视图,并将物理视图返回给前端控制器(核心控制)(根据返回的视图名称,找到具体的视图位置)
关于视图解析器,有几个配置很重要
@RequestMapping("/hello")
public String hello(){
System.out.println("Hello world");
//默认代表转发,相当于forward:hello.jsp
//可以使用 redirect:改为重定向
return "success";
}
<!-- 配置视图的前后缀 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/" />
<!--后缀-->
<property name="suffix" value=".jsp" />
</bean>
3. 源码分析
当服务器启动时,SpringMVC框架的加载流程:
1.服务器启动,只会加载项目的web.xml(web项目的核心配置文件)
2.创建前端控制器对象(核心控制器),DispatcherServlet
3.解析SpringMVC的配置文件
4.执行DispatcherServlet的初始化方法,完成初始化操作
根据配置文件的配置扫描包,建立请求路径与方法的对应关系
创建处理器映射器对象存放路径与方法的对应关系
5.初始化处理器适配器
6.初始化视图解析器