如何在没有web.xml的情况下使用带有spring的tomcat?

时间:2017-11-16 12:37:26

标签: java spring tomcat jax-rs

我在Tomcat 7上部署了一个JAX-RS应用程序。我在Tomcat上部署应用程序而没有任何web.xml文件。

我想使用spring来注入项目中的一些依赖项。我没有使用任何XML文件来配置bean,而是创建了一个类并使用@Configuration注释对其进行了注释,该注释包含所有bean定义。现在,我试图通过使用@Autowired在单独的类中注释一个字段来使用该bean,但该字段为null

如何使用此设置进行弹簧工作?

编辑: 我能够通过在WEB-INF /中创建web.xml来初始化spring应用程序上下文。具有以下内容。

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

我检查了tomcat日志,并验证了bean是由spring创建的。但问题是当我尝试使用该bean时,该类中的字段为空。

4 个答案:

答案 0 :(得分:2)

您可能希望使用Spring Boot,这可以帮助您开发Web应用程序,就像开发一个可以“运行”的独立应用程序一样简单。

根据Spring Boot的官方网站,您可以创建

  • 创建独立的Spring应用程序
  • 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
  • 提供自以为是的“先发制人”&#39;用于简化Maven配置的POM
  • 尽可能自动配置Spring
  • 提供生产就绪功能,例如指标,运行状况检查和外部化配置
  • 绝对没有代码生成,也不需要XML配置

您可以在1小时内了解到这一点我发现此YouTube视频非常有趣,只需Getting Started with Spring Boot

答案 1 :(得分:0)

web.xml用作tomcat容器启动时的起点。 如果你想绕过这个,你可以编写一个简单的Java程序,在main()函数中只需调用Spring来加载应用程序上下文并提供应用程序applicationContext的路径。

更多详情:https://www.tutorialspoint.com/spring/spring_java_based_configuration.htm

答案 2 :(得分:0)

如果你想在一个类中使用@Autowired,它首先必须是一个Bean。您可以通过使用@Component注释Class或在Configuration中使用@Bean Annotation来完成此操作。

@Bean
Yourclass yourclass(){
     return new YourClass();
}

其次,您必须将@ComponentScan Annotation添加到配置中。

@ComponentScan("your.package")
@Configuration

第三,您必须实例化ApplicationContext。例如像这样

JavaConfigApplicationContext context = new JavaConfigApplicationContext(YourConfig.class);

因为它是一个Web应用程序,所以最好看一下WebApplicationInitializer,实现自己的并在那里初始化Context。

答案 3 :(得分:0)

您缺少的是初始化Spring Dispatcher Servlet的方法。 您需要实现接口WebApplicationInitializer,并在此类中传递应用程序所需的所有Java配置。

您必须定义AnnotationConfigWebApplicationContext,您可以在其中注册配置类:

context.register(MyConfig.class);

或者您可以定义包含所有配置类的基础包:

context.setConfigLocation("com.example.app.config");

完整示例:

    public class MyWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) {
        AnnotationConfigWebApplicationContext context
          = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation("com.example.app.config");

        container.addListener(new ContextLoaderListener(context));

        ServletRegistration.Dynamic dispatcher = container
          .addServlet("dispatcher", new DispatcherServlet(context));

        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}

最后,如果您使用maven,请不要忘记在failOnmissingwebxml中将属性false设置为pom.xml

您可以找到更多信息here