将REST API部署到AWS

时间:2017-04-26 20:50:10

标签: java rest amazon-web-services netbeans

我正在将分布式系统作为学校项目,我需要一个REST服务。这将是一个简单的服务,具有登录/注册功能和一些信息传输。

我在NetBeans中用Java创建了REST API。它在本地工作正常,但我很难将它放在我的AWS服务器上。我没有服务器的经验,所以我真的不知道它是如何工作的。我认为在服务器上启动并运行服务应该很容易。

到目前为止,我已经使用了this指南来尝试使用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服务,或者我做错了什么?

我真的试图搜索谷歌寻求帮助,但到目前为止还没有成功。

1 个答案:

答案 0 :(得分:1)

似乎我对所有导游都感到困惑。 我找到了一个简单的解决方案,并在EC2实例上安装了Tomcat,所以我甚至不需要使用Beanstalk。

我所做的就是关注this指南并将战争文件上传到Web应用程序管理器中,现在它可以正常工作。

感谢他们帮助我找到解决方案的评论。