`

mvc-HandlerMapping

 
阅读更多

HandlerMapping:定义了web请求映射和处理器(Handler)之间的映射

类结构:



 

handler的种类:

Servlet
Controller
HttpRequestHandler (Spring Invoke)
Bean  (@RequestMapping)

顶层抽象:
AbstractHandlerMapping:支持sort,默认handler,handler interceptors;关联ApplicationContext ;封装HandlerExecutionChain

URL匹配:

  1. AbstractUrlHandlerMapping:支持注册url->hander的映射(直接,模糊);handerName->handlerBean;
  2. AbstractDetectingUrlHandlerMapping:支持从application context中自动发现 handler;启动初始化
  3. AbstractControllerUrlHandlerMapping:支持判断是否实现 Controller接口,或者Controller 注解修饰

HandlerMethod匹配:

  1. AbstractHandlerMethodMapping:实现 request和HandlerMethod的映射及注册;InitializingBean 启动初始化
  2. RequestMappingHandlerMapping: 实现url->RequestMappingInfo->HandlerMethod的映射

具体实现:

  1. SimpleUrlHandlerMapping:支持直接配置,调用父类注册
  2. BeanNameUrlHandlerMapping:支持以 /beanName->beanName 的形式注册
  3. ControllerBeanNameHandlerMapping:
  4. ControllerClassNameHandlerMapping:
  5. RequestMappingHandlerMapping:
  6. DefaultAnnotationHandlerMapping:已经废弃

默认策略:

DispatcherServlet.properties 默认配置:BeanNameUrlHandlerMapping,DefaultAnnotationHandlerMapping
<mvc:annotation-driven/>配置:RequestMappingHandlerMapping,BeanNameUrlHandlerMapping

<mvc:default-servlet-handler/>配置:SimpleUrlHandlerMapping

<mvc:annotation-driven/>配置:SimpleUrlHandlerMapping(Controller接口)

<mvc:view-controller/> 配置: SimpleUrlHandlerMapping (ParameterizableViewController实现类)

DispatcherServlet初始化策略:

private void initHandlerMappings(ApplicationContext context) {
		this.handlerMappings = null;

		if (this.detectAllHandlerMappings) {
			// Find all HandlerMappings in the ApplicationContext, including ancestor contexts.
			Map<String, HandlerMapping> matchingBeans =
					BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerMapping.class, true, false);
			if (!matchingBeans.isEmpty()) {
				this.handlerMappings = new ArrayList<HandlerMapping>(matchingBeans.values());
				// We keep HandlerMappings in sorted order.
				OrderComparator.sort(this.handlerMappings);
			}
		}
		else {
			try {
				HandlerMapping hm = context.getBean(HANDLER_MAPPING_BEAN_NAME, HandlerMapping.class);
				this.handlerMappings = Collections.singletonList(hm);
			}
			catch (NoSuchBeanDefinitionException ex) {
				// Ignore, we'll add a default HandlerMapping later.
			}
		}

		// Ensure we have at least one HandlerMapping, by registering
		// a default HandlerMapping if no other mappings are found.
		if (this.handlerMappings == null) {
			this.handlerMappings = getDefaultStrategies(context, HandlerMapping.class);
			if (logger.isDebugEnabled()) {
				logger.debug("No HandlerMappings found in servlet '" + getServletName() + "': using default");
			}
		}
	}

 

  • 大小: 288.1 KB
0
0
分享到:
评论

相关推荐

    spring-webmvc-struts.jar

    4. **ActionMapping**:映射Action和URL的关系,类似Spring MVC的HandlerMapping。 5. **Tiles**:视图组件,帮助构建复杂的页面结构。 四、`spring-webmvc-struts.jar`的关键功能 1. **StrutsPlugIn**:这个类是...

    spring-mvc-showcase

    《Spring MVC 展示应用深度解析》 Spring MVC 是 Spring 框架的重要组成部分,它为构建基于模型-视图-控制器(MVC)模式的Web应用程序提供了强大的支持。"spring-mvc-showcase"项目是Spring官网提供的一个实战示例...

    spring-webmvc-5.0.9 jar包、源码和javadoc

    《Spring Web MVC 5.0.9:深度解析与应用》 Spring Web MVC是Spring框架的核心模块之一,专为构建Web应用程序提供模型-视图-控制器(MVC)架构支持。在Spring 5.0.9这个版本中,它延续了Spring对开发者友好、灵活且...

    spring-mvc-study.zip

    2. servlet-context.xml:Spring MVC的配置文件,用于配置视图解析器、HandlerMapping、HandlerAdapter等。 3. applicationContext.xml:Spring的上下文配置文件,通常用于配置bean,如Service、DAO等。 4. ...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    它包括了DispatcherServlet、ModelAndView、ViewController、HandlerMapping、HandlerAdapter等关键组件,为Web开发提供了强大的工具。 这些jar包的使用通常涉及以下知识点: 1. **依赖注入**:理解如何通过XML...

    spring-webmvc-3.2.5.RELEASE

    Spring Web MVC是Spring框架的一个重要模块,主要用于构建Web应用程序的后端控制器。在这个"spring-webmvc-3.2.5.RELEASE"版本中,我们聚焦于Spring 3.2.5这一稳定版本,它提供了丰富的功能和改进,以支持开发者构建...

    spring-webmvc-portlet-3.1.1.RELEASE.jar.zip

    在Spring Web MVC Portlet的配置中,我们需要定义portlet的配置类,创建DispatcherPortlet实例,并配置处理器映射器(HandlerMapping)和视图解析器(ViewResolver)。此外,还需要在portlet-context.xml中配置...

    spring-mvc-test-sample-master.zip_spring mvc_springmvc-test

    7. **HandlerMapping**和**HandlerAdapter**:这两者是Spring MVC的内部组件,HandlerMapping负责将URL映射到合适的处理器,HandlerAdapter则负责调用控制器的方法。 8. **ViewResolver**:视图解析器的作用是根据...

    mdeinum-pro-spring-mvc-code

    1. **配置文件**:Spring MVC的配置文件(如`web.xml`和`spring-servlet.xml`)中包含了各种组件的定义,包括DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver等。通过分析配置,我们可以了解其...

    spring-webmvc-3.1.1.RELEASE.jar.zip

    3. **HandlerMapping与HandlerAdapter**: 这两个组件负责映射HTTP请求到合适的处理器方法。Spring Web MVC 3.1.1提供了更灵活的策略,包括基于注解的映射和基于类的映射,使得处理器方法的选择更加智能化。 4. **...

    spring-mvc-demo.zip

    《Spring MVC 框架深度探索与实践》 在当今的Java Web开发领域,Spring MVC框架无疑是最为流行和广泛使用的MVC(Model-View-Controller)架构之一。本资料"spring-mvc-demo.zip"旨在深入解析Spring MVC的核心概念、...

    Spring MVC step-by-step 源码

    - `dispatcher-servlet.xml`:主要配置Spring MVC的组件,如HandlerMapping、Controller、ViewResolver等。 - `applicationContext.xml`:配置业务逻辑组件,如Service、DAO以及它们之间的依赖关系。 4. **请求...

    Spring-mvc-showcase

    它通过配置的 HandlerMapping 映射 URL 到控制器,然后由 HandlerAdapter 调用控制器方法处理请求。 4. **控制器与模型-视图-模型**:控制器是处理请求的核心,通常以 @Controller 注解的类实现。它们通过 @...

    AngelRM_MVC-master.zip

    **标题:“AngelRM_MVC-master.zip”** **描述:**这个压缩包文件“AngelRM_MVC-master.zip”包含了一个基于SpringMVC的MVC(Model-View-Controller)系统的基础项目源码,专为初学者设计,用于学习和理解MVC架构...

    spring-mvc-04-master.zip

    《Spring MVC 框架深度解析与实践指南》 在当今的Java Web开发领域,Spring MVC作为Spring框架的重要组成部分,已经成为了构建MVC(Model-View-Controller)模式应用程序的主流选择。本教程将深入剖析Spring MVC的...

    Spring-MVC-step-by-step2.rar

    《Spring MVC 深入浅出教程》 在IT领域,Spring MVC作为Spring框架的重要组成部分,是企业级Java应用开发中的主流MVC(Model-View-Controller)框架。本教程将通过逐步指导的方式,帮助开发者深入理解并掌握Spring ...

    spring-mvc-showcase-master

    - **MVC 配置**:XML 和 Java 配置方式的 MVC 配置示例,包括 HandlerMapping、HandlerAdapter、ViewResolver 等。 通过深入学习和实践这个项目,开发者不仅可以掌握 Spring MVC 的基本操作,还能了解如何进行高级...

    MVC-step-by-step 笔记 Part 1 | #spring #mvc

    **MVC 模式简介** MVC(Model-View-Controller)模式是一种广泛应用于Web应用程序设计的架构模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种分离使得代码更加组织...

    spring-mvc-官方中文文档

    3. **HandlerMapping**:该接口负责将请求与处理器(Controller)进行匹配,Spring MVC 提供了多种实现,如基于注解的 HandlerMapping,可以根据 @RequestMapping 注解将 URL 映射到控制器方法。 4. **...

Global site tag (gtag.js) - Google Analytics