在Servlet编程中 经常会写
response.setContentType("text/html");
PrintWriter out = response.getWriter();
获取字符输出流 这里 response对象是org.apache.catalina.connector.ResponseFacade
out是org.apache.catalina.connector.CoyoteWriter
println方法如下:
@Override
public void println(String s) {
print(s);
println();
}
调用链如下
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:543)
at org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:174)
at org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:184)
at org.apache.catalina.connector.CoyoteWriter.print(CoyoteWriter.java:242)
at org.apache.catalina.connector.CoyoteWriter.println(CoyoteWriter.java:309)
at SessionExample.doGet(SessionExample.java:55)
会将字符串写入OutputBuffer中的CharChunk buffer
println()代码如下:
@Override
public void println() {
write(LINE_SEP);
}
写入换行符
执行完servlet的逻辑后
调用链如下
realWriteChars():474, OutputBuffer {org.apache.catalina.connector}
flushBuffer():464, CharChunk {org.apache.tomcat.util.buf}
close():291, OutputBuffer {org.apache.catalina.connector}
finishResponse():512, Response {org.apache.catalina.connector}
service():435, CoyoteAdapter {org.apache.catalina.connector}
org.apache.catalina.connector.OutputBuffer #realWriteChars
public void realWriteChars(char buf[], int off, int len)
throws IOException {
outputCharChunk.setChars(buf, off, len);
while (outputCharChunk.getLength() > 0) {
conv.convert(outputCharChunk, bb);
if (bb.getLength() ==