Java JBoss错误报告:HTTP状态404-Servlet不可用
我正在尝试使用MyEclipse和JBoss 5作为应用服务器创建一个名为“web”的非常基本的web项目。我创建了一个名为“pages”的包,其中有一个名为“UserInterface”的servlet。问题是,当我部署项目并运行服务器时,总是会收到错误报告:HTTP状态404-Servlet不可用 这是my web.xml的一部分:Java JBoss错误报告:HTTP状态404-Servlet不可用,java,eclipse,servlets,web,jboss5.x,Java,Eclipse,Servlets,Web,Jboss5.x,我正在尝试使用MyEclipse和JBoss 5作为应用服务器创建一个名为“web”的非常基本的web项目。我创建了一个名为“pages”的包,其中有一个名为“UserInterface”的servlet。问题是,当我部署项目并运行服务器时,总是会收到错误报告:HTTP状态404-Servlet不可用 这是my web.xml的一部分: <servlet> <servlet-name>UserInterface</servlet-name> &
<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>
用户界面
pages.UserInterface
用户界面
/用户界面
我在浏览器中导航到:
我做错了什么
谢谢
HTTP状态404-Servlet不可用
加载servlet失败(如果servlet没有在
web.xml
中正确声明,或者URL错误,那么您应该看到“404-未找到资源”)。简单地说,
是错误的,或者具体的类文件不在/WEB-INF/classes
404中,这意味着您试图访问的URL没有指向服务器上的现有资源。再次检查地址,可能是“web”(来自http://localhost:8080/web/UserInterface
)部分不正确,因为可能应用程序未使用该名称部署。默认情况下,应用程序上下文名称来自“.war”文件的文件名,例如,如果您的文件是“myApp.war”,则您的应用程序应位于http://localhost:8080/myApp
此外,如果您实际在.ear文件中部署war,则该ear文件将包含一个application.xml应用描述符,该描述符可以将您的应用程序文件映射到特定上下文,而不管.war文件名是什么,例如:
<module>
<web>
<web-uri>myApp.war</web-uri>
<context-root>theApp</context-root>
</web>
</module>
myApp.war
西亚普
最后,如果您使用JBoss Eclipse连接器从Eclipse自动部署,有时会出现问题,实际上无法正确部署您的应用程序(即使应用程序本身很好)。如果是这样的话,请尝试手动将.war部署到应用程序服务器,并进行检查。我仍然不知道出了什么问题,但我创建了另一个名为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>
使用者
页面。用户
使用者
/servlet/用户
谢谢大家的帮助 部署的web应用程序中的文件列表将非常有用。您是否将其部署为.war?项目是否部署为context path=web?您可以访问根localhost:8080/web吗?当服务器启动或部署应用程序时,您是否在日志或控制台输出中看到任何问题?是的,localhost:8080/web打开索引页时没有任何问题,@Santosh,没有,我已经仔细观察过了,没有异常,或者其他什么只要清除cookie即可。。会的work@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。在构造函数或init()方法中引发异常。将其部署到JBoss AS。访问servlet的URL。然后访问一个不存在的URL。查看何时获得HTTP 404和何时获得HTTP 500。