nod*_*e42 6 java groovy spring spring-mvc spring-boot
运行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
}
}
Run Code Online (Sandbox Code Playgroud)
调节器
@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")
}
}
Run Code Online (Sandbox Code Playgroud)
错误日志
2013-11-25 09:08:28.714 ERROR 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注释方法工作正常.
如果有人有任何建议我肯定会欣赏输入!
Adr*_*pez 17
我遇到了同样的问题,在我的情况下,它发生了,因为我在类路径中缺少一个库.
Spring Boot不包含Jasper作为默认值,因此除非您明确包含库,否则JSP呈现不起作用:
对于Gradle:
compile("org.apache.tomcat.embed:tomcat-embed-jasper")
Run Code Online (Sandbox Code Playgroud)
对于Maven:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我认为 Spring Boot 中尚未完全支持可执行档案中的 JSP(它在列表中),因此我会尝试首先使用 a) 部署的 WAR 和/或 b) 展开的档案(或运行从 IDE),或从源代码运行。一旦它起作用,您可能仍然需要等待添加完整的 JSP 支持(欢迎贡献),但至少您会知道它是起作用的。您在部署的 WAR(无映射)中看到的错误表明还发生了其他情况。注意Spring Boot中有一个JSP示例JSP 示例- 在一定程度上可以工作(JSP 已解析并呈现)。
编辑:Spring taglibs、JSTL 和 EL 支持似乎在上面的示例中起作用。我刚刚更新它以添加 JSTL 并从 IDE 和作为可执行 WAR 进行测试。
归档时间: |
|
查看次数: |
18971 次 |
最近记录: |