我在servlet执行期间遇到此错误:
HTTP状态404 - / Hello /
类型状态报告
消息 / Hello /
说明所请求的资源不可用。
Apache Tomcat / 7.0.35
我的部署文件夹结构如下所示:
Hello-->
WEB-INF-->
classes-->
Hello.class
lib
web.xml
我的web.xml
如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app metadata-complete="true" version="3.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class> Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
</web-app>
这是如何引起的?如何解决?
答案 0 :(得分:1)
默认包中的类不可见/可导入到包本身内的类(在这种特殊情况下是Tomcat本身)。作为练习,尝试自己创建2个课程。一个在一个包中,一个没有包。尝试在打包的中导入无包装的。你会看到它不会编译。 Tomcat面临完全相同的问题。它找不到servlet类。注意应该是它只适用于某些Tomcat / JRE版本组合,但你肯定不会依赖它。
将您的公共类放在一个包中。总是
package com.example; // <-- Look, a package.
public class Hello extends HttpServlet {
// ...
}
使用包重新编译后,.class
文件应该在此处结束:
Hello
`-- WEB-INF
|-- classes
| `-- com
| `-- example
| `-- Hello.class
|-- lib
`-- web.xml
相应地更改servlet类声明。
<servlet-class>com.example.Hello</servlet-class>
无关,web.xml
配置是注册servlet的一种相当古老的方式。从Servlet 3.0版开始,您可以使用@WebServlet
注释。
package com.example;
@WebServlet("/Hello")
public class Hello extends HttpServlet {
// ...
}