【问题标题】:How to setup a Jersey + Tomcat RESTful Java web app?如何设置 Jersey + Tomcat RESTful Java Web 应用程序?
【发布时间】:2015-06-12 07:43:12
【问题描述】:

请原谅我对 Java Web 应用程序不够天真,但我似乎无法理解设置 Java 应用程序的最佳方法。

问题:

目前我一直在本地构建一个 RESTful API 应用程序,使用 Jersey 和 Tomcat。我通过 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>

【问题讨论】:

    标签: java tomcat heroku intellij-idea jersey


    【解决方案1】:

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

    【讨论】:

    • 是的,webapp-runner 做到了。 Heroku 在教程中对此非常明确,但我忽略了它。经过一番挣扎,这奏效了。谢谢。
    • @carbon_ghost.. 你能告诉我们你是怎么解决的吗?一步一步的指南会很棒..我遇到了同样的问题..
    【解决方案2】:

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

    您可以查看this project,这是一个例子。它使用 gradle 来构建战争。

    【讨论】:

      猜你喜欢
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多