rest - 尝试访问服务器上的 rest API 时出现错误 500(在开发期间正在本地主机上工作)

标签 rest tomcat jakarta-ee

我创建了一个 Rest API 来让我的网站与 mysql 数据库进行通信。在本地开发它时,我可以使用 tomcat 服务器在 eclipse 上运行应用程序,然后使用如下路径从 javascript 访问我的 api:

localhost:8080/backend/api/paintings

此路径提供数据库中的所有画作。

我现在租了一个 VPS 并在上面安装了所有东西(我认为)以使其工作,但是当尝试访问相同的路径时我得到错误 500,即使没有任何改变并且 tomcat 正在运行(我可以访问 mydomain .com:8080 并显示 apache tomcat 页面)。

我的 Rest API 是使用 Java EE 构建的。

我收到的错误信息是

message "Servlet.init()" pour la servlet [mpart] a généré une exception

description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête.

exception
javax.servlet.ServletException: "Servlet.init()" pour la servlet [mpart] a généré une exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:834)

cause mère
java.lang.NoSuchMethodError: 'java.util.Map javax.ws.rs.core.Application.getProperties()'
    org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:331)
    org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)
    javax.servlet.GenericServlet.init(GenericServlet.java:158)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:834)

我尝试通过这两种方法从我的js代码访问api

mydomain.com:8080/backend/api/paintings 
localhost:8080/backend/api/paintings 

两者都报错。

我可以提供任何类型的代码来帮助解决这个问题。

这是我的 web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <display-name>mpart</display-name>
    <servlet>
        <servlet-name>mpart</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>fr.demarquez.mpart.controllers</param-value>
        </init-param>
       <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>
                fr.demarquez.mpart.configs.CORSFilter;
                fr.demarquez.mpart.configs.LocalDateTimeAdapter;
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mpart</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
</web-app>

最佳答案

您正在将 mpart servlet 映射到 /api/* 但使用 /bacend/api* 端点访问它。你能试试这个吗?

''' /后端/API/* '''

关于rest - 尝试访问服务器上的 rest API 时出现错误 500(在开发期间正在本地主机上工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57842431/

相关文章:

java - 使用健康检查或 ping 来提高 rest api 性能

REST API 命名约定 : referencing unique resources with nested paths

java - 可以在 Tomcat 上部署 WAR 后更改 JAR 文件吗?

javascript - 如何在休息时禁用管理中的每页限制?

javascript - 允许用户在创建时指定 Backbone 模型的 ID

maven - 带有自签名证书的 tomcat7-maven-plugin

tomcat - 如何在 Jenkins 中创建 2 个独立的 m2 存储库

java - Eclipse调用JFace插件时出现空指针异常

jakarta-ee - 如何避免 WebappClassLoader.findResources 中的 NullPointerException?

JavaEE - 在事务之间共享资源