0

I'm currently trying to move my project from Java EE to Spring Boot project. However, I've been stuck and confused to replacing the web.xml in java config.

I tried to replaced it, but it is not working. The project web.xml file contains some filters and servlet. The details of web.xml file are as below :

<servlet>
        <servlet-name>robinTest</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>robinTest</servlet-name>
        <url-pattern>/secureServices/ </url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>robinTest</servlet-name>
        <url-pattern>/simple/ </url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
            classpath:application-context-1.xml
            classpath:application-context-2.xml
        </param-value>
    </context-param>


    <filter>
        <filter-name>robinTestFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>targetBeanName</param-name>
            <param-value>robinTestFilter</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>robinTestFilter</filter-name>
        <url-pattern>/</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>OpenSession Filter</filter-name>
        <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>sessionFactoryBeanName</param-name>
            <param-value>sessionFactory</param-value>
        </init-param>
        <init-param>
            <param-name>flushMode</param-name>
            <param-value>COMMIT</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>OpenSession Filter</filter-name>
        <url-pattern>/</url-pattern>
    </filter-mapping>

I already replace the applicationContext.xml, application-context-1.xml and application-context-2.xml files in JavaConfig file but i am not sure, how would i replace the servlet, listener and filter in java config files.

I tried to replace it but it is not working. The sample code are below :

import java.util.HashMap;
import java.util.Map;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate5.support.OpenSessionInViewFilter;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.DelegatingFilterProxy;
import org.springframework.web.servlet.DispatcherServlet;

@Configuration
public class AppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) throws ServletException {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();

        context.scan("org.robin.test");
        //  container.se
        container.addListener(new ContextLoaderListener(context));

        ServletRegistration.Dynamic dispatcher = container.addServlet("robinTest", new DispatcherServlet(context));
        dispatcher.setLoadOnStartup(2);
        dispatcher.addMapping("/simple/");
        dispatcher.addMapping("/secureServices/");

        FilterRegistration.Dynamic filter = container.addFilter("robinTestFilter", DelegatingFilterProxy.class);
        filter.setInitParameter("targetBeanName", "robinTestFilter");
        filter.addMappingForUrlPatterns(null, true, "/*");

        FilterRegistration.Dynamic filterSession = container.addFilter("OpenSession Filter", OpenSessionInViewFilter.class);
        Map<String, String> filterMap=new HashMap<>();
        filterMap.put("singleSession", "true");
        filterMap.put("sessionFactoryBeanName", "sessionFactory");
        filterMap.put("flushMode", "COMMIT");
        filterSession.setInitParameters(filterMap);
        filterSession.addMappingForUrlPatterns(null, true, "/*");
    }
}

Help me out to rid off this problem so that i can focus on other works.

Thanks in advance.

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
RSCode
  • 1,573
  • 2
  • 13
  • 21

1 Answers1

0

I think you need to extend WebMvcConfigurer (apidoc) or WebMvcConfigurerAdapter to hook-up your pre-existing classes. Don't implement WebApplicationInitializer, which you are doing above.

You don't need to create any ApplicationContext instances yourself, like you do above

Hans Westerbeek
  • 5,645
  • 3
  • 34
  • 35