62,623
社区成员
发帖
与我相关
我的任务
分享<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
out.println("12121212");
out.clearBuffer();
out.close();
OutputStream os = response.getOutputStream();
os.write("this is a test".getBytes());
os.close();
%>
a test line<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
out.println("12121212");
out.clearBuffer();
out.close();
OutputStream os = response.getOutputStream();
os.write("this is a test".getBytes());
os.close();
%>
a test linethis is a testjava.io.IOException: Stream closed
at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:203)
at org.apache.jasper.runtime.JspWriterImpl.clearBuffer(JspWriterImpl.java:159)
at org.apache.jsp.test.test_jsp._jspService(test_jsp.java:59)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:619) OutputStream os = response.getOutputStream();
os.write("this is a test".getBytes());
os.close();
out.write("\r\n");
out.write("a test line\r\n");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer(); // 这个地方就是59行
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
} OutputStream os = response.getOutputStream();
os.write("this is a test".getBytes());
os.close();
// 前面的out已经close掉了。下面还有两个输出,见后面的说明
// 异常的产生点实际上在这一句上。
out.write("\r\n");
out.write("a test line\r\n");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
}// out.write仅是调用了这个方法
public void write(String s) throws IOException {
write(s, 0, s.length()); // 这个方法又调用了下面的一个
}
public void write(String s, int off, int len) throws IOException {
ensureOpen(); // 这一句正是抛出异常的关键,方法见下
// 以下省略
....
}
// 这个就是抛出异常的所在,在显式调用out.close(),而在close()中会将closed置为true
// 所以在接下来的out.write中就可抛异常
private void ensureOpen() throws IOException {
if(response == null || closed)
throw new IOException("Stream closed"); // 这句就是抛出异常点
else
return;
}<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
out.println("12121212");
out.flush();
out.clearBuffer();
out.close();
OutputStream os = response.getOutputStream();
os.write("this is a test".getBytes());
os.close();
%>
a test line<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
out.println("12121212");
//out.flush();
out.clearBuffer();
out.close();
OutputStream os = response.getOutputStream();
os.write("this is a test".getBytes());
os.close();
%>
a test line<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
out.println("12121212");
out.flush();
out.clearBuffer();
//out.close();
//OutputStream os = response.getOutputStream();
//os.write("this is a test".getBytes());
//os.close();
%>
a test line<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
out.println("12121212");
//out.flush();
out.clearBuffer();
//out.close();
//OutputStream os = response.getOutputStream();
//os.write("this is a test".getBytes());
//os.close();
%>
a test line<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
out.println("12121212");
out.flush();
out.clearBuffer();
out.close();
//OutputStream os = response.getOutputStream();
//os.write("this is a test".getBytes());
//os.close();
%>
a test lineprivate void initOut() throws IOException {
if(out == null)
out = response.getWriter();
}public void close() throws IOException {
if(response == null || closed)
return;
flush();
if(out != null)
out.close();
out = null; // 在关闭的同时设为null了。
closed = true;
}public PrintWriter getWriter() throws IOException {
if(usingOutputStream)
throw new IllegalStateException(sm.getString("coyoteResponse.getWriter.ise"));
setCharacterEncoding(getCharacterEncoding());
usingWriter = true;
outputBuffer.checkConverter();
if(writer == null)
writer = new CoyoteWriter(outputBuffer);
return writer;
}<%
Writer os = response.getWriter();
os.write(0x4e01);
os.close();
out.println("12121212");
%>private void ensureOpen() throws IOException {
if(response == null || closed)
throw new IOException("Stream closed");
else
return;
}