Spring Web MVC框架(七) 基于代码的容器初始化

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 前面我们的Spring项目都是使用XML文件配置的,包括web.xml和Spring配置文件。Spring还支持基于代码的配置,这样我们的Spring程序就可以脱离web.xml文件,全部使用代码来配置。

前面我们的Spring项目都是使用XML文件配置的,包括web.xml和Spring配置文件。Spring还支持基于代码的配置,这样我们的Spring程序就可以脱离web.xml文件,全部使用代码来配置。

WebApplicationInitializer接口

第一个接口就是org.springframework.web.WebApplicationInitializer,我们实现该接口,然后在onStartup方法中就可以使用代码来配置Servlet容器和DispatcherServlet了。

import org.springframework.web.WebApplicationInitializer;

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {
        XmlWebApplicationContext appContext = new XmlWebApplicationContext();
        appContext.setConfigLocation("/WEB-INF/dispatcher-servlet.xml");

        ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
    }

}

WebApplicationInitializer是Spring提供的一个接口,Spring会确保在Servlet容器初始化的时候该接口被自动检测和使用。

AbstractDispatcherServletInitializer基类

前面介绍的WebApplicationInitializer接口是最基本的一个接口,所有的初始化代码都要在接口中实现,比较麻烦。Spring因此提供了一个实现了WebApplicationInitializer接口的基类AbstractDispatcherServletInitializer,使用它我们可以非常方便的配置Servlet容器。需要异步支持的话,如果实现WebApplicationInitializer接口的话需要手动设置异步支持标志位,就像web.xml那样;如果使用AbstractDispatcherServletInitializer基类的话不需要设置,Spring已经默认支持异步处理了。

使用Java配置

如果我们使用Java代码配置Spring的话可以继承AbstractAnnotationConfigDispatcherServletInitializer基类,然后实现其中的三个方法。

public class MyAnnotationWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{RootApplicationContextConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{DispatcherServletConfig.class};
    }

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

使用XML配置

如果我们使用传统XML方式配置Spring,那么就直接继承AbstractDispatcherServletInitializer基类,然后实现其中的三个方法。

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/applicationContext.xml");
        return cxt;
    }

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/dispatcher-servlet.xml");
        return cxt;
    }

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

}

过滤器配置

AbstractDispatcherServletInitializer提供了一个方法用于配置过滤器,只需要重写getServletFilters()方法即可。

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    // ...

    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] { new CharacterEncodingFilter() };
    }

}
相关文章
|
23天前
|
存储 安全 前端开发
第6章 Spring Security 的 Web 安全性(2024 最新版)(上)
第6章 Spring Security 的 Web 安全性(2024 最新版)
55 0
|
23天前
|
安全 Java Go
第6章 Spring Security 的 Web 安全性(2024 最新版)(下)
第6章 Spring Security 的 Web 安全性(2024 最新版)
58 1
|
10天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
24 3
|
1天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
8 2
|
10天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
20 4
|
13天前
|
前端开发 JavaScript 开发者
前端技术栈:探索现代Web开发的核心要素与代码实践
前端技术栈:探索现代Web开发的核心要素与代码实践
21 1
|
18天前
|
开发框架 前端开发 安全
Java从入门到精通:2.2.2学习使用Spring框架进行Web应用开发
Java从入门到精通:2.2.2学习使用Spring框架进行Web应用开发
|
18天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
24天前
|
运维 自然语言处理 安全
Spring Boot 底层级探索系列 04 - Web 开发(3)
Spring Boot 底层级探索系列 04 - Web 开发(3)
27 0
|
24天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
31 0