AWS Elastic Beanstalk Spring Boot fat JAR:找不到jsp

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk Spring Boot fat JAR:找不到jsp【英文标题】:AWS Elastic Beanstalk SpringBoot fat WAR : jsp not found 【发布时间】:2021-03-29 01:42:09 【问题描述】:

我有

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

在我的 application.properties 中。我用gradle bootWar 创建了一个独立的战争。 jsp 文件在本地运行时可以正常解析,但在 eb 上找不到 jsp 文件,并且以 404 结尾。我使用的是简单的 eb amz linux 2 环境。

值得注意的是 eb 如何运行文件:java -jar application.**jar** 而不是 java -jar application.**war**

我的问题是:

    将其作为 WAR 运行会解决问题吗?如何让 eb 将其作为 WAR 运行? 如果答案。 #1 是在 eb tomcat 环境中使用非独立 WAR,我必须使用哪些选项才能使其使用 ssl?独立 WAR 使用应用程序属性配置 ssl。这会继续有效吗?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我使用带有 Thymeleaf 的 Spring Boot 应用程序,从未见过在模板文件夹中找不到视图的问题。请参阅此 AWS 教程,该教程构建了一个调用 AWS 服务并将其部署到 AWS Elastic Beanstalk 的基本 Spring Boot 应用程序。

顺便说一下,这个应用程序是作为 JAR 部署的:

https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases/creating_first_project

【讨论】:

是的,thymeleaf 适用于 jar 包,但 afaik jsp 不适用。这是因为包结构,但我不完全理解根本原因。【参考方案2】:

我修复了 war 打包的问题,​​并将其部署在 eb tomcat 环境中。 SSL 现在由 nginx 反向代理而不是应用服务器处理。

这是我的 nginx 代理配置,以备不时之需:

user                    nginx;
error_log               /var/log/nginx/error.log warn;
pid                     /var/run/nginx.pid;
worker_processes        auto;
worker_rlimit_nofile    32714;

events 
    worker_connections  1024;


http 
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    include       conf.d/*.conf;

    map $http_upgrade $connection_upgrade 
        default     "upgrade";
    

    server 
        listen       443 default ssl;
        server_name  localhost;
        error_page  497 https://$host$request_uri;

        ssl_certificate      <full-path-to-fullchain.pem>;
        ssl_certificate_key  <full-path-to-privkey.pem>;

        ssl_session_timeout  5m;
        ssl_protocols  TLSv1.1 TLSv1.2;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
        ssl_prefer_server_ciphers   on;

        if ($ssl_protocol = "") 
          rewrite ^ https://$host$request_uri? permanent;
        

        client_header_timeout 60;
    client_max_body_size  10M;
        client_body_timeout   60;
        keepalive_timeout     60;
        gzip                  off;
        gzip_comp_level       4;
        gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        # Include the Elastic Beanstalk generated locations
        include conf.d/elasticbeanstalk/*.conf;

    
    
    server 
        listen 80;
        return 301 https://$host$request_uri;
    

【讨论】:

以上是关于AWS Elastic Beanstalk Spring Boot fat JAR:找不到jsp的主要内容,如果未能解决你的问题,请参考以下文章

[AWS] Elastic Beanstalk

AWS Elastic Beanstalk CLI 安装错误

text AWS Elastic Beanstalk

HTTPS Elastic Beanstalk (AWS) 到 Android

AWS Elastic Beanstalk 无法担任角色

AWS Elastic Beanstalk