Конвертируйте web.xml в конфигурацию java в Spring Boot - PullRequest
0 голосов
/ 17 октября 2018

В настоящее время я пытаюсь переместить свой проект из Java EE в проект Spring Boot.Однако я застрял и запутался в замене файла web.xml в конфигурации java.

Я пытался заменить его, но он не работает.Файл web.xml проекта содержит некоторые filters и servlet.Подробности файла web.xml приведены ниже:

<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>

Я уже заменяю файлы applicationContext.xml, application-context-1.xml и application-context-2.xml в файле JavaConfig, но я не уверен, как мне заменитьservlet, listener и filter в java config файлах.

Я пытался заменить его, но он не работает.Пример кода приведен ниже:

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

Помогите мне избавиться от этой проблемы, чтобы я мог сосредоточиться на других работах.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 октября 2018

Я думаю, вам нужно расширить WebMvcConfigurer (apidoc) или WebMvcConfigurerAdapter, чтобы подключить уже существующие классы.Не реализуйте WebApplicationInitializer, который вы делаете выше.

Вам не нужно создавать какие-либо экземпляры ApplicationContext самостоятельно, как вы делаете выше

...