运行 Spring Web 来自 IDE 与来自 jar 文件

Running Spring web from IDE vs from jar file

我正在尝试创建一个简单的 Web 应用程序,它将在 FE 中使用 angular,在 BE 中使用 Spring。

如果我从我的 IDE (IntelliJ IDEA 2017.2) 运行 一切正常,但是如果我启动 jar 文件它找不到 jsp 页面并显示一个 Whitelabel 错误页面。

它的 gradle build 和 thease 是依赖项

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile 'javax.servlet:jstl:1.2'
}

ChartConfiguration.java

@Configuration
@EnableWebMvc
public class ChartConfiguration extends WebMvcConfigurerAdapter{

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setViewClass(JstlView.class);
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".jsp");
    registry.viewResolver(viewResolver);

}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("/static/");
}

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

}

ChartInitializer.java

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

public class ChartInitializer extends 
AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
    return new Class[] { ChartConfiguration.class };
}

@Override
protected Class<?>[] getServletConfigClasses() {
    return null;
}

@Override
protected String[] getServletMappings() {
    return new String[] { "/" };
}

@Override
protected Filter[] getServletFilters() {
    Filter [] singleton = { new CORSFilter() };
    return singleton;
}

}

IndexController.java

@Controller
@RequestMapping("/")
public class IndexController {

@RequestMapping(method = RequestMethod.GET)
public String getIndexPage() {
    return "ChartManagement";
}

}

而我的 jsp 页面只包含一个

标签,没有别的。

我做错了什么,我想不通?

所以我让它工作了,但配置有点不同。我已删除

  • ChartConfiguration.java
  • ChartInitializer.java
  • main/resources 文件夹中的所有内容

现在我在 main/resources 中创建了一个名为 templates 的文件夹,里面是 index.html

我还添加了一个新的依赖项

compile("org.springframework.boot:spring-boot-starter-thymeleaf")

并将 IndexController 更改为

@Controller
@RequestMapping("/")
public class IndexController {

@RequestMapping(method = RequestMethod.GET)
public String getIndexPage() {
    return "index";
}

}