【问题标题】:JBoss error report: HTTP Status 404 - Servlet is not availableJBoss 错误报告:HTTP 状态 404 - Servlet 不可用
【发布时间】:2012-01-05 08:34:03
【问题描述】:

我正在尝试使用 MyEclipse 和 JBoss 5 作为应用程序服务器创建一个非常基本的 Web 项目,称为“web”。我创建了一个名为“pages”的包,并在其中创建了一个名为“UserInterface”的 servlet。问题是当我部署项目并运行服务器时,我总是收到错误报告:HTTP 状态 404 - Servlet 不可用。

这是我的 web.xml 的一部分:

<servlet>
    <servlet-name>UserInterface</servlet-name>
    <servlet-class>pages.UserInterface</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>UserInterface</servlet-name>
    <url-pattern>/UserInterface</url-pattern>
  </servlet-mapping>

我正在浏览器中导航到:http://localhost:8080/web/UserInterface

我在这里做错了什么?

谢谢

【问题讨论】:

  • 部署的 Web 应用程序中的文件列表会很有用。您是否将其部署为 .war?
  • 项目也是用上下文路径=web部署的吗?你能访问根 localhost:8080/web 吗?
  • 当服务器启动或应用程序正在部署时,您是否在日志或控制台输出中看到任何问题?
  • 是的 localhost:8080/web 打开索引页面没有问题,@Santosh,不,我仔细看了,没有异常或什么
  • 清除cookies..它会工作

标签: java eclipse servlets web jboss5.x


【解决方案1】:

HTTP 状态 404 - Servlet 不可用。

加载 servlet 失败(如果 servlet 没有在 web.xml 中正确声明或 URL 错误,那么您应该看到“404 - 找不到资源”)。简单来说,&lt;servlet-class&gt; 错误或者/WEB-INF/classes 中没有具体的类文件。

【讨论】:

  • @Andrei:仅当被service()doGet() 等抛出时。但在这种情况下,servlet 根本不可用。容器知道 servlet URL 映射,但手头没有有效的工作实例,因为实例化/初始化失败。
  • 嗯,是的,但我很确定从我自己糟糕的编码中,例如,如果我有一个带有 init() 覆盖方法的 servlet,它会引发 NPE,然后访问该 servlet(在 Jetty例如)将返回一个 HTTP 500。
  • @Andrei:OP 使用的是 JBoss,而不是 Jetty。
  • BalusC,这就是 servlet 规范的工作方式。 404 是错误的 URL,500 是当 URL 实际上映射到 servlet 但该 servlet 由于错误/异常而无法返回响应时。问这个问题的人可以检查他/她想要的所有代码,如果他输入的 url 不正确,即使使用完美工作的 servlet,他也会得到 404。
  • BalusC:使用 servlet 制作 webApp。在构造函数或 init() 方法中抛出异常。将其部署到 JBoss AS。访问您的 servlet 的 URL。然后访问一个不存在的 URL。查看何时获得 HTTP 404 以及何时获得 HTTP 500。
【解决方案2】:

404 表示您尝试访问的 URL 未指向服务器上的现有资源。再次检查地址,可能“web”(来自http://localhost:8080/web/UserInterface)部分不正确,因为可能未使用该名称部署应用程序。默认情况下,应用程序上下文名称源自“.war”文件的文件名,例如,如果您的文件是“myApp.war”,您的应用程序应该可以在 http://localhost:8080/myApp

另外,如果您实际上是在 .ear 文件中部署您的战争,那么该 .ear 文件将包含一个 application.xml 应用描述符,该描述符可以将您的应用文件映射到特定的上下文,无论 .war 文件名是什么,类似:

<module>
    <web>
      <web-uri>myApp.war</web-uri>
      <context-root>theApp</context-root>
    </web>
  </module>

最后,如果您使用 JBoss Eclipse 连接器从 Eclipse 自动部署,有时会出现问题,实际上并没有正确部署您的应用程序(即使应用程序本身很好)。如果是这种情况,请尝试手动将 .war 部署到应用程序服务器并以这种方式进行检查。

【讨论】:

    【解决方案3】:

    我仍然不知道出了什么问题,但是我创建了另一个名为 user 的 servlet,并且在 web.xml 中,我在类之前添加了 /servlet 并在浏览器中导航到它(http://localhost: 8080/web/servlet/User) 并且成功了。

    <servlet>
        <servlet-name>User</servlet-name>
        <servlet-class>pages.User</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>User</servlet-name>
        <url-pattern>/servlet/User</url-pattern>
      </servlet-mapping>
    

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 2012-06-01
      • 2012-06-16
      • 1970-01-01
      • 2015-10-11
      • 2016-02-11
      • 1970-01-01
      相关资源
      最近更新 更多