1

まず最初に、この質問が既にされている場合は申し訳ありません。同様の質問をたくさん見ましたが、どれも有用な回答を提供してくれませんでした。

Struts を使用しており、画像を img タグにダウンロードしたいと考えています。私はこれをアプリケーションの他の場所で使用し、正常に動作しますが、そのうちの 1 つでアクションが IllegalStateException をスローします。これはログインページで、特別なことは何もありません。これは、例外がスローされるアクションのコードです。

public String mappingExecute(ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    OutputStream out = response.getOutputStream();
    String idDocumento = request.getParameter("idDocumento");
    FileResponse fResponse = WebConfig.getFileManager().downloadFile(idDocumento);

    byte[] buffer = fResponse.getFileByteArray();
    out.write(buffer);
    out.close();
    return null;

}

これは例外です:

java.lang.IllegalStateException: getWriter() has already been called for this response
at org.apache.catalina.connector.Response.getOutputStream(Response.java:580)
at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:183)
at net.bilbao.dxd.web.SrvDownloadFile.mappingExecute(SrvDownloadFile.java:22)
at net.bilbao.dxd.web.SrvAction.execute(SrvAction.java:56)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)

(SrvDownloadFile は私のアクション クラスの名前です。例外は でスローされますresponse.getOutputStream())

奇妙な部分は次のとおりです。ログオンすると、次の jsp が同じアクションを呼び出し、画像が正常に表示されます。ログインページに戻ると、画像も正常に表示されます! この例外は、ログイン ページに初めてアクセスしたときにのみスローされます。getWriter()アクションが呼び出される前に、どこで呼び出されたかを確認するためにできることはありますか?

私の悪い英語で申し訳ありませんが、事前に感謝します。

4

1 に答える 1

0

ログインアクションで応答を転送している可能性があり、コントロールが行に到達するまでに応答が既に送信されており、それが例外が伝えていることです。他のインスタンスでは、このログイン アクションが呼び出されず、期待どおりに動作する場合があります。

于 2013-09-03T19:55:24.803 に答える