为啥我在 Maven 动态 Web 模块中收到此 404 错误?

Posted

技术标签:

【中文标题】为啥我在 Maven 动态 Web 模块中收到此 404 错误?【英文标题】:Why am I receiving this 404 Error in my Maven Dynamic Web Module?为什么我在 Maven 动态 Web 模块中收到此 404 错误? 【发布时间】:2015-07-24 00:16:24 【问题描述】:

我是 Jersey/JAX-RS/RESTful Web Services/等的新手。我在使用名为jersey-quickstart-webapp 的泽西原型时遇到了困难。我正在尝试将它与 Eclipse、Maven 和 Tomcat v7 或 v8 一起使用(我都尝试过)。

首先我遇到了一个 JSP 错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path. 我用this SO question regarding the error 解决了这个错误。显然 Maven 并没有将我的项目视为动态 Web 应用程序。

然后我收到关于:Build path specifies execution environment JavaSE-1.7. There are no JREs installed in the workspace that are strictly compatible with this environment 的警告。我用another SO question on the matter 解决了第二个问题。我最初使用的是 JavaSE-1.8。

最后,我遇到了最后一个错误:Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result.Again,我检查了 SO 和 excluded the associated raw classpath entry from the set of potential publish/export dependencies。

但是,我的项目仍然收到 404,我不知道为什么。我正在为这个项目使用 pom.xml 文件。 tutorial I'm following 告诉我这里要使用的正确 URL 是 http://localhost:8080/messenger/

【问题讨论】:

你在使用http://localhost:port/your-project/webapi/myresource吗? localhost:8080/messenger 尝试通过右键单击从项目文件夹本身运行它 -> 运行方式 -> 在服务器上运行 (Tomcat 7)。它说 /messenger/ 是缺少的资源。我还尝试在 localhost:8080/messenger/WEB-INF/classes/org/myName/mySite/… 的 MyResource.java 上做同样的事情,并在缺少的资源下返回一个空白。 如果你的项目名为messenger,你试过http://localhost:port/messenger/webapi/myresource 我尝试了 http://localhost:8080/messenger/webapi/myresource/ 并得到了相同的 404 结果(也是 http://localhost:port/messenger/webapi/myresource 逐字)。为我的菜鸟道歉,除了 Java 和 Eclipse 之外,我对所提到的所有内容都是新手。 this 你是如何创建项目的? 【参考方案1】:

这不是答案(将被删除)

编辑:变成了社区维基。这不是一个解决方案。

尝试将此码头插件添加到应用程序。在pom.xml 文件中的<build><plugins>

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.2.6.v20141205</version>
</plugin>

然后右击项目,Maven -> Build;在目标对话框中输入jetty:run 并尝试运行构建。这应该启动一个嵌入式码头服务器。一旦控制台显示“Jetty Server 已启动”,您应该能够访问http://localhost:8080/webapi/myresource。就是想看看是不是应用的问题。

【讨论】:

我能够访问我的 Java 文件!我得看看为什么会这样,但至少这个长达数小时的头痛已经结束了。 可能是 Eclipse 中的 Tomcat 配置有问题。自从我在 Eclipse 上运行 Maven webapp 已经有一段时间了,所以我不确定问题是什么。但至少你知道这不是应用程序的问题。【参考方案2】:

快速临时解决方案:

将url中的webapi改为webresources:http://localhost:8080/webapi/myresource

永久解决方案:

更改文件 web.xml

<url-pattern>/webresources/*</url-pattern>

<url-pattern>/webapi/*</url-pattern>

【讨论】:

以上是关于为啥我在 Maven 动态 Web 模块中收到此 404 错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 facenet 中收到此错误?

为啥会收到此错误“模块 * 已定义”?

Maven 错误:模块的 Maven 项目配置不可用

为啥我在 python 中收到此错误? (httplib)

为啥我在 django 教程中收到此模板错误?

为啥我在角度请求中收到此错误? (CORS)