0

我在 servlet 执行期间收到此错误:

HTTP 状态 404 - /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>

这是如何引起的,我该如何解决?

4

1 回答 1

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 {
    // ...
}

也可以看看:

于 2013-01-27T11:30:21.147 回答