java的dispatcher_DispatcherServlet 简介及配置

本文详细介绍 Spring MVC 的配置过程,包括 DispatcherServlet 的初始化配置、Servlet Web 上下文配置及 Spring 应用上下文配置等内容。

我们已经知道,DispatcherServlet 最重要的工作是接收请求并转发给特定的 Controller,因此首先需要配置的是 url 映射

DispatcherServlet 启动时,会创建 Spring 应用上下文,并加载配置文件或配置类中所声明的 bean,因此我们需要在 DispatcherServlet 的配置中指定 bean 所在的配置文件或 java Configuration 类,这些 bean 包含 web 组件的 bean,如 Controller、视图解析器及处理器映射

在 Spring Web 应用中,还会有另一个应用上下文,用来加载驱动应用后端的中间层和数据层组件的其他 bean,这些 bean 由 ContextLoaderListener 创建的应用上下文来加载

XML 配置

上述配置在上一篇日志中有相应的介绍(web.xml):

contextConfigLocation

classpath*:ApplicationContext.xml

org.springframework.web.context.ContextLoaderListener

appServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

/WEB-INF/ServletContext.xml

1

appServlet

/

如上所述,我们在 DispatcherServlet 配置中加载了两个应用上下文配置,分别是 Spring 应用上下文 ApplicationContext.xml 以及 Spring Web 项目中需要使用的另一个上下文配置:ServletContext.xml

当我们需要启动 spring mvc 的供能时,只需要在 ServletContext.xml 中写入:

Java 代码配置

Spring3.1 提供了使用 java 代码来进行上述配置,这可能是更加易于理解的方式

DispatcherServlet 初始化配置

Spring 会扫描整个工程,并将所有扩展了 AbstractAnnotationConfigDispatcherServletInitializer 的类都自动配置为 DispatcherServlet 和 Spring 应用上下文配置,因此,我们首先需要做的就是创建配置类并继承 AbstractAnnotationConfigDispatcherServletInitializer,当然, 类名我们可以任意取

package com.techlog.test.configuration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**

* DispatcherServlet 初始化配置

* Created by techlog on 2016/11/17.

*/

public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

/**

* @return Spring 应用上下文配置类

*/

@Override

protected Class>[] getRootConfigClasses() {

return new Class>[] { RootConfig.class };

}

/**

* @return Servlet Web 上下文配置类

*/

@Override

protected Class>[] getServletConfigClasses() {

return new Class>[] { WebConfig.class };

}

/**

* @return 匹配的 URL 模式

*/

@Override

protected String[] getServletMappings() {

return new String[] { "/" };

}

}

Servlet Web 上下文配置

接下来,我们来创建上面用到的 WebConfig.class

package com.techlog.test.configuration;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

/**

* Web 组件 Bean 配置

* Created by techlog on 2016/11/17.

*/

@Configuration

@EnableWebMvc

@ComponentScan("com.techlog.test")

public class WebConfig extends WebMvcConfigurationSupport {

@Override

protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {

configurer.enable();

}

}

@EnableWebMvc 注解与上文提到的  功能是一样的

@ComponentScan 注解则与  的功能是一样的

接下来我们只要在 WebConfig 中加入我们需要的 Bean 声明即可,可以参考:

我们重写了 configureDefaultServletHandling 方法,这个方法是用来指定处理静态资源请求的 Servlet 的,我们调用 configurer.enable() 方法将对静态资源的请求转发到 Servlet 容器中默认的 Servlet 处理而不是使用 DispatcherServlet 本身来处理这些请求

Spring 应用上下文配置

接下来,我们需要创建 Spring 应用上下文配置类 RootConfig.class

package com.techlog.test.configuration;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.FilterType;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

/**

* Spring 应用上下文配置

* Created by techlog on 2016/11/17.

*/

@Configuration

@ComponentScan(basePackages = "com.techlog.test",

excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })

public class RootConfig {

}

RootConfig 中我们就可以创建和定义 Spring 应用所需要的 Bean 了,同时,我们在 @ComponentScan 注解的属性中配置排除了对所有 WebMVC 配置的扫描

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值