简体   繁体   English

在Spring Boot中将web.xml转换为Java配置

[英]Convert web.xml to java config in Spring Boot

I'm currently trying to move my project from Java EE to Spring Boot project. 我目前正在尝试将我的项目从Java EE迁移到Spring Boot项目。 However, I've been stuck and confused to replacing the web.xml in java config. 但是,我一直陷入困惑,无法在Java配置中替换web.xml。

I tried to replaced it, but it is not working. 我试图更换它,但是它不起作用。 The project web.xml file contains some filters and servlet . 项目web.xml文件包含一些filtersservlet The details of web.xml file are as below : 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>

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. 我已经替换了JavaConfig文件中的applicationContext.xmlapplication-context-1.xmlapplication-context-2.xml文件,但是我不确定如何替换Java配置文件中的servletlistener filterfilter

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. 提前致谢。

I think you need to extend WebMvcConfigurer (apidoc) or WebMvcConfigurerAdapter to hook-up your pre-existing classes. 我认为您需要扩展WebMvcConfigurer (apidoc)WebMvcConfigurerAdapter来连接您先前存在的类。 Don't implement WebApplicationInitializer, which you are doing above. 不要实现上面正在做的WebApplicationInitializer。

You don't need to create any ApplicationContext instances yourself, like you do above 您不需要自己创建任何ApplicationContext实例,就像上面一样

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM