L'obtention d'Exception java.lang.IllegalStateException: getOutputStream() a déjà été appelée pour cette réponse
Je suis nouveau sur jsp,lorsque j'essaie d'appeler une page jsp par certains paramètres nommé cId et le mot de passe,j'obtiens cette erreur,Le code que j'ai essayé est donnée ci-dessous,j'ai déjà vécu la même erreur qui a été vu par googler,mais encore, je reçois le même problème.
Le code est:
<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>
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas essayer et de le faire à l'intérieur d'une JSP. Les JSP ont déjà obtenu un flux de sortie de l'écrire de la sortie. Vous avez besoin d'utiliser une servlet pour retourner votre XML.
Lorsque vous appelez la réponse.getOutputStream, il est en conflit avec le fait que les JSP (qui sera compilé dans un servlet) déjà obtenu un flux de sortie. C'est pourquoi il en est résulté une IllegalStateException.
Jette:
IllegalStateException
- si legetWriter
méthode a été appelée sur cette réponse .Cela signifie que vous pouvez appeler
getWriter()
ougetOutputStream()
méthodes.Maintenant en JSP (et, éventuellement, dans compilé servlet), il y a un implicite variable définie appelé
out
. Ce n'est rien mais une instance dePrintWriter
classe. Cela signifie que sur l'objet de la réponse,getWriter()
est déjà appelé et, partant, sur l'appel degetOutputStream()
vous obtenezIllegalStateException
Maintenant que la solution à ce problème, comme certains l'ont souligné, mettre ce code dans un servlet où vous avez le plein contrôle et l'utilisation de l'outputstream la façon dont vous le souhaitez.
C'est une JSP avec scriplet qui est converti en une Servlet fichier. Vous n'avez pas besoin d'appeler explicitement l'objet de réponse. Si vous avez besoin de voir comment un compilé JSP ressemble quand son déployée , de recherche (Google) comment faire pour trouver la classe compilée(Servlet générée à partir de la JSP) sur le serveur. Puisque vous avez déjà appelé la méthode de la réponse à un deuxième appel est Illégal sur l'objet de la réponse