如何克服apache tomcat7x中找不到的请求资源

时间:2013-01-27 10:31:43

标签: servlets

我在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>

这是如何引起的?如何解决?

1 个答案:

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

另见: