`

Spring MVC(1) - DispatcherServlet初始化

 
阅读更多

本节主要讲Spring MVC的DispatcherServlet初始化, Servlet是不能自己启动,是由web容器(比如tomcat)启动和调用Servlet初始化的。DispatcherServlet实现和扩展了javax.Servlet,它是Spring MVC的核心。首先贴一下基础配置文件,web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <!-- 定义需要初始化的applicationcontext配置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext-hello.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/hello-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

 

web.xml 中配置的 ContextLoaderListener 会初始化 XmlWebApplicationContext, 这个类的作用类似于之前分析Spring中的 ClassPathXmlApplicationContext 类,XmlWebApplicationContext 是 Spring MVC中的 WebApplicationContext, 它会读取 web.xml 配置的 contextConfigLocation, 负责完成所有其他spring工程的context初始化(至少包括载入其他工程的xml和初始化bean)。

下面继续分析DispatcherServlet的初始化过程。先看一下类结构,HttpServlet是由 servlet-api.jar 包提供的 java通用的servlet实现,FrameworkServlet是spring的继承实现



 

 

// DispatcherServlet 初始化会调用父类FrameworkServlet的 init() 方法
public void init(){
      // 具体初始化
      initServletBean();
}

// FramworkServlet类实现
protected final void initServletBean() {
      this.webApplicationContext = initWebApplicationContext();
      initFrameworkServlet();
}

// 此方法保证创建WebApplicationContext,并对它进行刷新更新配置文件,即全面的初始化
protected WebApplicationContext initWebApplicationContext() {
      // 若存在WebApplicationContext
      // 则对context进行配置,函数内部会调用 onRefresh 载入配置和初始化
      configureAndRefreshWebApplicationContext(cwac);
  
      ....
      // 若不存在,则创建WebApplicationContext,
      //  对context进行刷新,载入配置和初始化
      onRefresh(wac);
}

// onRefresh 方法最终在子类即 DispatcherServlet 中实现,完成 初始化刷新配置流程
// DispatcherServlet 类
        protected void onRefresh(ApplicationContext context) {
		initStrategies(context);
	}
        // 进行一系列的bean初始化,每一步都会初始化相应的bean,负责运行时处理各自的任务
	protected void initStrategies(ApplicationContext context) {
		initMultipartResolver(context); 
		initLocaleResolver(context);
		initThemeResolver(context);
		initHandlerMappings(context); // 注册 HandlerMapping 处理类
		initHandlerAdapters(context);  // 注册 HandlerAdapter 处理类
		initHandlerExceptionResolvers(context);
		initRequestToViewNameTranslator(context);
		initViewResolvers(context); // 注册视图解析器
		initFlashMapManager(context);
	}

 

  • 大小: 108.9 KB
分享到:
评论

相关推荐

    Spring-MVC-DispatcherServlet-Example:Maven项目

    2. `webapp/WEB-INF/web.xml` - Web应用的部署描述符,定义DispatcherServlet的初始化参数。 3. `src/main/java/com/example/controllers` - 包含Controller类,处理HTTP请求。 4. `src/main/webapp/WEB-INF/views...

    spring-mvc-showcase-case1-client

    在初始化阶段,它会根据配置加载必要的库和应用模块,如AngularJS本身和其他依赖库。当需要加载新的视图或功能时,RequireJS会动态加载对应的JavaScript文件,确保应用的响应速度和用户体验。 整合过程中,需要注意...

    spring-mvc-step-by-step(PDF)

    web.xml是Web应用的核心配置文件,其中包含了Servlet的映射、初始化参数等。为了集成Spring MVC,需要在此文件中添加DispatcherServlet的配置。 ##### 1.7 复制库到WEB-INF/lib 所有依赖的库,包括Spring框架的jar...

    Spring MVC创建-SSM框架整合2.pdf

    在这个配置中,你需要指定Servlet的名称和实现类,并可以添加初始化参数来指向Spring MVC的配置文件。 ```xml &lt;web-app&gt; &lt;display-name&gt;Spring MVC Application&lt;/display-name&gt; &lt;servlet-name&gt;dispatcher...

    spring-webmvc-struts.jar

    1. **StrutsPlugIn**:这个类是Spring与Struts集成的关键,它扩展了Struts的PlugIn接口,使得Spring可以在Struts的生命周期内初始化和销毁bean。 2. **StrutsActionProxy**:这个类实现了Spring的ActionInvocation...

    spring mvc step by step,例子

    1. **项目初始化**:可以使用Spring Initializr或者Maven Archetype来快速创建一个包含基本依赖的Spring MVC项目。 2. **配置Spring MVC**:在`web.xml`中配置`DispatcherServlet`,并添加Spring MVC的配置文件,如`...

    spring mvc 4.0

    14. **性能优化**:Spring MVC 4.0在内部做了许多性能优化,包括更快的DispatcherServlet初始化、更高效的HTTP方法映射等。 15. **兼容性与兼容性测试**:Spring MVC 4.0确保与各种Web容器的兼容性,如Tomcat、...

    SpringMVC源码剖析(二)- DispatcherServlet的前世今生1

    实现配置元素的对象化,关键在于如何将Spring容器与Spring MVC的初始化过程结合。为此,Spring MVC引入了WebApplicationContext接口,特别是XmlWebApplicationContext,它是专门为Web应用程序设计的IoC上下文。它...

    Spring MVC启动时初始化的几个常用方法

    在Spring MVC框架中,应用程序启动时会执行一系列初始化操作,这些操作对于理解Spring MVC的工作原理至关重要。本篇文章将深入探讨Spring MVC启动时初始化的几个常用方法,并解释它们在实际开发中的作用。 首先,...

    Spring源码学习九:DispatcherServlet初始化源码分析1

    Spring源码学习九:DispatcherServlet初始化源码分析1 DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请求的入口,本篇将深入源码分析它的初始化过程。 首先,从DispatcherServlet的名称上...

    spring-mvc-step-by-step

    为了初始化数据库,需要编写一个脚本来创建数据库表结构。 **5.2 创建表和测试数据脚本** 编写脚本以创建数据库表,并添加一些测试数据供调试使用。 **5.3 添加Ant任务来执行脚本** 在项目的构建脚本中(通常是`...

    spring mvc-spring boot-spring data

    2. **启动类**(通常包含@SpringBootApplication注解):这是Spring Boot应用的入口点,负责初始化并运行整个应用。 3. **Spring MVC控制器**:使用@Controller注解的Java类,处理HTTP请求并返回响应。 4. **Spring ...

    Spring5.1.4核心jar包,包括mvc,webmvc

    2. **Bean容器**:Spring管理的对象称为Bean,Bean容器负责创建、初始化、配置和管理这些Bean。在Spring 5.1.4中,Bean容器已经相当成熟,支持XML、注解和Java配置方式来定义Bean。 3. **AOP**:Spring的AOP模块...

    spring-mvc-demo.zip

    1. **配置文件**:在Spring MVC项目中,主要的配置文件通常为`web.xml`,它是Web应用的部署描述符,用于配置DispatcherServlet,这是Spring MVC的核心组件,负责调度请求。另一个重要的配置文件是Spring的Bean定义...

    lhr-spring-mvc-activiti

    1. 配置Spring MVC的DispatcherServlet,定义前端控制器。 2. 配置Spring的ContextLoaderListener,初始化Spring的ApplicationContext。 3. 配置Spring MVC的视图解析器,如InternalResourceViewResolver,处理请求...

    spring mvc-spring boot-mybatis

    Spring MVC 通过DispatcherServlet处理请求,支持多种视图技术如JSP、Thymeleaf等,并提供了拦截器、数据绑定、格式化和验证等功能。 2. Spring Boot Spring Boot 是基于 Spring Framework 的一个快速开发工具,...

    spring-mvc-jsp-one.zip

    1. **创建Spring MVC项目**:利用IDEA、Maven或Gradle等工具初始化项目结构。 2. **配置Spring MVC**:编写`web.xml`和`dispatcher-servlet.xml`,定义DispatcherServlet和Spring MVC的相关配置。 3. **编写控制器**...

    netty-spring-mvc-master.rar_netty_netty spring_netty4 spring_s

    在具体实现中,可以创建一个SpringBootstrap类,负责加载Spring的配置文件,初始化ApplicationContext,并在Netty的ServerBootstrap中添加自定义的ChannelInitializer,这个Initializer将在新建立的Channel激活时,...

    Spring-MVC-model

    - web.xml:配置DispatcherServlet和ContextLoaderListener,分别初始化Spring MVC和Spring应用上下文。 - spring-servlet.xml:定义Spring MVC的bean,如HandlerMapping、HandlerAdapter、ViewResolver等。 - ...

    Spring-MVC+Spring-IOC+Spring-JdbcTemple

    2. **Spring Bean的生命周期**:了解Bean的初始化、销毁方法,以及如何自定义Bean的生命周期。 3. **注解驱动的Spring MVC**:使用@Controller、@RequestMapping等注解来定义控制器及URL映射。 4. **Spring JDBC ...

Global site tag (gtag.js) - Google Analytics