Хочу создать отчет( в pdf) с помощью JasperReports из web-приложения(struts). Делаю согласно книге "JasperReports for Java Developers" Action-класс Код | public class QuestionnaireReportAction extends BaseAction {
@Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Collection<QuestionnairePerson> persons = personManager.listPersons();
ServletOutputStream servletOutputStream = response.getOutputStream(); InputStream reportStream = getServlet().getServletConfig().getServletContext().getResourceAsStream("report.jasper"); response.setContentType("application/pdf"); JRDataSource dataSource = new JRBeanCollectionDataSource(persons);
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), dataSource);
servletOutputStream.flush(); servletOutputStream.close();
return mapping.getInputForward(); } }
|
struts-config.xml Код | <action input="/WEB-INF/pages/dm/task/ViewTask.jsp" name="TaskActionForm" scope="request" path="/dm/filled/callReport" type="ru.izhnet.web.action.dm.filled.QuestionnaireReportAction"/>
|
код JSP, из которого вызываю action Код | <html:form action="/dm/filled/callReport?task_id=${task.key}" target="_new" > <html:submit> <bean:message key="dm.questionnaire.results"/> </html:submit> </html:form>
|
Создается пустой pdf-файл и вываливается вот такая ошибка. Код | ApplicationDispatcher[/Owl] PWC1231: Servlet.service() for servlet jsp threw exception java.lang.IllegalStateException: PWC3991: getOutputStream() has already been called for this response at org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:700) at org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:210) at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:135) at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:135) at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:171) at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:164) at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:221) at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:157) at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:108) at org.apache.jsp.WEB_002dINF.pages.dm.task.ViewTask_jsp._jspService(ViewTask_jsp.java from :267) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:853) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:660) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:578) at org.apache.struts.action.RequestProcessor.doInclude(RequestProcessor.java:1116) at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:260) at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:738) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at ru.izhnet.web.filter.SelectLanguageFilter.doFilter(SelectLanguageFilter.java:30) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
|
Искал в гугле. Как я понял, такая ошибка возникает если в выходной поток response.getOutputStream() пытаются одновременно писаться pdf-файл и JSP. Только что с этим делать, мне не понятно.
|