Spring Boot:Web.xml和嵌入式服务器jar

时间:2015-04-20 14:04:22

标签: spring-boot

我试图将传统的spring-mvc应用转换为Spring启动(为了拥有一个自包含的JAR,可以更轻松地升级到Java-8)。

我认为没有理由使用代码替换现有的web.xml文件,因为代码看起来像配置,并且web.xml更加成熟。

是否可以在Spring Boot应用程序中使用我现有的web.xml(在嵌入式JAR模式下)?

编辑:我也想避免使用@EnableAutoConfiguration

由于

2 个答案:

答案 0 :(得分:0)

好吧,多亏了Mecon,我稍微靠近了。我不得不删除web.xml中的ContextLoaderListener;也必须导入xml Spring配置,即使它在contextConfigLocation中被引用。

@Configuration
@ComponentScan
@EnableAutoConfiguration
@ImportResource(value = {"classpath:/webapp-base.xml"})
public class WebApp {

    @Autowired
    private ServerProperties serverProperties;

    @Autowired
    private MediaConfiguration mediaConfig;

        @Bean
        public EmbeddedServletContainerFactory servletContainer() {
            JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
            factory.setContextPath(serverProperties.getContextPath());
            factory.addConfigurations(new WebXmlConfiguration());
            factory.addServerCustomizers(server -> {
                    List<Handler> resourceHandlers = getResourceHandlers();
                    Handler original = server.getHandler();

                    HandlerList handlerList = new HandlerList();
                    Handler[] array = getHandlers(original, resourceHandlers);
                    handlerList.setHandlers(array);

                    server.setHandler(handlerList);
                }
            );
            return factory;
        }

    private List<Handler> getResourceHandlers() {
        return mediaConfig.getMappings().stream().map(m -> {
            ContextHandler contextHandler = new ContextHandler(m.getUrlpath());
            ResourceHandler resourceHandler = new ResourceHandler();
            resourceHandler.setResourceBase(m.getFilepath());
            contextHandler.setHandler(resourceHandler);
            return contextHandler;
        }).collect(Collectors.toList());
    }

    private Handler[] getHandlers(Handler original, List<Handler> resourceHandlers) {
        ArrayList<Handler> handlers = new ArrayList<>();
        handlers.add(original);
        handlers.addAll(resourceHandlers);
        return handlers.toArray(new Handler[resourceHandlers.size()+1]);
    }

    public static void main(String[] args) {
        SpringApplication.run(WebApp.class, args);
    }

}

答案 1 :(得分:-1)

你不需要Spring-Boot来拥有一个独立的JAR,你真正需要的只是嵌入式Tomcat或Jetty。

使用public static void main(String[] a)创建一个类,当Jar被执行时,将使用此类&#34;通过java -jar myWebapp.jar命令。

main方法中,您可以启动嵌入式Tomcat或Jetty,并通过引用现有的web.xml使其加载您的webapp。