自建一个WebApplicationInitializer

实现WebApplicationinitializer的类都可以在web应用程序启动时被加载。
这个是通过SpringServletContainerIntializer实现ServletContainerIntializer实现的。

首先建个WebApplicationInitializer.java

package com.boventech.config;  
import javax.servlet.ServletContext;  
import javax.servlet.ServletException;  
/** 
 * WebApplicationInitializer接口 
 * @author hu.sun 
 */  
public interface WebApplicationInitializer{  
    public  void config(ServletContext context) throws ServletException;  
}  

继续,由于必须通过SpringServletContailnerIntializer才能加载,再建个SpringServletContailnerIntializer类:

package com.boventech.config;  
import java.lang.reflect.Modifier;  
import java.util.Set;  
import javax.servlet.ServletContainerInitializer;  
import javax.servlet.ServletContext;  
import javax.servlet.ServletException;  
import javax.servlet.annotation.HandlesTypes;  
  
@HandlesTypes(WebApplicationInitializer.class)    
public class SpringServletContainerInitializer implements ServletContainerInitializer{  
    @Override  
    public void onStartup(Set<Class<?>> webApplicationInitializers, ServletContext servletContext)  
            throws ServletException {  
        if (webApplicationInitializers != null) {  
            for (Class<?> webApplicationInitializerClass : webApplicationInitializers) {  
                if (!webApplicationInitializerClass.isInterface() && !Modifier.isAbstract(webApplicationInitializerClass.getModifiers()) &&  
                        WebApplicationInitializer.class.isAssignableFrom(webApplicationInitializerClass)) {  
                    try {  
                        ((WebApplicationInitializer) webApplicationInitializerClass.newInstance()).config(servletContext);  
                    }  
                    catch (Throwable ex) {  
                        throw new ServletException("Failed to instantiate webApplicationInitializer class", ex);  
                    }  
                }  
            }  
        }  
    }  
}  

注意:
要实现ServletContainerInitializer接口,必须指定实现的类。@HandlesTypes就起到关键性作用。
还有一个最重要的:在Libraries->Spring -web-x.x.x.jar->META-INF/services/javax.servlet.ServletContainerInitializer里面的内容必须是实现ServletContainerInitializer的类,即com.boventech.config.SpringServletContainerInitializer

package com.boventech.config;  
  
import javax.servlet.ServletContext;  
import javax.servlet.ServletException;  
  
import org.springframework.web.context.ContextLoaderListener;  
import org.springframework.web.util.WebAppRootListener;  
  
public class DefaultServletConfig implements WebApplicationInitializer{  
  
    @Override  
    public void config(ServletContext servletContext)  throws ServletException{  
        servletContext.addListener(new ContextLoaderListener());  
        servletContext.addListener(new WebAppRootListener());  
        servletContext.setInitParameter("contextConfigLocation", "classpath*:**/*Context.xml");  
        //设置webAppRootKey得值以得到根目录  
        servletContext.setInitParameter("webAppRootKey", "learning");  
    }  
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,118评论 6 342
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,418评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,486评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,828评论 19 139
  • 本章聊一聊ServletContext 3.0规范中定义的注解以及在web应用中使用的框架和库的可插拔性的提升。 ...
    Lucky_Micky阅读 11,275评论 0 3

友情链接更多精彩内容