我试图将传统的spring-mvc应用转换为Spring启动(为了拥有一个自包含的JAR,可以更轻松地升级到Java-8)。
我认为没有理由使用代码替换现有的web.xml文件,因为代码看起来像配置,并且web.xml更加成熟。
是否可以在Spring Boot应用程序中使用我现有的web.xml(在嵌入式JAR模式下)?
编辑:我也想避免使用@EnableAutoConfiguration
由于
答案 0 :(得分:0)
@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。