java的dispatcher_DispatcherServlet 简介及配置

我们已经知道,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 配置的扫描

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值