运行 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 注释方法工作正常。
如果有人有任何建议,我当然会很感激您的意见!