0

サーブレットを開発しようとしていますが、なぜこれが機能しないのか本当に理解できません。

コードは次のとおりです。

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>

サーブレットは次の場所にあります。

/var/lib/tomcat6/webapps/wipd/

この作業では、VM で実行されている Debian にインストールされた Tomcat6 の下でサーブレットを実行する必要があります。現在、Gentoo で javac を実行した後、Debian にファイル .class を配置して、servlet-api を使用して Gentoo で作業しています。しかし、私がサーフィンした場合:

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

私は得る:

javax.servlet.ServletException: ラッパーは、サーブレット クラス 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

サーブレットを何らかのパッケージに含める必要があります。次の変更を行います -

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 に答える
0

例外から、クラスがパッケージに含まれていないことがわかります。あなたと同様の問題を説明しているこのリンクを確認してください。

于 2012-09-24T23:03:30.310 に答える
0

私も同じ問題に直面しました。実際、いくつかの変更を加えた後にすでに機能していた私のプログラムの1つが、このエラーを示しました。変更を元に戻すために元に戻すことさえしましたが、それでも私に起こりました。最後に、私のシナリオでこれに対する有効な解決策を見つけました。

単純:

1.プロジェクトをきれいにして、もう一度実行してみてください。同じエラーが表示され、コードに問題がないことが確実な場合は、

2.「プロジェクト」メニューの「自動ビルド」メニュー項目を有効にして、プロジェクトのクリーンアップを試みます。今回はうまくいきました。

これは、いくつかの変更を加えて実行すると、Eclipse がバックグラウンドでもいくつかの変更を行うためだと聞いています。そのため、変更を元に戻したとしても、Eclipse はバックグラウンドで行った変更を元に戻していない可能性があります。したがって、これらの 2 つの手順を実行すると、ユーザーの変更と背景の変更が一致することが確認されます。

それがあなたの問題にも役立ち、解決することを願っています。

于 2014-06-19T09:05:08.683 に答える