如果重新启动,GlassFish Web 服务应用程序工作正常然后 404s

GlassFish web service application works fine then 404s if restarted

我正在 IntelliJ IDEA 中开发 RESTful Web 服务应用程序。我正在将它部署到带有 war 爆炸工件的 GlassFish。该应用程序只是有时可以工作,而其他时候则不能。我可以启动它,它 运行 没问题,然后停止应用程序,再次启动它,然后我得到 404。这里列出了一些似乎可以暂时解决问题的东西(直到随后的 运行使用相同的配置,我得到另一个 404)。

GlassFish 日志打印出以下内容

[2017-02-14T21:38:37.212-0700] [Payara 4.1] [WARNING] [] [org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer] [tid: _ThreadID=63 _ThreadName=admin-thread-pool(2)] [timeMillis: 1487133517212] [levelValue: 900] [[ Mapping conflict. A Servlet registration exists with same mapping as the Jersey servlet application, named launcher.MyApplication, at the servlet mapping, /*.]]

但它在 运行 成功时和失败时执行此操作,这似乎没有关联。我将对其进行更多研究,但发现有关此消息的信息很少(可能是因为它 war 无关紧要?)

我已经为这个问题苦苦思索了一段时间。我是将应用程序部署到服务器(尤其是在 IntelliJ 中)的绝对初学者,但我们将不胜感激任何帮助或提示。

谢谢

编辑: 我还没有达到如果我重新启动服务器或重新部署足够多的时间它再​​次工作的地步。从 2-5 次尝试的任何地方,它无缘无故地再次工作。 (我重新部署时似乎工作更频繁)

看来我终于找到问题所在了。我在我的项目中缺少 web.xml 到 class 的 servlet 映射,子 classes 应用程序并使用 @ApplicationPath 注释来识别所有 JAX-RS REST 资源的基本 URI。

...
    <servlet>
        <servlet-name>services.MyApplication</servlet-name>
    </servlet>
    <servlet-mapping>
        <servlet-name>services.MyApplication</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
...

仍然不确定在没有指定此映射的情况下它偶尔会如何工作,非常奇怪。无论如何,现在它似乎每次都能正常运行。