什么是`servlet-context.xml`,`root-context.xml`和`web.xml`的用途?

时间:2015-01-12 00:54:24

标签: java spring spring-mvc

我是Java Spring MVC Web开发的新手。我对下面的3个配置文件感到困惑。它们由STS webmvc项目模板自动创建。

  • 它们的用途是什么?
  • 为什么我们需要3个配置文件而不是一个?
  • 他们的位置有什么特殊原因吗?

enter image description here

2 个答案:

答案 0 :(得分:12)

root-context.xml是Spring Root 应用程序上下文配置。这是可选的。它用于配置非Web bean。但是你需要它用于Spring Security或OpenEntityManagerInView Filter。最好将它放在meta-inf/spring

servlet-context.xml是Spring Web 应用程序上下文配置。它用于在Web应用程序中配置Spring bean。如果您使用root-context.xml,则应将非网络bean放在root-context.xml中,将网络bean放在servlet-context.xml中。

web.xml用于配置 servlet容器,例如Tomcat。你也需要这个。它用于配置servlet过滤器和servlet。首先加载web.xml,然后可选地加载根上下文,然后加载您的Web上下文。

您可以通过使用JavaConfig来避免使用xml。

答案 1 :(得分:0)

创建文件名“javax.servlet.ServletContainerInitializer”(不带引号)文件内容将是实现此接口的类的完全限定名称,将文件放在/ META-INF / services

您可以实现ServletContainerInitializer并覆盖此方法

public class CourtServletContainerInitializer implements ServletContainerInitializer {

    @Override
    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
        applicationContext.register(CourtConfiguration.class);

        DispatcherServlet dispatcherServlet = new DispatcherServlet(applicationContext);

        ServletRegistration.Dynamic registration = ctx.addServlet("court", dispatcherServlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/");

    }

}

之后你不需要web.xml

请记住,如果您使用maven构建应用程序,请在pom.xml中提及此内容

<properties>
        <failOnMissingWebXml>false</failOnMissingWebXml>
</properties>

在此之前,您必须使用@Configuration和@Bean annotations

编写配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@ComponentScan(basePackages = "com.practice.learnspringmvc.*")

public class CourtConfiguration {

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        internalResourceViewResolver.setPrefix("/WEB-INF/views/");
        internalResourceViewResolver.setSuffix(".jsp");
        return internalResourceViewResolver;
    }
}

此配置类将从servlet-context.xml

替换您的<bean></bean>初始值设定项