簡體   English   中英

適用於AWS的視圖出現404錯誤,但使用Spring Boot進行本地部署時不存在

[英]404 error for views for AWS but not on local deployment with Spring Boot

作為練習,我將Spring Boot應用程序部署到了AWS Elastic Beanstalk環境。 我已經能夠在本地正常運行該應用程序。 由於Spring Boot帶有內置的Tomcat,因此我使用了Java AWS環境(而不是Tomcat環境)。 在日志中,看起來應用程序正在正確啟動。 但是,由於某種原因,當我導航到根頁面(映射到index.html)時,出現以下錯誤:

This application has no explicit mapping for /error, so you are seeing this as a fallback.
 Sun Jan 07 18:22:33 UTC 2018 There was an unexpected error (type=Not Found, status=404). /WEB-INF/index.html 

幾乎所有映射都會發生這種情況。 同樣,我的本地服務器上沒有這個問題。 我的視圖解析器如下

 public ViewResolver getViewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("WEB-INF/view/");
    resolver.setSuffix(".html");
    return resolver;
}

在我看來,解析器正在選擇正確的路徑。 將其部署到EC后,路徑會發生變化嗎? 在您的回復中,請像對待初學者一樣對待我。

我設法找到了另一種部署方法:將應用程序容器化,然后將其部署到AWS docker環境。 如果您在嘗試部署Spring Boot應用程序時遇到此404問題,則解決該問題可能需要花費更多精力才能解決。 我以前從未對應用程序進行Docker化,但是這樣做非常簡單。

TL; DR:請勿嘗試將Spring Boot應用程序部署到Tomcat或Java AWS環境。 對其進行容器化並使用Docker AWS環境。

編輯:幾個月后,我以一些新知識回顧了這篇文章:值得注意的是,這僅是因為我的docker build命令在容器中包含了WEB-INF內容(因為它包含了所傳遞上下文中的所有內容)。

您收到404錯誤的原因是因為您要部署到Elastic Beanstalk的jar文件不包含WEB-INF文件夾。 要解決此問題,可以執行以下操作(我假設您正在使用gradle;如有必要,可以搜索等效的maven):

  1. 在您的build.gradle文件中添加“ apply plugin:'war'”。 這將導致“ gradle clean build”現在生成war文件而不是jar文件。
  2. 部署該戰爭文件。

您可能需要執行一些進一步的調整以糾正問題。 但總而言之,您應該可以在“ war”文件中查找並查看WEB-INF文件夾的內容。 一旦解決了這個問題並且可以在本地運行可執行文件(例如java -jar app.war),那么您應該能夠將其成功部署到AWS。 還值得注意的是,您要先進行CD壓縮,然后再進入戰爭所在的文件夾,然后再嘗試運行它。 否則,您的運行將通過上下文從本地系統中提取WEB-INF內容。

暫無
暫無

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

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