簡體   English   中英

Spring-Boot無法在WAR文件中查找JSP頁面

[英]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;
    }

我不知道你的pom.xml,但這似乎與這個線程類似

JSP文件無法在Spring Boot Web應用程序中呈現

請嘗試將依賴項列表添加到您的pom中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM