0

cId と passWord という名前のパラメーターを使用して JSP ページを呼び出そうとすると、jsp を初めて使用します。このエラーが発生します。試したコードを以下に示します。グーグルですが、それでも同じ問題が発生しています。コードは次のとおりです。

<body>
        <%

        String cidMessage = "cID";
        String passEncrypted = "passWord";
        System.out.println("CID ISSSSSSSSSSSS"+cId);
        if ((cId.equals(cidMessage)) && (passWord.equals(passEncrypted))) {
                        System.out.println("Validation Correct"+cId);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            String time = sdf.format(date.getTime());
            String xmlOutput = "<smsreport>"
                    + "<date>" + time + "</date>"
                    + "<result>" + "SUCESS" + "</result>"
                    + "<msgid>" + currentTimeMillis() + "</msgid>"
                    + "<msgparts>" + "1" + "</msgparts>"
                    + "</smsreport>";

            try {
                byte[] contents = xmlOutput.getBytes();
                response.setContentType("text/xml");
                response.setContentLength(contents.length);
                response.getOutputStream().write(contents);
                response.getOutputStream().flush();
            } catch (Exception e) {
                throw new ServletException(e);
            }
        } else {
                           System.out.println("Validation Wrong"+cId);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            String time = sdf.format(date.getTime());
            String xmlOutput = "<smsreport>"
                    + "<date>" + time + "</date>"
                    + "<result>ERROR</result>"
                    + "<msgid>" + "ErrorCode" + "</msgid>"
                    + "<msgparts>" + "ErrorMessage" + "</msgparts>"
                    + "</smsreport>";

            try {
                byte[] contents = xmlOutput.getBytes();
                response.setContentType("text/xml");
                response.setContentLength(contents.length);
                response.getOutputStream().write(contents);
                response.getOutputStream().flush();
            } catch (Exception e) {
                throw new ServletException(e);
            }

        }
    %>
</body>
4

3 に答える 3

2
  • getOutputStream()メソッドのドキュメントを確認すると、次のように記載されています

例外: IllegalStateException-getWriterこのレスポンスでメソッドが呼び出された場合。

  • getWriter()これは、またはgetOutputStream()メソッドのいずれかを呼び出すことができることを意味します。

  • 現在、JSP (および最終的にはコンパイル済みサーブレット) には、 という暗黙の変数が定義されてoutいます。これはPrintWriterクラスのインスタンスに他なりません。これは、応答オブジェクトでgetWriter()既に呼び出されているため、呼び出しgetOutputStream()時に取得することを意味しますIllegalStateException

  • この問題の解決策として、一部の人が指摘しているように、このコードを完全に制御できるサーブレットに移動し、必要な方法で出力ストリームを使用してください。

于 2013-02-19T06:58:51.480 に答える
1

これは、サーブレットファイルに変換されるスクリプトレット付きのJSPです。応答オブジェクトを明示的に呼び出す必要はありません。コンパイルされたJSPがデプロイされたときにどのように見えるかを確認する必要がある場合は、サーバー上でコンパイルされたクラス(JSPから生成されたサーブレット)を探す方法を検索(Google)します。応答でメソッドをすでに呼び出しているため、2番目の呼び出しは応答オブジェクトでは無効です

于 2013-02-19T06:41:04.667 に答える
0

You shouldn't try and do this inside a JSP. The JSP will already have obtained an output stream to write it's output. You need to use a servlet to return your XML.

When you call response.getOutputStream, it is conflicting with the fact that the JSP (which will be compiled into a servlet) already obtained an output stream. This is why it is resulting in the IllegalStateException.

于 2013-02-19T06:35:24.247 に答える