当前位置: 首页 > 知识库问答 >
问题:

如何将REST web服务部署到AWS?

梁建德
2023-03-14

需要做什么?

在AWS上使用Web服务(REST)部署Web应用程序。(Tomcat服务器)

我做了什么?

使用REST web服务构建web应用程序。本地测试成功。

问题

现在,当我使用elastic beanstalk将其部署到AWS时,会出现404错误。

我的Web服务代码

@Path("/abc")
public class registerService {
    @POST
    @Path("/crunchifyService")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response crunchifyREST(InputStream incomingData) {
        StringBuilder crunchifyBuilder = new StringBuilder();
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(incomingData));
            String line = null;
            while ((line = in.readLine()) != null) {
                crunchifyBuilder.append(line);
            }
        } catch (Exception e) {
            System.out.println("Error Parsing: - ");
        }
        System.out.println("Data Received: " + crunchifyBuilder.toString());

        User userObject = new Gson().fromJson(crunchifyBuilder.toString(), User.class);
        System.out.println("JSon object: " + userObject.getSurname());
        int status = RegisterDao.register(userObject);
        if(status == 1)
        {



        }else{
            System.out.println("Failed again");

        }

        // return HTTP response 200 in case of success
        return Response.status(200).entity(crunchifyBuilder.toString()).build();
    }

    @GET
    @Path("/verify")
    @Produces(MediaType.TEXT_PLAIN)
    public Response verifyRESTService(InputStream incomingData) {
        String result = "CrunchifyRESTService Successfully started..";

        // return HTTP response 200 in case of success
        return Response.status(200).entity(result).build();
    }


     @GET
       @Path("/users")
       @Produces(MediaType.TEXT_PLAIN)
       public Response getUsers(){
          return Response.status(200).entity("Done").build();
       }
}

REST客户端代码

<%

 String json = new Gson().toJson(u);
System.out.println(json);

try {
  URL url = new URL("http://storageserver-env.sa-east-1.elasticbeanstalk.com/MyApplicationName/api/abc/crunchifyService");
    URLConnection connection = url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "application/json");
    connection.setConnectTimeout(5000);
    connection.setReadTimeout(5000);
    OutputStreamWriter out1 = new OutputStreamWriter(connection.getOutputStream());
    out1.write(json);
    out1.close();

    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

    while (in.readLine() != null) {
    }
    System.out.println("\nCrunchify REST Service Invoked Successfully..");
    in.close();
} catch (Exception e) {
    System.out.println("\nError while calling Crunchify REST Service");
    System.out.println(e);
}

%>

我的服务器日志说

127.0.0.1--[09/Apr/2016:13:38:05 0000]”POST /SecureStorage/api/abc/crunchifyServiceHTTP/1.1”404 1070

**

网状物xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SecureStorage</display-name>
  <welcome-file-list>
    <welcome-file>
    createTable.jsp</welcome-file>
  </welcome-file-list>

   <servlet>
      <servlet-name>Application</servlet-name>
      <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>registration</param-value>
         </init-param>
      </servlet>
   <servlet-mapping>
   <servlet-name>Application</servlet-name>
      <url-pattern>/api/*</url-pattern>
   </servlet-mapping>
</web-app>

共有1个答案

易和怡
2023-03-14

在AWS上部署web应用程序或web服务之间没有区别。

您将在aws网站上获得有关如何部署Web应用程序的精彩教程。

我有什么问题?

从rest客户端调用后,它给了我404错误。

怎么解决的?

根据上面评论部分的说明,我在日志中找到了。

严重[http-nio-8080-exec-8]组织。阿帕奇。卡特琳娜。果心标准包装阀。调用servlet应用程序java的分配异常。lang.NoSuchMethodError:javax。ws。rs.core。应用getProperties()Ljava/util/Map;

这是一个实际问题。当类路径上有两个不同版本的类时,会发生此异常。在此之后,我删除了我额外的重叠罐。有关上述异常的更多信息

另一个问题经过上述改进后,预计一切都会正常工作,但来自rest客户端的服务调用仍然存在404错误代码。

解决方案

我的客户使用以下格式的url。

"http://storageserver-env.sa-east-1.elasticbeanstalk.com/MyApplicationName/api/abc/crunchifyService"

URL给定B yAWS其中Web App是Dep oye d/我的应用程序名称/资源路径

上述url格式适用于本地地址,即locahost:8080/MyApplicationName/ResourcePath

但它在部署后不起作用。

我试图从上面的url中删除MyApplicationName的名称,结果成功了。

工作格式

URLGivenByAWSWhereWebAppIsDepoyed/ResourcePath

 类似资料:
  • 我在Laravel voyager上做了一个测试项目。我想把它发布到服务器上。 我试试这个: 初始化 git远程添加原点 *** git检出大师 git拉 添加. env 添加. htaccess php工匠迁移--force 在ProviderRepository.php第208行中:未找到类“TCG\Voyager\VoyagerServiceProvider” 怎么做? 更新: php ar

  • 我在科尔达做了一个简单的项目。我的项目有4个节点,包括公证人和客户文件夹中的SpringBoot API。我不知道如何将我的项目部署到服务器上。我看过Corda文档,但那篇教程只针对一个节点。所以,我的问题是如何在服务器上部署具有多个节点的Corda项目,以及SpringBoot API。有人能帮我吗?

  • 我目前正在开发一个云备份解决方案,其中涉及到多达8个在spring-boot中开发的微服务,并使用mongo DB atlas作为持久层。 微服务包括Netflix ZUUL API网关和Netflix Eureka作为服务发现机制。微服务被要求彼此进行明显的对话。 对微服务进行了对接。到目前为止,我已经使用docker-compose文件将它们部署到EC2实例中,该文件列出了使用docker网络

  • 我有一个Laravel项目,我想把它部署到服务器上,问题是我们通常都有索引。php和。htaccess在公共文件夹中,但在我的例子中,我将这两个文件放在根目录中。所以我想知道,发球需要做哪些改变? 我怎样才能把它上传到服务器上?

  • 我有以下剧本:

  • 我的网站有两个服务器——本地(ubuntu桌面上的laravel homestead)和公共(带有php7的ubuntu服务器)。我已经有了一些简单的网站,它们在我的公共服务器上运行良好,并且可以在网上看到。我在我的laravel Homestead本地服务器上创建了laravel 5.2项目,现在我想将其移动到我的公共服务器上。我压缩完整的项目文件夹(tar.gz),并使用filezilla将其