5

Javaアプリケーションからサーブレットを呼び出したい。問題は、呼び出しがサーブレットに到達していないように見えることです。エラーは発生しませんが、サーブレットの最初の出力「doPost」に到達しません。WebブラウザでURLを開くと、もちろんGETがサポートされていないなどのエラーが表示されますが、少なくとも、何かが発生していることがわかります。

私は次のコードを使用します(ActionPackageクラスはパラメーターのVectorのみを保持し、Serializableです):

Javaアプリケーション:

    ActionPackage p = new ActionPackage();
    p.addParameter("TEST", "VALUE");

    System.out.println(p);

    URL gwtServlet = null;
    try {
        gwtServlet = new URL("http://localhost:8888/app/PushServlet");
        HttpURLConnection servletConnection = (HttpURLConnection) gwtServlet.openConnection();
        servletConnection.setRequestMethod("POST");
        servletConnection.setDoOutput(true);

        ObjectOutputStream objOut = new ObjectOutputStream(servletConnection.getOutputStream());
        objOut.writeObject(p);
        objOut.flush();
        objOut.close();

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

サーブレット:

public class PushServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("doPost");
    ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());

    ActionPackage p = null;
    try {
        p = (ActionPackage) objIn.readObject();

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    System.out.println("Servlet received p: "+p);       
}

}

何がうまくいかなかったのか?

ありがとう。

4

3 に答える 3

7

URLConnectiongetいずれかのメソッドを呼び出すたびに、遅延実行されるだけです。

コードに以下を追加して、実際にHTTPリクエストを実行し、サーブレットの応答本文を取得します。

InputStream response = servletConnection.getInputStream();

参照:

于 2010-12-03T21:10:18.543 に答える
0

doPostの本体全体をtry/catchブロックでラップしてみてください。

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        System.out.println("doPost");
        ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());
        ActionPackage p = null;
        p = (ActionPackage) objIn.readObject();
        System.out.println("Servlet received p: "+p);       
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
}

次に、サーブレットの出力ログファイルまたはウィンドウをもう一度見て、役立つ可能性のある新しい例外を探します。

于 2010-12-03T21:11:05.070 に答える
0
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        System.out.println("doPost");
        ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());
        ActionPackage p = null;
        p = (ActionPackage) objIn.readObject();
        System.out.println("Servlet rece p: "+p);       
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
}
于 2014-07-30T09:52:45.253 に答える