如何设置Jersey+Tomcat RESTful Java web应用程序



对不起,我对Java Web应用程序不够天真,但我似乎不明白设置Java应用程序的最佳方法。

问题:

目前,我一直在本地构建一个RESTful API应用程序,使用Jersey&公猫我通过Intellij设置Tomcat,所有的端点方法都是这样的。在我的应用程序中没有main()方法,一切都很好。

@GET @Produces(MediaType.TEXT_PLAIN)
public Response getMessage() {
    String message = "Please specify an endpoint.";
    return Response.status(200).entity(message).build();
}

但是,我正在尝试将我的应用程序部署到Heroku。Heroku可以构建它,但当我打开URL时,我会得到Application Errors,在检查日志后,我会看到明显的:

2015-04-07T15:58:31.407658+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/gympeak/schools" host=gympeak-api.herokuapp.com request_id=02018a23-900d-4365-84a5-a54b82c4788a fwd="152.17.156.116" dyno= connect= service= status=503 bytes=

基本上告诉我没有web应用程序在运行。我认为这部分是因为我的应用程序可以在本地启动Tomcat(因为它是用Intellij配置的),但不能在Heroku上启动。我已经尝试编辑Procfile来做这样的事情:

web: java -cp target/classes:target/dependency/* com._1834Software.endpoints.Index

但问题是,由于没有main()方法,它无法启动任何东西。

问题:

如何使用没有main()方法的Tomcat部署Java web应用程序?这可能吗?它在当地似乎很有效,但在野外却不行。

我见过有人使用Tomcat做类似的事情,但当我能够在本地启动Tomcat时,这样做对我来说没有意义。http://blog.sortedset.com/embedded-tomcat-jersey/

另外,如果有帮助的话,这是我的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
    <servlet-name>GymPeak API</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>GymPeak API</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

我认为您可能想要使用webapp-runner来启动您的WAR文件。以下是一篇关于设置的文章:https://devcenter.heroku.com/articles/java-webapp-runner

您可以启动Tomcat实例,并在其上部署基于Jersey的应用程序。这样,您就不需要主方法,只需要一个标准的servlet应用程序。

你可以检查这个项目,它就是一个例子。它使用gradle来构建战争。

最新更新