【问题标题】:Running Spring web from IDE vs from jar file从 IDE 运行 Spring Web 与从 jar 文件运行
【发布时间】:2018-02-18 04:36:06
【问题描述】:

我正在尝试创建一个简单的 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页面只包含一个

标签,仅此而已。

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

【问题讨论】:

  • /WEB-INF != /META-INF/resources/WEB-INF,移动你的WEB-INF文件夹直接植根于src/main/resources
  • 刚刚试过了。这样它也不会从 IDE 启动。
  • 您遇到了包装问题。
  • JSP 在 Angular 应用中做什么?
  • 我可以把它改成html文件,目前我只是想让它启动。但我不太明白你的第一条评论。

标签: java spring jsp spring-mvc executable-jar


【解决方案1】:

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

  • 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";
}

}

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2012-09-13
    相关资源
    最近更新 更多