运行 spring-boot 项目 (java -jar /path/to/war.war) 时,找不到 .jsp 文件。
使用 @ResponseBody 注释的方法可以正常工作。视图解析器提供了 JSP 页面的正确路径,但没有找到它们。本项目只有一个配置类,没有web.xml。
配置类:
@Configuration
@EnableAutoConfiguration
@EnableWebMvc
@ComponentScan (basePackages = "org.ghc.security.web")
class ScMain extends WebMvcConfigurerAdapter {
    // SpringBoot BootStrap...
    static void main (String[] args) {
        ApplicationContext ctx = SpringApplication.run (ScMain, args)
        System.out.println("Let's inspect the beans provided by Spring Boot:");
        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        beanNames.each { beanName ->
            System.out.println(beanName);
        }
    }
    @Bean
    InternalResourceViewResolver internalResourceViewResolver () {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver()
        viewResolver.setPrefix("/WEB-INF/jsp/")
        viewResolver.setSuffix(".jsp")
        viewResolver
    }
}
控制器
@Controller
class Running {
    @RequestMapping ("/alive")  // This works fine
    @ResponseBody
    String amIAlive () {
        "ALIVE!"
    }
    @RequestMapping ("/alive/page")  // Path to page resolved, but file not found!
    ModelAndView amIAlivePage () {
        new ModelAndView("alivepage")
    }
}
错误日志
2013-11-25 09:08:28.714 错误 1549 --- [tp1945397783-20] org.apache.jasper.servlet.JspServlet:PWC6117:文件“%2FUsers%2Fnode42%2FDevelopment%2Fmock-security-ui%2Fbuild%2Flibs %2Fmock-security-ui-2.06-SNAPSHOT.war%2FWEB-INF%2Fjsp%2Falivepage.jsp" 未找到
日志条目中.war文件的路径正确,war文件(WEB-INF/jsp/alivepage.jsp)中的路径正确。无论使用 Jetty 还是 Tomcat,响应都是相同的(以上日志来自 Jetty)。我也尝试过不使用视图解析器,如上所述指定一个,或者通过属性设置视图解析器。我完全糊涂了,因为除了这个小细节之外,所有东西实际上看起来都在工作。并且控制器中的 @ResponseBody 注释方法工作正常。
如果有人有任何建议,我当然会很感激您的意见!