What's the intended use of `servlet-context.xml`, `root-context.xml` and `web.xml`?

前端 未结 2 644
遇见更好的自我
遇见更好的自我 2021-02-09 09:52

I a new to Java Spring MVC web development. I am kind of confused by the 3 config files below. They are auto created by the STS webmvc project template.

  • What\'s t
相关标签:
2条回答
  • 2021-02-09 10:20

    root-context.xml is the Spring Root Application Context Configuration. It's optional. It's for configuring your non-web beans. You need it for Spring Security or OpenEntityManagerInView Filter though. It would be better to place it in meta-inf/spring.

    servlet-context.xml is the Spring Web Application Context Configuration. It's for configuring your Spring beans in a web application. If you use root-context.xml, you should put your non-web beans in root-context.xml, and web beans in servlet-context.xml.

    web.xml is for configuring your servlet container, such as Tomcat. You need this one too. It's for configuring servlet filters and the servlet. web.xml is loaded first, then optionally loads your root context, then loads your web context.

    You can avoid using xml by using JavaConfig.

    0 讨论(0)
  • 2021-02-09 10:25

    Create a file name "javax.servlet.ServletContainerInitializer" (without quotes) the file content will be fully qualified name of the class implementing this interface, put the file here /META-INF/services

    You may implement ServletContainerInitializer and override the method like this

    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("/");
    
        }
    
    }
    

    After this you do not need web.xml

    Do remember if you are using maven to build your application mention this in pom.xml

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

    Before that you have to write a configuration class using @Configuration and @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;
        }
    }
    

    This configuration class replaces your <bean></bean> initializers from servlet-context.xml

    0 讨论(0)
提交回复
热议问题