Mercurial Hosting > luan
comparison src/org/eclipse/jetty/server/HttpOutput.java @ 972:5ee36654b383
simplify AbstractHttpConnection
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Sat, 15 Oct 2016 22:42:05 -0600 |
| parents | 3428c60d7cfc |
| children | dbecd7faa1f5 |
comparison
equal
deleted
inserted
replaced
| 971:f997df37cec1 | 972:5ee36654b383 |
|---|---|
| 39 * to a {@link AbstractGenerator}. The class is designed to be reused | 39 * to a {@link AbstractGenerator}. The class is designed to be reused |
| 40 * and can be reopened after a close. | 40 * and can be reopened after a close. |
| 41 */ | 41 */ |
| 42 public class HttpOutput extends ServletOutputStream | 42 public class HttpOutput extends ServletOutputStream |
| 43 { | 43 { |
| 44 protected final AbstractHttpConnection _connection; | 44 protected final AbstractHttpConnection _connection; |
| 45 protected final AbstractGenerator _generator; | 45 protected final AbstractGenerator _generator; |
| 46 private boolean _closed; | 46 private boolean _closed; |
| 47 private ByteArrayBuffer _onebyte; | 47 private ByteArrayBuffer _onebyte; |
| 48 | 48 |
| 49 // These are held here for reuse by Writer | 49 // These are held here for reuse by Writer |
| 50 String _characterEncoding; | 50 String _characterEncoding; |
| 51 Writer _converter; | 51 Writer _converter; |
| 52 char[] _chars; | 52 char[] _chars; |
| 53 ByteArrayOutputStream2 _bytes; | 53 ByteArrayOutputStream2 _bytes; |
| 54 | 54 |
| 55 /* ------------------------------------------------------------ */ | 55 /* ------------------------------------------------------------ */ |
| 56 public HttpOutput(AbstractHttpConnection connection) | 56 public HttpOutput(AbstractHttpConnection connection) |
| 57 { | 57 { |
| 58 _connection=connection; | 58 _connection = connection; |
| 59 _generator=(AbstractGenerator)connection.getGenerator(); | 59 _generator = connection._generator; |
| 60 } | 60 } |
| 61 | 61 |
| 62 /* ------------------------------------------------------------ */ | 62 /* ------------------------------------------------------------ */ |
| 63 public int getMaxIdleTime() | 63 public int getMaxIdleTime() |
| 64 { | 64 { |
| 65 return _connection.getMaxIdleTime(); | 65 return _connection.getMaxIdleTime(); |
| 66 } | 66 } |
| 67 | 67 |
| 68 /* ------------------------------------------------------------ */ | 68 /* ------------------------------------------------------------ */ |
| 69 public boolean isWritten() | 69 public boolean isWritten() |
| 70 { | 70 { |
| 71 return _generator.getContentWritten()>0; | 71 return _generator.getContentWritten()>0; |
| 72 } | 72 } |
| 73 | 73 |
| 74 /* ------------------------------------------------------------ */ | 74 /* ------------------------------------------------------------ */ |
| 75 /* | 75 /* |
| 76 * @see java.io.OutputStream#close() | 76 * @see java.io.OutputStream#close() |
| 77 */ | 77 */ |
| 78 @Override | 78 @Override |
| 79 public void close() throws IOException | 79 public void close() throws IOException |
| 80 { | 80 { |
| 81 _closed=true; | 81 _closed=true; |
| 82 } | 82 } |
| 83 | 83 |
| 84 /* ------------------------------------------------------------ */ | 84 /* ------------------------------------------------------------ */ |
| 85 public boolean isClosed() | 85 public boolean isClosed() |
| 86 { | 86 { |
| 87 return _closed; | 87 return _closed; |
| 88 } | 88 } |
| 89 | 89 |
| 90 /* ------------------------------------------------------------ */ | 90 /* ------------------------------------------------------------ */ |
| 91 public void reopen() | 91 public void reopen() |
| 92 { | 92 { |
| 93 _closed=false; | 93 _closed=false; |
| 94 } | 94 } |
| 95 | 95 |
| 96 /* ------------------------------------------------------------ */ | 96 /* ------------------------------------------------------------ */ |
| 97 @Override | 97 @Override |
| 98 public void flush() throws IOException | 98 public void flush() throws IOException |
| 99 { | 99 { |
| 100 _generator.flush(getMaxIdleTime()); | 100 _generator.flush(getMaxIdleTime()); |
| 101 } | 101 } |
| 102 | 102 |
| 103 /* ------------------------------------------------------------ */ | 103 /* ------------------------------------------------------------ */ |
| 104 @Override | 104 @Override |
| 105 public void write(byte[] b, int off, int len) throws IOException | 105 public void write(byte[] b, int off, int len) throws IOException |
| 106 { | 106 { |
| 107 write(new ByteArrayBuffer(b,off,len)); | 107 write(new ByteArrayBuffer(b,off,len)); |
| 108 } | 108 } |
| 109 | 109 |
| 110 /* ------------------------------------------------------------ */ | 110 /* ------------------------------------------------------------ */ |
| 111 /* | 111 /* |
| 112 * @see java.io.OutputStream#write(byte[]) | 112 * @see java.io.OutputStream#write(byte[]) |
| 113 */ | 113 */ |
| 114 @Override | 114 @Override |
| 115 public void write(byte[] b) throws IOException | 115 public void write(byte[] b) throws IOException |
| 116 { | 116 { |
| 117 write(new ByteArrayBuffer(b)); | 117 write(new ByteArrayBuffer(b)); |
| 118 } | 118 } |
| 119 | 119 |
| 120 | 120 |
| 121 /* ------------------------------------------------------------ */ | 121 /* ------------------------------------------------------------ */ |
| 122 /* | 122 /* |
| 123 * @see java.io.OutputStream#write(int) | 123 * @see java.io.OutputStream#write(int) |
| 124 */ | 124 */ |
| 125 @Override | 125 @Override |
| 126 public void write(int b) throws IOException | 126 public void write(int b) throws IOException |
| 127 { | 127 { |
| 128 if (_onebyte==null) | 128 if (_onebyte==null) |
| 129 _onebyte=new ByteArrayBuffer(1); | 129 _onebyte=new ByteArrayBuffer(1); |
| 130 else | 130 else |
| 131 _onebyte.clear(); | 131 _onebyte.clear(); |
| 132 _onebyte.put((byte)b); | 132 _onebyte.put((byte)b); |
| 133 write(_onebyte); | 133 write(_onebyte); |
| 134 } | 134 } |
| 135 | 135 |
| 136 /* ------------------------------------------------------------ */ | 136 /* ------------------------------------------------------------ */ |
| 137 private void write(Buffer buffer) throws IOException | 137 private void write(Buffer buffer) throws IOException |
| 138 { | 138 { |
| 139 if (_closed) | 139 if (_closed) |
| 140 throw new IOException("Closed"); | 140 throw new IOException("Closed"); |
| 141 if (!_generator.isOpen()) | 141 if (!_generator.isOpen()) |
| 142 throw new EofException(); | 142 throw new EofException(); |
| 143 | 143 |
| 144 // Block until we can add _content. | 144 // Block until we can add _content. |
| 145 while (_generator.isBufferFull()) | 145 while (_generator.isBufferFull()) |
| 146 { | 146 { |
| 147 _generator.blockForOutput(getMaxIdleTime()); | 147 _generator.blockForOutput(getMaxIdleTime()); |
| 148 if (_closed) | 148 if (_closed) |
| 149 throw new IOException("Closed"); | 149 throw new IOException("Closed"); |
| 150 if (!_generator.isOpen()) | 150 if (!_generator.isOpen()) |
| 151 throw new EofException(); | 151 throw new EofException(); |
| 152 } | 152 } |
| 153 | 153 |
| 154 // Add the _content | 154 // Add the _content |
| 155 _generator.addContent(buffer, Generator.MORE); | 155 _generator.addContent(buffer, Generator.MORE); |
| 156 | 156 |
| 157 // Have to flush and complete headers? | 157 // Have to flush and complete headers? |
| 158 | 158 |
| 159 if (_generator.isAllContentWritten()) | 159 if (_generator.isAllContentWritten()) |
| 160 { | 160 { |
| 161 flush(); | 161 flush(); |
| 162 close(); | 162 close(); |
| 163 } | 163 } |
| 164 else if (_generator.isBufferFull()) | 164 else if (_generator.isBufferFull()) |
| 165 _connection.commitResponse(Generator.MORE); | 165 _connection.commitResponse(Generator.MORE); |
| 166 | 166 |
| 167 // Block until our buffer is free | 167 // Block until our buffer is free |
| 168 while (buffer.length() > 0 && _generator.isOpen()) | 168 while (buffer.length() > 0 && _generator.isOpen()) |
| 169 { | 169 { |
| 170 _generator.blockForOutput(getMaxIdleTime()); | 170 _generator.blockForOutput(getMaxIdleTime()); |
| 171 } | 171 } |
| 172 } | 172 } |
| 173 | 173 |
| 174 /* ------------------------------------------------------------ */ | 174 /* ------------------------------------------------------------ */ |
| 175 /* | 175 /* |
| 176 * @see javax.servlet.ServletOutputStream#print(java.lang.String) | 176 * @see javax.servlet.ServletOutputStream#print(java.lang.String) |
| 177 */ | 177 */ |
| 178 @Override | 178 @Override |
| 179 public void print(String s) throws IOException | 179 public void print(String s) throws IOException |
| 180 { | 180 { |
| 181 write(s.getBytes()); | 181 write(s.getBytes()); |
| 182 } | 182 } |
| 183 } | 183 } |
