我是jsp的新手,当我尝试通过一些名为cId和passWord的参数调用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>
答案 0 :(得分:2)
引发:IllegalStateException
- 如果此响应已调用getWriter
方法。
这意味着您可以调用getWriter()
或getOutputStream()
方法。
现在在JSP(,最终在编译的servlet 中),有一个名为out
的隐式变量。这只是PrintWriter
类的一个实例。这意味着在响应对象上,getWriter()
已被调用,因此在调用getOutputStream()
时,您会获得IllegalStateException
现在正如某些人所指出的那样解决这个问题,将此代码移动到一个servlet中,在那里你可以完全控制并按照你想要的方式使用输出流。
答案 1 :(得分:1)
这是一个带有scriplet的JSP,它被转换为Servlet文件。您不需要显式调用响应对象。如果您需要查看编译后的JSP在部署时的样子,搜索(Google)如何在服务器上查找已编译的类(由JSP生成的Servlet)。由于您已经在响应上调用了方法,因此第二次调用在响应对象上是非法的
答案 2 :(得分:0)
您不应该尝试在JSP中执行此操作。 JSP已经获得了输出流来写入它的输出。您需要使用servlet来返回XML。
当你调用response.getOutputStream时,它与JSP(将被编译成servlet)已经获得输出流的事实相冲突。这就是导致IllegalStateException的原因。