2017-04-26 180 views
2

我正在將分佈式系統作爲一個學校項目,我需要一個REST服務。這將是一個簡單的服務,具有登錄/註冊功能和一些信息傳輸。將REST API部署到AWS

我在NetBeans中的Java中創建了REST API。它在本地很好地工作,但我很難將它放到我的AWS服務器上。我沒有使用服務器的經驗,所以我不知道它是如何工作的。我認爲應該很容易在服務器上啓動並運行服務。

到目前爲止,我已經使用this指導REST,並嘗試使用Elastic Beanstalk部署war文件。

我的Java代碼:

ApplicationConfig.java

package dk.dtu.ds.login; 

import java.util.Set; 
import javax.ws.rs.core.Application; 

@javax.ws.rs.ApplicationPath("CoL") 
public class ApplicationConfig extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<>(); 
     addRestResourceClasses(resources); 
     return resources; 
    } 

    /** 
    * Do not modify addRestResourceClasses() method. 
    * It is automatically populated with 
    * all resources defined in the project. 
    * If required, comment out calling this method in getClasses(). 
    */ 
    private void addRestResourceClasses(Set<Class<?>> resources) { 
     resources.add(dk.dtu.ds.login.Login.class); 
    } 
} 

Login.java

package dk.dtu.ds.login; 

import cleanoutloudserver.ICleanOutLoud; 
import java.net.MalformedURLException; 
import java.net.URL; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.QueryParam; 
import javax.ws.rs.core.MediaType; 
import javax.xml.namespace.QName; 
import javax.xml.ws.Service; 

@Path("login") 
public class Login { 
    // HTTP Get Method 

    @GET 
    @Path("dologin") 
    // Produces JSON as response 
    @Produces(MediaType.APPLICATION_JSON) 
    // Query parameters are parameters: http://localhost/colrest/CoL/login/dologin?username=s150157&password=1234 
    public String doLogin(@QueryParam("username") String uname, @QueryParam("password") String pwd) throws MalformedURLException, Exception { 
     URL url = new URL("http://ec2-52-43-233-138.us-west-2.compute.amazonaws.com:3769/col?wsdl"); 
     QName qname = new QName("http://cleanoutloudserver/", "CleanOutLoudImplService"); 
     Service service = Service.create(url, qname); 
     ICleanOutLoud col = service.getPort(ICleanOutLoud.class); 

     String token = col.login(uname, pwd); 

      token = Utility.constructJSON(token); 
      System.out.println("\nChecking credentials = true\n"); 
     return token; 
    } 
} 

的web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <display-name>RESTWebApp</display-name> 
    <servlet> 
     <servlet-name>jersey-servlet</servlet-name> 
     <servlet-class> 
      com.sun.jersey.spi.container.servlet.ServletContainer 
     </servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>dk.dtu.ds.login</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>jersey-servlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

當我再嘗試打開path爲服務,我得到一個空白頁。我的Chrome控制檯顯示「GET(link)404(Not Found)」

因爲我對HTTP和服務器不熟悉,所以我不知道該怎麼做。 是不是有一種簡單的方法來使用AWS部署簡單的REST服務,或者我做錯了什麼?

我真的試圖搜索谷歌尋找幫助,但迄今爲止還沒有成功。

+0

您可能需要通過IAM策略設置所需的訪問權限。 – notionquest

+0

你是如何在本地打包和測試應用程序的?您需要額外的庫才能在AWS ElasticBeanstalk Tomcat實例類型上運行,但它們與您在本地Tomcat上需要的相同。 – stdunbar

+0

請按照http://stackoverflow.com/questions/41235012/rest-api-aws-cloud-using-java/41235422#41235422中給出的答案,讓我知道如果它不適合你。 –

回答