【问题标题】:Tomcat giving 404 error with servletsTomcat 使用 servlet 出现 404 错误
【发布时间】:2026-01-21 22:15:02
【问题描述】:

我使用Tomcat 7Oracle JDK 1.7NeatBeans 7.3 开发了一个Java Web 应用程序。我的应用程序在我的本地电脑上运行,没有任何错误。

但是在我托管我的应用程序后,我无法访问 servlet。它给了我404 错误。我没有在我的应用程序中使用web.xml 来映射servlet。我使用了annotation

托管服务器使用Tomcat 7Open JDK 1.7

可能是什么问题?我该如何解决这个问题?

新更新

我购买主机的地方给了我cPanel 来上传文件。在tomcat中没有上传war文件的地方或上传文件到webappsdirector的地方。所以我将文件上传到public_html 目录。我认为这可能是问题所在。因为当我尝试访问像 www.mysite.com/A 这样的 servlet 时,服务器会在 root 目录中搜索它。但实际上它不存在。所以它给出了404 错误。

我认为这可能是问题所在。有什么建议吗?

更新

注解如下

@WebServlet(name = "AddCustomer", urlPatterns = {"/AddCustomer"})

DropBox下载Servlet。

目录结构。

【问题讨论】:

  • tomcat 运行正常吗?你能打开tomcat主页吗?
  • @Bishan 404 表示文件未找到,请正确检查您的代码
  • @JunedAhsan 是的。我可以在我的应用程序中访问jsp 文件。但我无法访问servlets
  • @javaBeginner 我的应用程序在我的本地电脑上运行,没有错误。在另一台服务器上托管我的应用程序后出现此错误。
  • @Bishan 可以分享你在tomcat下部署应用程序的路径吗?同时分享你的 webapp 的目录结构

标签: java tomcat servlets http-status-code-404 openjdk


【解决方案1】:

将您的项目部署到 tomcat 后,如果该位置存在类,请签入“tomcat7\work\Catalina\localhost\your app”。如果有课程,那应该不是问题。

【讨论】:

    【解决方案2】:

    注释不能“开箱即用”,您仍然需要tell Tomcat 来查找带注释的Servlet 类。为此,您需要使用正确版本的web.xml

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
      version="3.0">
    

    我没有使用过 NetBeans,但像 Eclipse 一样,它可能具有项目属性,可让您将动态 Web 项目方面指定为 Servlet 3.0 值,该值将转换为上面显示的 web.xml 行。

    您应该检查项目的 WEB-INF 文件夹中的 web.xml 或尝试正确导出它 - WAR 文件应该(必须?)包含 WEB-INF/web.xml 文件。

    更新

    您可以通过在 web.xml 标头中使用 Servlet 3.0 版本来“告诉它”。对于早期版本,Tomcat 不会期望带有注释标记的 servlet,即您必须在 XML 中手动列出它们。

    至于更新的问题 - 你得到 404 因为 Apache HTTP 服务器(可能是安装的)不理解 WAR 或 JSP 文件,你需要将其配置为将请求转发到 Tomcat,这可能是在另一个端口(默认为 8080)上 - 这称为 AJP 或 HTTP 代理,即 Apache 服务器充当 Tomcat 的前端代理。 * 上有很多关于这个主题的答案。 您不会将 WAR 文件部署到 public_html,因为这是部署 PHP 或 Perl webapps 的地方。

    如果您确实安装了 Tomcat,您应该咨询您的托管服务提供商,它位于哪个端口以及在哪里部署您的 Java Web 应用程序。

    【讨论】:

    • “你还得告诉 Tomcat 去看看”……真的吗?你如何告诉 Tomcat 去寻找注解?
    【解决方案3】:

    检查以下内容:

    • 是tomcat/webapps下面的app
    • 你能从 Tomcat 管理器中看到吗
    • 日志中的任何错误

    最后可能会发布你 web.xml 的一部分以及你正在调用的 url

    编辑

    所以这是你的代码树,但是部署到你的 tomcat webapp 目录的是什么?你编译的类在WEB-INF下吗?

    编辑 您是否收到了有关在 public_html 中托管的 webapp 的新信息?我建议您联系托管服务器提供商的资源以了解如何正确部署 - 也许甚至不可能。

    您可以尝试从 Amazon 获得为期一年的 EC2 试用

    【讨论】:

    • 我可以在我的应用程序中访问jsp 文件。但我无法访问servlets。我没有在我的应用程序中使用web.xml 来映射servlet。我使用了annotation
    • 所以你使用的是servlet3?也许发布你带注释的 servlet
    • 我会尽快通知你。我现在的互联网连接有问题:(
    • 是的。我在WEB-INF下编译了类。
    • 您使用什么 URL 来尝试访问您的 servlet?什么 URL 对 JSP 有效?