• tomcat启动spring模拟


    Servlet3.0 - ServletContainerInitializer注册JAVA组件:
    在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能。每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类,那么,当web容器启动时就会运行这个初始化器做一些组件内的初始化工作。一般伴随着ServletContainerInitializer一起使用的还有HandlesTypes注解,通过HandlesTypes可以将感兴趣的一些类注入到ServletContainerInitializerde的onStartup方法作为参数传入。

    tomcat启动过程中StandardContext.startInternal方法会加载METE-INF下面的services的配置文件中配置的类,Tomcat容器的ServletContainerInitializer机制的实现,主要交由Context容器和ContextConfig监听器共同实现。

    对于实现了ServletContainerInitializer这个接口的类会解析@HandlesTypes这个注解中的类,写一个类实现WebApplicationInitializer 模拟spring的初始化及访问。

    @HandlesTypes(WebApplicationInitializer.class)
    public class SpringServletContainerInitializer implements ServletContainerInitializer {...
        for (WebApplicationInitializer initializer : initializers) {
    	initializer.onStartup(servletContext);
    ...}
    
    public class MyApplication implements WebApplicationInitializer {
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            System.out.println(">>>>>>>>>>>>>>>>>>>>>>");
            AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
            ac.register(MyConfig.class);
            ac.refresh();
    
            DispatcherServlet dispatcherServlet = new DispatcherServlet(ac);
            ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcherServlet", dispatcherServlet);
            servlet.addMapping("/");
            servlet.setLoadOnStartup(1);
        }
    }
    
    @Configuration
    @ComponentScan({"xyz.luofu.www"})
    public class MyConfig {
    
        @Bean
        public InternalResourceViewResolver getInternalResourceViewResolver() {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setPrefix("/");
            viewResolver.setSuffix(".jsp");
            return viewResolver;
        }
    }
    
    @Controller
    public class MyController {
    
        @RequestMapping("/index")
        public String index() {
            System.out.println("mycontroller coming!!!");
            return "index";
        }
    }
    

    配置tomcat插件

    <build>
            <finalName>demo</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat7-maven-plugin</artifactId>
                        <version>2.2</version>
                    </plugin>
                </plugins>
        </build>
    

    ideal中配置tomcat EditConfigurations 点击 + 号 Maven,Working directory 中填入工程项目demo Command line 填入tomcat7:run 你也可以按提示填入其他命令,配置好后点击启动。浏览器访问成功

  • 相关阅读:
    IOS-多线程技术
    设计模式-抽象工厂设计模式
    IOS-内存管理
    IOS-MVC的使用
    POJ2411 Mondriaan's Dream (广场铺砖问题 状压dp)
    NOIp2006T2 金明的预算方案
    POJ1179 Polygon(区间DP)
    NOIp2006T1能量项链
    美梦1(JSOI2014SC)
    TJOI2013(BZOJ3173)最长上升子序列
  • 原文地址:https://www.cnblogs.com/leifonlyone/p/12780310.html
Copyright © 2020-2023  润新知