0

这些天我真的要疯了,我正在尝试开发一个servlet,但我真的不明白为什么这个不起作用。

这是代码:

import java.io.IOException;
import javax.servlet.ServletException;

import java.io.BufferedReader;
import java.io.PrintWriter;

import javax.servlet.ServletResponse;
import javax.servlet.ServletRequest;
import javax.servlet.GenericServlet;

public class WipdServlet extends GenericServlet 
{
    public void service(ServletRequest request, ServletResponse response)
    throws IOException {
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<body>");
        out.println("<h1>ssup WIPD Servlet</h1>");
        out.println("Content Type: " + request.getContentType());
        out.println("Content Length: " + request.getContentLength());
        out.println("</body>");
        out.println("</html>"); 

    }
}

和 web.xml:

<web-app>
    <servlet>
        <servlet-name>Wipd</servlet-name>
        <servlet-class>WipdServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Wipd</servlet-name>
            <url-pattern>/wipd</url-pattern>    
    </servlet-mapping>
</web-app>

servlet 位于:

/var/lib/tomcat6/webapps/wipd/

对于这项工作,我需要在 VM 上运行的 Debian 上安装的 Tomcat6 下运行 servlet,我目前正在使用 servlet-api 在我的 Gentoo 上工作,在 Gentoo 上运行 javac 后,我将文件 .class 放在 Debian 上。但如果我冲浪到:

http://192.168.0.177:8080/wipd/wipd.

我得到:

javax.servlet.ServletException: Wrapper 找不到 servlet 类 WipdServlet 或它依赖的类 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter. java:293) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) org.apache.tomcat.util。 net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:636)

我什至尝试将类放在一个包中,并编辑 web.xml 指定包,但没有。我真的无法理解。

提前致谢。

4

3 回答 3

0

从异常中我可以看到您的课程不在一个包中。检查此链接,它描述了与您类似的问题。

于 2012-09-24T23:03:30.310 回答
0

我也面临同样的问题。实际上,我的一个程序在经过几次更改后就已经开始工作了,这向我显示了这个错误。我什至做了撤消来恢复更改,但它仍然发生在我身上。最后,我为我的场景找到了一个可行的解决方案。

简单的:

1.只需尝试清理您的项目并再次运行。如果它显示相同的错误并且您确定您的代码没有任何问题,那么,

2.启用“项目”菜单下的“自动构建”菜单项并尝试清理您的项目。这次它对我有用。

听说这是因为当我们进行一些更改并运行时,eclipse 也会对其背景进行一些更改。因此,即使我们恢复更改,eclipse 也可能不会恢复它在后台所做的更改。因此,执行这两个步骤将确保它与用户更改及其背景更改相匹配。

希望它也能帮助并解决您的问题。

于 2014-06-19T09:05:08.683 回答
0

您需要将您的 servlet 放在某个包中。进行以下更改 -

package a.b.c; // added

public class WipdServlet extends GenericServlet {

    // .. other code
}

web.xml :-

<web-app>
    <servlet>
        <servlet-name>Wipd</servlet-name>
        <servlet-class>a.b.c.WipdServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Wipd</servlet-name>
        <url-pattern>/wipd</url-pattern>    
    </servlet-mapping>
</web-app>

部署后,您应该在以下位置找到您的班级 -

/var/lib/tomcat6/webapps/wipd/WEB-INF/classes/a/b/c/WipdServlet.class

于 2012-09-24T23:24:42.863 回答