【springMvc学习记录之一】spring DispatcherServlet

                    【springMvc学习记录之一】DispatcherServlet

springMvc model-view-controller (MVC)是spring为web开发提供的一个框架。这个框架就是围绕DispatcherServlet 类来设计。

springMvc框架类似于其他mvc框架,都是由请求驱动的(request-driven)。

DispatcherServlet类的作用就是接收request请求、转发request到对应的handler,spring web mvc的工作流程如下图所示

DispatcherServlet本质上是一个servlet,所以与普通的servlet一样,需要在web.xml中配置映射规则

<web-app>
    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/example/*</url-pattern>
    </servlet-mapping>

</web-app>

每个DispatcherServlet都有对应的web应用上下文WebApplicationContext,WebApplicationContext上下文包含了servlet实例与其他上下文直接共享的beans

spring web mvc中的各种容器的层次关系如下图

springMvc默认的配置文件名为WEB-INF目录下的[servlet-name]-servlet.xml文件,如下所示

<web-app>
    <servlet>
        <servlet-name>golfing</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>golfing</servlet-name>
        <url-pattern>/golfing/*</url-pattern>
    </servlet-mapping>
</web-app>

不指定配置文件的情况下,需要在WEB-INF目录下有个golfing-servlet.xml配置文件,这个文件包含了应用所需要的所有bean定义,当然你也可以指定springMvc的文件配置名称,web.xml配置如下

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

,也可以通过java config来配置

public class GolfingWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // GolfingAppConfig defines beans that would be in root-context.xml
        return new Class<?>[] { GolfingAppConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // GolfingWebConfig defines beans that would be in golfing-servlet.xml
        return new Class<?>[] { GolfingWebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/golfing/*" };
    }
}

DispatcherServlet使用一些特殊的bean去处理请求与渲染视图,这些bean是springMvc的一部分,你可以通过WebApplicationContext来指定使用哪些特殊的bean,

WebApplicationContext中的一些特殊的bean

DispatcherServlet使用一些默认bean来处理请求,这个配置写在DispatcherServlet.properties文件中

# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
	org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
	org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
	org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

来总结下DispatcherServlet处理请求的流程

  • 为request绑定web上下文WebApplicationContext ,key为DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
  • 为request绑定locale resolver解析器
  • 为request绑定theme resolver视图解析器
  • 如果指定了文件解析器,request将会包装成MultipartHttpServletRequest 
  • 寻找对应的handler
  • 处理逻辑
  • 渲染视图
  •  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值