将 Java 应用程序部署到 Tomcat 时出现问题

Issues deploying a Java application to Tomcat

我构建了一个简单的 Java 网络应用程序。它提供了一系列RESTful API 供用户通过Web 界面对Java DB 进行某些操作。开发时使用NetBeans环境,测试使用Glassfish

现在我完成了它,我希望能够使用二进制文件将它部署到另一台机器上(尽管现在我使用同一台机器直到我学会如何操作)。

我安装了 Tomcat 7,并将 .war 文件移动到 Tomcat 的 webapp 文件夹中。应用程序部署。此后,我尝试使用为此创建的按钮从数据库中读取一些数据,但出现以下错误

我不确定哪里出了问题,但我有两种说法。

1) Web 应用程序无法连接到数据库。然而,当我再次尝试 运行 应用程序时,在从 NetBeans 启动 JavaDB 后,没有任何区别。

2) 不知何故,应用程序无法访问节点服务。我假设在移动应用程序时不需要更改 API 链接,但也许我错了。

或者还有其他一些我没有考虑到的问题?对于如何正确部署此类应用程序的任何建议,我将不胜感激。

编辑:问题已通过使用 TomEE 解决。

错误来自您选择的应用程序服务器。 TomCat 只是一个 servlet 容器(意味着它只支持 Servlet/JSP)。 任何其他功能(JAX-RS、CDI 等)都需要 Java EE 认证服务器,例如GlassFish、WildFly、Payara、WebLogic、OpenLiberty 或 TomEE。

如果您想在生产或测试环境中使用 TomCat,

TomEE 可能是您最好的选择,它基本上是 TomCat + Java EE 的其他功能。

编辑: TomEE 没有像 GlassFish 这样的 JNDI 数据源配置的 GUI,您需要编辑 conf/tomee.xml

<Resource id="myDataSource" type="javax.sql.DataSource">
    jdbcDriver = org.apache.derby.jdbc.ClientDriver
    jdbcUrl = jdbc:derby://localhost:1527/dbname
    userName = app
    password = app
</Resource>

并且在您的 java 代码中:

@Path("resources")
@Stateless
public class MyResources{
    @Resource(name="myDataSource")
    DataSource dataSource;

    @GET
    public Response SomeMethod(){
         //Do stuff here
    }
}

您可以查看 here 了解有关数据源的更多详细配置。