如何设置 Jersey + Tomcat RESTful Java 网络应用程序?
How to setup a Jersey + Tomcat RESTful Java web app?
对不起,我对 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()
方法。
问题:
如何使用 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>
您可以启动一个 Tomcat 实例并在其上部署一个 war 以及基于 Jersey 的应用程序。这样您就不需要 main 方法,只需要一个标准的 servlet 应用程序。
您可以查看 this project,这是一个例子。它使用 gradle 构建 war.
我认为您可能希望使用 webapp-runner
来启动您的 WAR 文件。这是一篇关于设置它的文章:
https://devcenter.heroku.com/articles/java-webapp-runner
对不起,我对 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()
方法。
问题:
如何使用 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>
您可以启动一个 Tomcat 实例并在其上部署一个 war 以及基于 Jersey 的应用程序。这样您就不需要 main 方法,只需要一个标准的 servlet 应用程序。
您可以查看 this project,这是一个例子。它使用 gradle 构建 war.
我认为您可能希望使用 webapp-runner
来启动您的 WAR 文件。这是一篇关于设置它的文章:
https://devcenter.heroku.com/articles/java-webapp-runner