最近在做MIS接口,发现有这这样的问题:
getOutputStream() has already been called for this response异常
到网上查了一下,解释是这样的:
在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),没有妥善处理好的原因。具体的原因就是在tomcat中jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后有一段这样的代码
finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和
response.getOutputStream()相冲突的!所以会出现以上这个异常。
解决方法:在使用完输出流以后调用以下两行代码即可:
out.clear();
out = pageContext.pushBody();
以下是我自己做的一个例子:
<%
//MIS系统接收的数据
BufferedReader freader = new BufferedReader(new InputStreamReader((InputStream)request.getInputStream(), "UTF-8"));
StringBuffer sb1 = new StringBuffer(1024);
String str;
while((str = freader.readLine()) != null) {
sb1.append(str);
sb1.append("\n");
}
System.out.println("MIS系统接收的数据:" + sb1.toString());
//MIS系统返回的数据
String filePath = request.getSession().getServletContext().getRealPath("/");
String xmlFilePath = filePath + XmlConstants.XML_IMPORT_OUTPUT;
String content = XmlUtil.getDoucumentByXml(xmlFilePath);
response.getOutputStream().write(content.getBytes(XmlConstants.UTF_ENCODING));
out.clear();
out = pageContext.pushBody();
%>
加上以后就OK了,虽然这方面做的比较少,但是把问题解决了心里还是很爽的!
分享到:
相关推荐
NULL 博文链接:https://javal.iteye.com/blog/1993903
1.在tomcat6.0下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat6.0下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),没有...
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
验证码出现getOutputStream() has already been called for this response错误解决
解决了getOutputStream() has already been called for this response. 并将产生验证码的逻辑从JSP页面中分离出来,单独写了一个类 便于重用。
NULL 博文链接:https://nethub2.iteye.com/blog/2023937
Returns a boolean indicating whether the named response header has already been set. contextDestroyed(ServletContextEvent) - Method in interface javax.servlet.ServletContextListener Notification ...
* This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server ...
this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { try { MsgBean bean = new MsgBean(); bean.setType("请求下线"); bean.setSource(ClientFrame...
BufferedWriter wrbuf = new BufferedWriter(new OutputStreamWriter(s1.getOutputStream())); wrbuf.write("false\n"); wrbuf.flush(); }else{ Socket s2 = clients.get(str[0]); ...
servlet的response可以对返回的内容和格式进行一些设置。
outputS = new ObjectOutputStream(connection.getOutputStream()); beConnected = true; } catch (IOException e) { System.out.println("无法获取连接的输入输出流"); } } ...
if ((su.waitFor() != 0) || !device.canRead() || !device.canWrite()) { throw new SecurityException(); } } catch (Exception e) { e.printStackTrace(); throw new ...
PrintStream ps = new PrintStream(s.getOutputStream()); /* 产生发消息的时刻 */ Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); /* 向客户端发消息,消息...
String s=this.jTextField3.getText().trim(); sendData(s); } } private void listenClient(int port){//侦听 try{ if(jButton1.getText().trim().equals("侦听")){ server = new ServerSocket(port); ...
dataOut = new ObjectOutputStream(socket.getOutputStream()); listener = new Thread(this); listener.start(); } catch (IOException ioException) { ioException.printStackTrace(); } } } public ...
for (int i = 0; i; i++){ // 设置压缩文件入口entry,为被读取的文件创建压缩条目 File tempFile = new File(fileArray[i].toString()); String rootStr = file.getPath(); String entryStr = ...
heads是excel表头,datalist是数据public void createExcelStream(HttpServletResponse response,String filename,String[] heads,List[]> datalist){ try{ OutputStream os = response.getOutputStream();...
this.client=c; } public void run(){ try{ BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); PrintWriter out=new PrintWriter(client.getOutputStream...