![](/img/trans.png)
[英]Spring-Boot with JSP project not able to run with jar or war file
[英]Spring-Boot Not Finding JSP Pages in WAR File
運行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 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注釋方法工作正常。
如果有人有任何建議我肯定會欣賞輸入!
我遇到了同樣的問題,在我的情況下,它發生了,因為我在類路徑中缺少一個庫。
Spring Boot不包含Jasper作為默認值,因此除非您明確包含庫,否則JSP呈現不起作用:
對於Gradle:
compile("org.apache.tomcat.embed:tomcat-embed-jasper")
對於Maven:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
我不認為Spring Boot中的可執行存檔中的JSP是完全支持的(它在列表中),所以我會先嘗試使用a)部署的WAR,和/或b)展開的存檔(或運行)來自IDE),或從源代碼運行。 一旦它工作,你可能仍然需要等待添加完整的JSP支持(歡迎貢獻),但至少你會知道它的工作原理。 您在部署的WAR(沒有映射)中看到的錯誤表明還有其他事情發生。 請注意,如果您想要比較某些內容,Spring Boot中有一個JSP示例 - 可以解決某些問題(JSP已解析並呈現)。
編輯:Spring taglibs,JSTL和EL支持似乎在上面的示例中工作。 我剛剛更新它以添加JSTL並從IDE測試並作為可執行WAR。
我遇到了類似的問題,由默認的servlet未映射引起。 我必須在我的extends DelegatingWebMvcConfiguration
類中執行此操作:
@Override
protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
我通過Bean定義中的小修正解決了這個問題。
@Bean
InternalResourceViewResolver internalResourceViewResolver () {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver()
viewResolver.setPrefix("WEB-INF/jsp/")
viewResolver.setSuffix(".jsp")
return viewResolver;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.