0

私は、tomcat6 上のサーブレットが jsp Web ページを提供することによって別のマシンからの入力を処理するソリューションを構築しています。また、同じサーブレットが同じマシン上のアプレットと通信して、いくつかの結果を表示し、いくつかのタスクを実行したいと考えています。

URLConnection を使用してアプレットからサーブレットに接続できますが、サーブレットからメッセージを受信すると、アプレットから「無効なストリーム ヘッダー」という例外メッセージが表示されます。

何か案は?

編集: エラー メッセージ:

java.io.StreamCorruptedException: invalid stream header: 0A0A0A3C at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at applet.viewApplet.onSendData(viewApplet.java:126)

アプレット コード:

 private URLConnection getServletConnection()
        throws MalformedURLException, IOException {

    // Open the servlet connection
    URL urlServlet = new URL("http://localhost:8080/Servlet");
    connection = urlServlet.openConnection();

    // Config
    connection.setDoInput(true);
    connection.setDoOutput(true);

    connection.setUseCaches (false);
    connection.setDefaultUseCaches (false);

    connection.setRequestProperty(
            "Content-Type",
            "application/x-java-serialized-object");

    return connection;
}

private void onSendData() {
    try {
        // get input data for sending
        String input = "Applet string heading for servlet";

        // send data to the servlet
        connection = getServletConnection();
        OutputStream outstream = connection.getOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(outstream);
        oos.writeObject(input);
        oos.flush();
        oos.close()

        // receive result from servlet
        InputStream instr = connection.getInputStream();
        ObjectInputStream inputFromServlet = new ObjectInputStream(instr);
        String result = (String) inputFromServlet.readObject();
        inputFromServlet.close();
        instr.close();

        // show result
        textField.setText(result);

    } catch (java.net.MalformedURLException mue) {
        textField.setText("Invalid serlvetUrl, error: " + mue.getMessage());
    } catch (java.io.IOException ioe) {
        textField.setText("Couldn't open a URLConnection, error: " + ioe.getMessage());
    } catch (Exception e) {
        textField.setText("Exception caught, error: " + e.getMessage());
    }
}

サーブレット コード:

public class Servlet extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=ISO-8859-1");
    PrintWriter out = response.getWriter();
    String defect = request.getParameter("defect").toString();

    try {
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet at " + request.getContextPath() + "</h1>");
        out.println("<p>Defect: " + defect + "</p>");
        out.println("</body>");
        out.println("</html>");
    } finally {
        out.close();
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    try {
        response.setContentType("application/x-java-serialized-object");

        InputStream in = request.getInputStream();
        ObjectInputStream inputFromApplet = new ObjectInputStream(in);

        String servletText = "Text from Servlet";

        // echo it to the applet
        OutputStream outstr = response.getOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(outstr);
        oos.writeObject(servletText);
        oos.flush();
        oos.close();

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

    processRequest(request, response);
}
4

1 に答える 1

2

これは、サーブレットのテキストベースの応答本文を、まったくシリアライズされていないときに使用してデシリアライズしようとしており、これには a をObjectInputStream使用する必要があるReaderためです。

簡単に言うと、を使用して HTTP リクエストを起動して処理する方法はURLConnection? .

于 2010-10-18T12:25:37.130 に答える