Je m arriver java.lang.IllegalStateException: getOutputStream() a déjà été appelée pour cette réponse d'Exception
java.lang.IllegalStateException: getOutputStream() a déjà été appelée pour cette réponse
Salut, je suis arriver exception ci-dessus, tandis que m tentez d'ouvrir un fichier pdf sur mon code java
Voici mon code Java. Je suis à l'aide de la bibliothèque IText pour créer un fichier pdf
@RequestMapping(value = "/pdf", method = RequestMethod.POST)
public String pdf(ActivitiesForm activitiesForm, Model model,
HttpSession session,HttpServletResponse response) throws InstanceNotFoundException, IOException,
DocumentException {
String PATH = "/home/space/workspace/trainning/Trainning/Performance.pdf";
//step 1
Document document = new Document();
//step 2
FileOutputStream fos = new FileOutputStream(PATH);
PdfWriter.getInstance(document,fos);
//step 3
document.open();
//step 4
PdfPTable table;
table = new PdfPTable(3);
table.setWidthPercentage(100);
PdfPCell cell;
cell = new PdfPCell(new Phrase("Roll No"));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Name"));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Performance"));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
Integer count = rollService.getRollCount();
Integer countpts = creditptsService.getPtsCount();
if (countpts != null) {
for (Integer i = 1; i <= count; i++) {
Roll roll = rollService.getRollNoById(Long.parseLong(i
.toString()));
List<Creditpts> creditpts = creditptsService.getRollById(roll
.getId());
Integer performance = 0;
if (creditpts == null) {
cell = new PdfPCell(new Phrase("" + roll.getRollno()));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
cell = new PdfPCell(new Phrase("" + roll.getStudentName()));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
cell = new PdfPCell(new Phrase("0"));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
} else {
Iterator<Creditpts> creIterator = creditpts.iterator();
while (creIterator.hasNext()) {
Creditpts creditpt = creIterator.next();
performance += creditpt.getCrdpts();
}
cell = new PdfPCell(new Phrase("" + roll.getRollno()));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
cell = new PdfPCell(new Phrase("" + roll.getStudentName()));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
cell = new PdfPCell(new Phrase("" + performance));
cell.setColspan(1);
//cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
}
}
}
document.add(table);
document.close();
fos.close();
FileInputStream baos = new FileInputStream(PATH);
//set some response headers
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setContentLength((int) new File(PATH).length());
OutputStream os = response.getOutputStream();
byte buffer[] = new byte[8192];
int bytesRead, i;
while ((bytesRead = baos.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.flush();
os.close();
}
J'ai coller mon pdf création et le code d'ouverture
ce que je fais mal ici m-je raté quelque chose...
Ici est plein de trace de pile:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:633)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:214)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:105)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:336)
at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:353)
at org.apache.jsp.jsp.activity_jsp._jspService(activity_jsp.java:402)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:229)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1265)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1016)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:965)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:859)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:883)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:792)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
- Pouvez-vous s'il vous plaît poster la complète
Exception
y compris la trace de la pile et aussi, marque dans le code où l'exception se produit? - exception se produit lorsque je clique sur le bouton de la demande du fichier pdf. Je peux encore voir la boîte de dialogue me demandant si vous souhaitez ouvrir ou enregistrer le document.
- Vous ne devez pas appeler
os.close()
sur unOutputStream
vous n'avez pas créé vous-même. Est-il utile? - non, il ne l'a pas aidé à m toujours l'exception
- Votre méthode renvoie
String
mais je ne vois aucune instruction de retour? Si vous retourner une Chaîne de caractères, elle sera utilisée pour résoudre un JSP vue. Vous devez écrire sur leOutputStream
vous-même ou pour renvoyer une JSP d'affichage, mais pas les deux. - Je m de retourner à la même jsp je suis en train de faire certaines autres choses qui doivent être retournées à la jsp ci-dessous code pdf.
- Problème avec cette ligne OutputStream os = réponse.getOutputStream(); Vous obtenez Outputstream de réponse. Maintenant, encore une fois au moment de la JSP rendu il vérifie Outputstream a déjà été utilisé ou non. si déjà utilisé Il jette Exception qui vous obtenez. Vous devez corriger votre code.
Vous devez vous connecter pour publier un commentaire.
Ajouter les éléments suivants à l'intérieur de la fin du try/catch pour éviter l'erreur qui s'affiche lorsque le moteur de JSP bouffées de chaleur la réponse via getWriter()
Ce n'est pas la meilleure pratique, mais ça évite les erreurs dans vos journaux.
Idéalement, nous devrions le faire dans le Servlet et pas dans les JSP. Si vous avez encore besoin d'elle dans JSP, suivez code ci-dessus pour vous débarrasser de l'erreur.
Vous gérer la demande complètement dans du code java, et puis le Printemps/contenant les fonctionnalités de coups de pied en essayant de gérer la même demande par le rendu de certaines de jsp. Vous avez besoin de désactiver cette fonctionnalité dans ce cas particulier.
Comme vous pouvez le voir dans la trace de la pile, les JSP les appels de réponse.getWriter(), mais le message d'exception dit qu'il y avait un appel à la réaction.getOutputStream() avant. Vous ne pouvez pas appeler les deux méthodes sur le même objet de réponse.
vérifier les liens ci-dessous:
https://stackoverflow.com/a/3540474/2333119
et
https://stackoverflow.com/a/14951581/2333119