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 你也可以按提示填入其他命令,配置好后点击启动。浏览器访问成功