JBoss错误报告:HTTP状态404 - Servlet不可用。

5
我正在使用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 文件吗? - Neil Essy
1
项目是否部署在上下文路径为“web”的环境中?您能够访问根目录localhost:8080/web吗? - Liviu T.
当服务器启动或应用程序部署时,您是否在日志或控制台输出中看到任何问题? - Santosh
是的,localhost:8080/web 毫無問題地打開了索引頁面 而且 @Santosh,不,我仔細觀察過了,沒有異常或其他什麼。 - NadaNK
只需清除cookies即可解决。 - Code Spy
3个回答

5

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

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

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

最后,如果您正在使用JBoss Eclipse连接器从Eclipse进行自动部署,并且有时会出现错误,导致应用程序无法正确部署(尽管应用程序本身没有问题)。 如果是这种情况,请尝试手动将.war文件部署到应用服务器上并检查它。


2

HTTP状态码404 - Servlet不可用。

Servlet加载失败(如果在web.xml中未正确声明Servlet或URL错误,则应该看到“404-资源未找到”)。简而言之,<servlet-class> 错误或具体类文件不存在于 /WEB-INF/classes 中。


嗯,是的,但我非常确定从我的烂代码中得出结论,例如如果我有一个覆盖了init()方法并抛出NPE的servlet,那么访问该servlet(例如在Jetty中)将返回HTTP 500。 - Shivan Dragon
BalusC,这就是Servlet规范的工作方式。404表示URL错误,500表示URL实际上映射到了一个Servlet,但由于错误/异常该Servlet无法返回响应。提问者可以检查他/她的代码,但如果他输入的不是正确的URL,即使有一个完美工作的Servlet,他也会得到404错误。 - Shivan Dragon
1
BalusC:使用servlet制作一个webApp。在构造函数或init()方法中抛出一个异常。将其部署到JBoss AS。访问您的servlet URL。然后访问一个不存在的URL。看看你何时获得HTTP 404和何时获得HTTP 500。 - Shivan Dragon
@Andrei:你说得对,OP的问题不是由init中的异常引起的,而是由于找不到该类。但URL肯定是正确的,并且与servlet映射匹配。 - BalusC
+1,这是我从未想过的。在这种情况下,Web应用程序根本不会部署,因此返回404错误,而实际上该URL已映射到一个servlet。 - Shivan Dragon
显示剩余4条评论

2

我还不知道出了什么问题,但我创建了另一个名为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>

感谢大家的帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接