0

次の形式で Ajax リクエストを送信しています

xmlhttp.open("POST","http://172.16.xx.xx:8080/ajax/validate",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(send); //where send is a string retrieved from textarea

これは私のサーブレットコードです

ObjectInputStream in =new ObjectInputStream(request.getInputStream()); 
String inputxmlstring=(String) in.readObject();

次の例外が発生しています

java.io.StreamCorruptedException: invalid stream header: 3C3F786D

コードの問題は何ですか?リクエスト ヘッダーのコンテンツ タイプに何か問題がありますか?

編集1

             BufferedInputStream in =new BufferedInputStream(req.getInputStream());
             byte[] buf=new byte[req.getContentLength()];
             while(in.available()>0)
             {
              in.read(buf);
             }
             String inputxmlstring=new String(buf);
             System.out.println(inputxmlstring);

このコードをサーブレットに使用すると、次のエラーが発生します

14:13:27,828 INFO  [STDOUT] [Fatal Error] :1:1: Content is not allowed in prolog
.
14:13:27,843 INFO  [STDOUT] org.xml.sax.SAXParseException: Content is not allowe
d in prolog.


EDIT 2
このコードを使用して解析します。String inputxmlstringは Edit1 で使用されています。

DocumentBuilderFactory fty1 = DocumentBuilderFactory.newInstance();
fty1.setNamespaceAware(true);
DocumentBuilder builder1 = fty1.newDocumentBuilder();
ByteArrayInputStream bais1 = new ByteArrayInputStream(inputxmlstring.getBytes());
Document xmldoc1=builder1.parse(bais1);
4

1 に答える 1

1

もう一方の端が ObjectOutputStream を使用して書き込まれたことがわかっている場合にのみ、ObjectInputStream を使用する必要があります。

クライアントがObjectOutputStream を使用すると、オブジェクト ストリームであることを示す特殊なバイトが書き込まれます。これらのバイトが存在しない場合、ObjectInputStream は StreamCorruptedException をスローします。

あなたの場合、XMLHttpRequest は ObjectOutputStream を使用して送信していないため、request.getInputStream() を使用して読み取る必要があります。

于 2012-05-25T07:41:49.830 に答える