Mercurial Hosting > luan
annotate src/org/eclipse/jetty/server/Response.java @ 976:0697c1219e70
remove IdleTimeoutHandler
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Sun, 16 Oct 2016 01:14:44 -0600 |
| parents | 5ee36654b383 |
| children | d35b0a3a7a4a |
| rev | line source |
|---|---|
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1 // |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
2 // ======================================================================== |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
3 // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
4 // ------------------------------------------------------------------------ |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
5 // All rights reserved. This program and the accompanying materials |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
6 // are made available under the terms of the Eclipse Public License v1.0 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
7 // and Apache License v2.0 which accompanies this distribution. |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
8 // |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
9 // The Eclipse Public License is available at |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
10 // http://www.eclipse.org/legal/epl-v10.html |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
11 // |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
12 // The Apache License v2.0 is available at |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
13 // http://www.opensource.org/licenses/apache2.0.php |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
14 // |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
15 // You may elect to redistribute this code under either of these licenses. |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
16 // ======================================================================== |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
17 // |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
18 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
19 package org.eclipse.jetty.server; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
20 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
21 import java.io.IOException; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
22 import java.io.PrintWriter; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
23 import java.util.Collection; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
24 import java.util.ArrayList; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
25 import java.util.Collections; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
26 import java.util.EnumSet; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
27 import java.util.Enumeration; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
28 import java.util.Locale; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
29 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
30 import javax.servlet.RequestDispatcher; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
31 import javax.servlet.ServletOutputStream; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
32 import javax.servlet.SessionTrackingMode; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
33 import javax.servlet.http.Cookie; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
34 import javax.servlet.http.HttpServletResponse; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
35 import javax.servlet.http.HttpSession; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
36 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
37 import org.eclipse.jetty.http.HttpCookie; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
38 import org.eclipse.jetty.http.HttpFields; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
39 import org.eclipse.jetty.http.HttpGenerator; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
40 import org.eclipse.jetty.http.HttpHeaderValues; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
41 import org.eclipse.jetty.http.HttpHeaders; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
42 import org.eclipse.jetty.http.HttpSchemes; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
43 import org.eclipse.jetty.http.HttpStatus; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
44 import org.eclipse.jetty.http.HttpURI; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
45 import org.eclipse.jetty.http.HttpVersions; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
46 import org.eclipse.jetty.http.MimeTypes; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
47 import org.eclipse.jetty.io.BufferCache.CachedBuffer; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
48 import org.eclipse.jetty.server.handler.ContextHandler; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
49 import org.eclipse.jetty.util.ByteArrayISO8859Writer; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
50 import org.eclipse.jetty.util.QuotedStringTokenizer; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
51 import org.eclipse.jetty.util.StringUtil; |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
52 import org.eclipse.jetty.util.URIUtil; |
|
820
8e9db0bbf4f9
remove org.eclipse.jetty.util.log and upgrade slf4j
Franklin Schmidt <fschmidt@gmail.com>
parents:
813
diff
changeset
|
53 import org.slf4j.Logger; |
|
8e9db0bbf4f9
remove org.eclipse.jetty.util.log and upgrade slf4j
Franklin Schmidt <fschmidt@gmail.com>
parents:
813
diff
changeset
|
54 import org.slf4j.LoggerFactory; |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
55 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
56 /** Response. |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
57 * <p> |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
58 * Implements {@link javax.servlet.http.HttpServletResponse} from the <code>javax.servlet.http</code> package. |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
59 * </p> |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
60 */ |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
61 public class Response implements HttpServletResponse |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
62 { |
|
820
8e9db0bbf4f9
remove org.eclipse.jetty.util.log and upgrade slf4j
Franklin Schmidt <fschmidt@gmail.com>
parents:
813
diff
changeset
|
63 private static final Logger LOG = LoggerFactory.getLogger(Response.class); |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
64 |
| 813 | 65 |
| 66 public static final int | |
| 67 NONE=0, | |
| 68 STREAM=1, | |
| 69 WRITER=2; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
70 |
| 813 | 71 /** |
| 72 * If a header name starts with this string, the header (stripped of the prefix) | |
| 73 * can be set during include using only {@link #setHeader(String, String)} or | |
| 74 * {@link #addHeader(String, String)}. | |
| 75 */ | |
| 76 public final static String SET_INCLUDE_HEADER_PREFIX = "org.eclipse.jetty.server.include."; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
77 |
| 813 | 78 /** |
| 79 * If this string is found within the comment of a cookie added with {@link #addCookie(Cookie)}, then the cookie | |
| 80 * will be set as HTTP ONLY. | |
| 81 */ | |
| 82 public final static String HTTP_ONLY_COMMENT="__HTTP_ONLY__"; | |
| 83 | |
| 84 | |
| 85 public static Response getResponse(HttpServletResponse response) | |
| 86 { | |
| 87 if (response instanceof Response) | |
| 88 return (Response)response; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
89 |
| 813 | 90 return AbstractHttpConnection.getCurrentConnection().getResponse(); |
| 91 } | |
| 92 | |
| 93 private final AbstractHttpConnection _connection; | |
| 94 private int _status=SC_OK; | |
| 95 private String _reason; | |
| 96 private Locale _locale; | |
| 97 private String _mimeType; | |
| 98 private CachedBuffer _cachedMimeType; | |
| 99 private String _characterEncoding; | |
| 100 private boolean _explicitEncoding; | |
| 101 private String _contentType; | |
| 102 private volatile int _outputState; | |
| 103 private PrintWriter _writer; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
104 |
| 813 | 105 /* ------------------------------------------------------------ */ |
| 106 /** | |
| 107 * | |
| 108 */ | |
| 109 public Response(AbstractHttpConnection connection) | |
| 110 { | |
| 111 _connection=connection; | |
| 112 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
113 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
114 |
| 813 | 115 /* ------------------------------------------------------------ */ |
| 116 /* | |
| 117 * @see javax.servlet.ServletResponse#reset() | |
| 118 */ | |
| 119 protected void recycle() | |
| 120 { | |
| 121 _status=SC_OK; | |
| 122 _reason=null; | |
| 123 _locale=null; | |
| 124 _mimeType=null; | |
| 125 _cachedMimeType=null; | |
| 126 _characterEncoding=null; | |
| 127 _explicitEncoding=false; | |
| 128 _contentType=null; | |
| 129 _writer=null; | |
| 130 _outputState=NONE; | |
| 131 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
132 |
| 813 | 133 /* ------------------------------------------------------------ */ |
| 134 /* | |
| 135 * @see javax.servlet.http.HttpServletResponse#addCookie(javax.servlet.http.Cookie) | |
| 136 */ | |
| 137 public void addCookie(HttpCookie cookie) | |
| 138 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
139 _connection._responseFields.addSetCookie(cookie); |
| 813 | 140 } |
| 141 | |
| 142 /* ------------------------------------------------------------ */ | |
| 143 /* | |
| 144 * @see javax.servlet.http.HttpServletResponse#addCookie(javax.servlet.http.Cookie) | |
| 145 */ | |
| 146 public void addCookie(Cookie cookie) | |
| 147 { | |
| 148 String comment=cookie.getComment(); | |
| 149 boolean http_only=false; | |
| 150 | |
| 151 if (comment!=null) | |
| 152 { | |
| 153 int i=comment.indexOf(HTTP_ONLY_COMMENT); | |
| 154 if (i>=0) | |
| 155 { | |
| 156 http_only=true; | |
| 157 comment=comment.replace(HTTP_ONLY_COMMENT,"").trim(); | |
| 158 if (comment.length()==0) | |
| 159 comment=null; | |
| 160 } | |
| 161 } | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
162 _connection._responseFields.addSetCookie(cookie.getName(), |
| 813 | 163 cookie.getValue(), |
| 164 cookie.getDomain(), | |
| 165 cookie.getPath(), | |
| 166 cookie.getMaxAge(), | |
| 167 comment, | |
| 168 cookie.getSecure(), | |
| 169 http_only || cookie.isHttpOnly(), | |
| 170 cookie.getVersion()); | |
| 171 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
172 |
| 813 | 173 /* ------------------------------------------------------------ */ |
| 174 /* | |
| 175 * @see javax.servlet.http.HttpServletResponse#containsHeader(java.lang.String) | |
| 176 */ | |
| 177 public boolean containsHeader(String name) | |
| 178 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
179 return _connection._responseFields.containsKey(name); |
| 813 | 180 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
181 |
| 813 | 182 /* ------------------------------------------------------------ */ |
| 183 /* | |
| 184 * @see javax.servlet.http.HttpServletResponse#encodeURL(java.lang.String) | |
| 185 */ | |
| 186 public String encodeURL(String url) | |
| 187 { | |
|
809
09d518d313b7
remove SessionManager
Franklin Schmidt <fschmidt@gmail.com>
parents:
802
diff
changeset
|
188 throw new UnsupportedOperationException(); |
| 813 | 189 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
190 |
| 813 | 191 /* ------------------------------------------------------------ */ |
| 192 /** | |
| 193 * @see javax.servlet.http.HttpServletResponse#encodeRedirectURL(java.lang.String) | |
| 194 */ | |
| 195 public String encodeRedirectURL(String url) | |
| 196 { | |
| 197 return encodeURL(url); | |
| 198 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
199 |
| 813 | 200 /* ------------------------------------------------------------ */ |
| 201 @Deprecated | |
| 202 public String encodeUrl(String url) | |
| 203 { | |
| 204 return encodeURL(url); | |
| 205 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
206 |
| 813 | 207 /* ------------------------------------------------------------ */ |
| 208 @Deprecated | |
| 209 public String encodeRedirectUrl(String url) | |
| 210 { | |
| 211 return encodeRedirectURL(url); | |
| 212 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
213 |
| 813 | 214 /* ------------------------------------------------------------ */ |
| 215 /* | |
| 216 * @see javax.servlet.http.HttpServletResponse#sendError(int, java.lang.String) | |
| 217 */ | |
| 218 public void sendError(int code, String message) throws IOException | |
| 219 { | |
| 220 if (isCommitted()) | |
| 221 LOG.warn("Committed before "+code+" "+message); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
222 |
| 813 | 223 resetBuffer(); |
| 224 _characterEncoding=null; | |
| 225 setHeader(HttpHeaders.EXPIRES,null); | |
| 226 setHeader(HttpHeaders.LAST_MODIFIED,null); | |
| 227 setHeader(HttpHeaders.CACHE_CONTROL,null); | |
| 228 setHeader(HttpHeaders.CONTENT_TYPE,null); | |
| 229 setHeader(HttpHeaders.CONTENT_LENGTH,null); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
230 |
| 813 | 231 _outputState=NONE; |
| 232 setStatus(code,message); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
233 |
| 813 | 234 if (message==null) |
| 235 message=HttpStatus.getMessage(code); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
236 |
| 813 | 237 // If we are allowed to have a body |
| 238 if (code!=SC_NO_CONTENT && | |
| 239 code!=SC_NOT_MODIFIED && | |
| 240 code!=SC_PARTIAL_CONTENT && | |
| 241 code>=SC_OK) | |
| 242 { | |
| 243 Request request = _connection.getRequest(); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
244 |
| 911 | 245 setHeader(HttpHeaders.CACHE_CONTROL, "must-revalidate,no-cache,no-store"); |
| 246 setContentType(MimeTypes.TEXT_HTML_8859_1); | |
| 247 ByteArrayISO8859Writer writer= new ByteArrayISO8859Writer(2048); | |
| 248 if (message != null) | |
| 813 | 249 { |
| 911 | 250 message= StringUtil.replace(message, "&", "&"); |
| 251 message= StringUtil.replace(message, "<", "<"); | |
| 252 message= StringUtil.replace(message, ">", ">"); | |
| 813 | 253 } |
| 911 | 254 String uri= request.getRequestURI(); |
| 255 if (uri!=null) | |
| 813 | 256 { |
| 911 | 257 uri= StringUtil.replace(uri, "&", "&"); |
| 258 uri= StringUtil.replace(uri, "<", "<"); | |
| 259 uri= StringUtil.replace(uri, ">", ">"); | |
| 260 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
261 |
| 911 | 262 writer.write("<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=ISO-8859-1\"/>\n"); |
| 263 writer.write("<title>Error "); | |
| 264 writer.write(Integer.toString(code)); | |
| 265 writer.write(' '); | |
| 266 if (message==null) | |
| 267 message=HttpStatus.getMessage(code); | |
| 268 writer.write(message); | |
| 269 writer.write("</title>\n</head>\n<body>\n<h2>HTTP ERROR: "); | |
| 270 writer.write(Integer.toString(code)); | |
| 271 writer.write("</h2>\n<p>Problem accessing "); | |
| 272 writer.write(uri); | |
| 273 writer.write(". Reason:\n<pre> "); | |
| 274 writer.write(message); | |
| 275 writer.write("</pre>"); | |
| 276 writer.write("</p>\n<hr /><i><small>Powered by Jetty://</small></i>"); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
277 |
| 911 | 278 for (int i= 0; i < 20; i++) |
| 279 writer.write("\n "); | |
| 280 writer.write("\n</body>\n</html>\n"); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
281 |
| 911 | 282 writer.flush(); |
| 283 setContentLength(writer.size()); | |
| 284 writer.writeTo(getOutputStream()); | |
| 285 writer.destroy(); | |
| 813 | 286 } |
| 287 else if (code!=SC_PARTIAL_CONTENT) | |
| 288 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
289 _connection._requestFields.remove(HttpHeaders.CONTENT_TYPE_BUFFER); |
|
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
290 _connection._requestFields.remove(HttpHeaders.CONTENT_LENGTH_BUFFER); |
| 813 | 291 _characterEncoding=null; |
| 292 _mimeType=null; | |
| 293 _cachedMimeType=null; | |
| 294 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
295 |
| 813 | 296 complete(); |
| 297 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
298 |
| 813 | 299 /* ------------------------------------------------------------ */ |
| 300 /* | |
| 301 * @see javax.servlet.http.HttpServletResponse#sendError(int) | |
| 302 */ | |
| 303 public void sendError(int sc) throws IOException | |
| 304 { | |
| 305 if (sc==102) | |
| 306 sendProcessing(); | |
| 307 else | |
| 308 sendError(sc,null); | |
| 309 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
310 |
| 813 | 311 /* ------------------------------------------------------------ */ |
| 312 /* Send a 102-Processing response. | |
| 313 * If the connection is a HTTP connection, the version is 1.1 and the | |
| 314 * request has a Expect header starting with 102, then a 102 response is | |
| 315 * sent. This indicates that the request still be processed and real response | |
| 316 * can still be sent. This method is called by sendError if it is passed 102. | |
| 317 * @see javax.servlet.http.HttpServletResponse#sendError(int) | |
| 318 */ | |
| 319 public void sendProcessing() throws IOException | |
| 320 { | |
| 321 if (_connection.isExpecting102Processing() && !isCommitted()) | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
322 _connection._generator.send1xx(HttpStatus.PROCESSING_102); |
| 813 | 323 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
324 |
| 813 | 325 /* ------------------------------------------------------------ */ |
| 326 /* | |
| 327 * @see javax.servlet.http.HttpServletResponse#sendRedirect(java.lang.String) | |
| 328 */ | |
| 329 public void sendRedirect(String location) throws IOException | |
| 330 { | |
| 331 if (location==null) | |
| 332 throw new IllegalArgumentException(); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
333 |
| 813 | 334 if (!URIUtil.hasScheme(location)) |
| 335 { | |
| 336 StringBuilder buf = _connection.getRequest().getRootURL(); | |
| 337 if (location.startsWith("/")) | |
| 338 buf.append(location); | |
| 339 else | |
| 340 { | |
| 341 String path=_connection.getRequest().getRequestURI(); | |
| 342 String parent=(path.endsWith("/"))?path:URIUtil.parentPath(path); | |
| 343 location=URIUtil.addPaths(parent,location); | |
| 344 if(location==null) | |
| 345 throw new IllegalStateException("path cannot be above root"); | |
| 346 if (!location.startsWith("/")) | |
| 347 buf.append('/'); | |
| 348 buf.append(location); | |
| 349 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
350 |
| 813 | 351 location=buf.toString(); |
| 352 HttpURI uri = new HttpURI(location); | |
| 353 String path=uri.getDecodedPath(); | |
| 354 String canonical=URIUtil.canonicalPath(path); | |
| 355 if (canonical==null) | |
| 356 throw new IllegalArgumentException(); | |
| 357 if (!canonical.equals(path)) | |
| 358 { | |
| 359 buf = _connection.getRequest().getRootURL(); | |
| 360 buf.append(URIUtil.encodePath(canonical)); | |
| 361 String param=uri.getParam(); | |
| 362 if (param!=null) | |
| 363 { | |
| 364 buf.append(';'); | |
| 365 buf.append(param); | |
| 366 } | |
| 367 String query=uri.getQuery(); | |
| 368 if (query!=null) | |
| 369 { | |
| 370 buf.append('?'); | |
| 371 buf.append(query); | |
| 372 } | |
| 373 String fragment=uri.getFragment(); | |
| 374 if (fragment!=null) | |
| 375 { | |
| 376 buf.append('#'); | |
| 377 buf.append(fragment); | |
| 378 } | |
| 379 location=buf.toString(); | |
| 380 } | |
| 381 } | |
| 382 | |
| 383 resetBuffer(); | |
| 384 setHeader(HttpHeaders.LOCATION,location); | |
| 385 setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); | |
| 386 complete(); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
387 |
| 813 | 388 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
389 |
| 813 | 390 /* ------------------------------------------------------------ */ |
| 391 /* | |
| 392 * @see javax.servlet.http.HttpServletResponse#setDateHeader(java.lang.String, long) | |
| 393 */ | |
| 394 public void setDateHeader(String name, long date) | |
| 395 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
396 _connection._responseFields.putDateField(name, date); |
| 813 | 397 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
398 |
| 813 | 399 /* ------------------------------------------------------------ */ |
| 400 /* | |
| 401 * @see javax.servlet.http.HttpServletResponse#addDateHeader(java.lang.String, long) | |
| 402 */ | |
| 403 public void addDateHeader(String name, long date) | |
| 404 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
405 _connection._responseFields.addDateField(name, date); |
| 813 | 406 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
407 |
| 813 | 408 /* ------------------------------------------------------------ */ |
| 409 /* | |
| 410 * @see javax.servlet.http.HttpServletResponse#setHeader(java.lang.String, java.lang.String) | |
| 411 */ | |
| 412 public void setHeader(String name, String value) | |
| 413 { | |
| 414 if (HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(name)) | |
| 415 setContentType(value); | |
| 416 else | |
| 417 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
418 _connection._responseFields.put(name, value); |
| 813 | 419 if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) |
| 420 { | |
| 421 if (value==null) | |
| 422 _connection._generator.setContentLength(-1); | |
| 423 else | |
| 424 _connection._generator.setContentLength(Long.parseLong(value)); | |
| 425 } | |
| 426 } | |
| 427 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
428 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
429 |
| 813 | 430 /* ------------------------------------------------------------ */ |
| 431 public Collection<String> getHeaderNames() | |
| 432 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
433 final HttpFields fields=_connection._responseFields; |
| 813 | 434 return fields.getFieldNamesCollection(); |
| 435 } | |
| 436 | |
| 437 /* ------------------------------------------------------------ */ | |
| 438 /* | |
| 439 */ | |
| 440 public String getHeader(String name) | |
| 441 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
442 return _connection._responseFields.getStringField(name); |
| 813 | 443 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
444 |
| 813 | 445 /* ------------------------------------------------------------ */ |
| 446 /* | |
| 447 */ | |
| 448 public Collection<String> getHeaders(String name) | |
| 449 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
450 final HttpFields fields=_connection._responseFields; |
| 813 | 451 Collection<String> i = fields.getValuesCollection(name); |
| 452 if (i==null) | |
| 453 return Collections.EMPTY_LIST; | |
| 454 return i; | |
| 455 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
456 |
| 813 | 457 /* ------------------------------------------------------------ */ |
| 458 /* | |
| 459 * @see javax.servlet.http.HttpServletResponse#addHeader(java.lang.String, java.lang.String) | |
| 460 */ | |
| 461 public void addHeader(String name, String value) | |
| 462 { | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
463 |
| 813 | 464 if (HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(name)) |
| 465 { | |
| 466 setContentType(value); | |
| 467 return; | |
| 468 } | |
| 469 | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
470 _connection._responseFields.add(name, value); |
| 813 | 471 if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) |
| 472 _connection._generator.setContentLength(Long.parseLong(value)); | |
| 473 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
474 |
| 813 | 475 /* ------------------------------------------------------------ */ |
| 476 /* | |
| 477 * @see javax.servlet.http.HttpServletResponse#setIntHeader(java.lang.String, int) | |
| 478 */ | |
| 479 public void setIntHeader(String name, int value) | |
| 480 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
481 _connection._responseFields.putLongField(name, value); |
|
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
482 if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) |
|
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
483 _connection._generator.setContentLength(value); |
| 813 | 484 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
485 |
| 813 | 486 /* ------------------------------------------------------------ */ |
| 487 /* | |
| 488 * @see javax.servlet.http.HttpServletResponse#addIntHeader(java.lang.String, int) | |
| 489 */ | |
| 490 public void addIntHeader(String name, int value) | |
| 491 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
492 _connection._responseFields.addLongField(name, value); |
|
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
493 if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) |
|
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
494 _connection._generator.setContentLength(value); |
| 813 | 495 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
496 |
| 813 | 497 /* ------------------------------------------------------------ */ |
| 498 /* | |
| 499 * @see javax.servlet.http.HttpServletResponse#setStatus(int) | |
| 500 */ | |
| 501 public void setStatus(int sc) | |
| 502 { | |
| 503 setStatus(sc,null); | |
| 504 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
505 |
| 813 | 506 /* ------------------------------------------------------------ */ |
| 507 /* | |
| 508 * @see javax.servlet.http.HttpServletResponse#setStatus(int, java.lang.String) | |
| 509 */ | |
| 510 public void setStatus(int sc, String sm) | |
| 511 { | |
| 512 if (sc<=0) | |
| 513 throw new IllegalArgumentException(); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
514 _status=sc; |
|
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
515 _reason=sm; |
| 813 | 516 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
517 |
| 813 | 518 /* ------------------------------------------------------------ */ |
| 519 /* | |
| 520 * @see javax.servlet.ServletResponse#getCharacterEncoding() | |
| 521 */ | |
| 522 public String getCharacterEncoding() | |
| 523 { | |
| 524 if (_characterEncoding==null) | |
| 525 _characterEncoding=StringUtil.__ISO_8859_1; | |
| 526 return _characterEncoding; | |
| 527 } | |
| 528 | |
| 529 /* ------------------------------------------------------------ */ | |
| 530 String getSetCharacterEncoding() | |
| 531 { | |
| 532 return _characterEncoding; | |
| 533 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
534 |
| 813 | 535 /* ------------------------------------------------------------ */ |
| 536 /* | |
| 537 * @see javax.servlet.ServletResponse#getContentType() | |
| 538 */ | |
| 539 public String getContentType() | |
| 540 { | |
| 541 return _contentType; | |
| 542 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
543 |
| 813 | 544 /* ------------------------------------------------------------ */ |
| 545 /* | |
| 546 * @see javax.servlet.ServletResponse#getOutputStream() | |
| 547 */ | |
| 548 public ServletOutputStream getOutputStream() throws IOException | |
| 549 { | |
| 550 if (_outputState!=NONE && _outputState!=STREAM) | |
| 551 throw new IllegalStateException("WRITER"); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
552 |
| 813 | 553 ServletOutputStream out = _connection.getOutputStream(); |
| 554 _outputState=STREAM; | |
| 555 return out; | |
| 556 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
557 |
| 813 | 558 /* ------------------------------------------------------------ */ |
| 559 public boolean isWriting() | |
| 560 { | |
| 561 return _outputState==WRITER; | |
| 562 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
563 |
| 813 | 564 /* ------------------------------------------------------------ */ |
| 565 public boolean isOutputing() | |
| 566 { | |
| 567 return _outputState!=NONE; | |
| 568 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
569 |
| 813 | 570 /* ------------------------------------------------------------ */ |
| 571 /* | |
| 572 * @see javax.servlet.ServletResponse#getWriter() | |
| 573 */ | |
| 574 public PrintWriter getWriter() throws IOException | |
| 575 { | |
| 576 if (_outputState!=NONE && _outputState!=WRITER) | |
| 577 throw new IllegalStateException("STREAM"); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
578 |
| 813 | 579 /* if there is no writer yet */ |
| 580 if (_writer==null) | |
| 581 { | |
| 582 /* get encoding from Content-Type header */ | |
| 583 String encoding = _characterEncoding; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
584 |
| 813 | 585 if (encoding==null) |
| 586 { | |
| 587 /* implementation of educated defaults */ | |
| 588 if(_cachedMimeType != null) | |
| 589 encoding = MimeTypes.getCharsetFromContentType(_cachedMimeType); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
590 |
| 813 | 591 if (encoding==null) |
| 592 encoding = StringUtil.__ISO_8859_1; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
593 |
| 813 | 594 setCharacterEncoding(encoding); |
| 595 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
596 |
| 813 | 597 /* construct Writer using correct encoding */ |
| 598 _writer = _connection.getPrintWriter(encoding); | |
| 599 } | |
| 600 _outputState=WRITER; | |
| 601 return _writer; | |
| 602 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
603 |
| 813 | 604 /* ------------------------------------------------------------ */ |
| 605 /* | |
| 606 * @see javax.servlet.ServletResponse#setCharacterEncoding(java.lang.String) | |
| 607 */ | |
| 608 public void setCharacterEncoding(String encoding) | |
| 609 { | |
| 610 if (this._outputState==0 && !isCommitted()) | |
| 611 { | |
| 612 _explicitEncoding=true; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
613 |
| 813 | 614 if (encoding==null) |
| 615 { | |
| 616 // Clear any encoding. | |
| 617 if (_characterEncoding!=null) | |
| 618 { | |
| 619 _characterEncoding=null; | |
| 620 if (_cachedMimeType!=null) | |
| 621 _contentType=_cachedMimeType.toString(); | |
| 622 else if (_mimeType!=null) | |
| 623 _contentType=_mimeType; | |
| 624 else | |
| 625 _contentType=null; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
626 |
| 813 | 627 if (_contentType==null) |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
628 _connection._responseFields.remove(HttpHeaders.CONTENT_TYPE_BUFFER); |
| 813 | 629 else |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
630 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 631 } |
| 632 } | |
| 633 else | |
| 634 { | |
| 635 // No, so just add this one to the mimetype | |
| 636 _characterEncoding=encoding; | |
| 637 if (_contentType!=null) | |
| 638 { | |
| 639 int i0=_contentType.indexOf(';'); | |
| 640 if (i0<0) | |
| 641 { | |
| 642 _contentType=null; | |
| 643 if(_cachedMimeType!=null) | |
| 644 { | |
| 645 CachedBuffer content_type = _cachedMimeType.getAssociate(_characterEncoding); | |
| 646 if (content_type!=null) | |
| 647 { | |
| 648 _contentType=content_type.toString(); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
649 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,content_type); |
| 813 | 650 } |
| 651 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
652 |
| 813 | 653 if (_contentType==null) |
| 654 { | |
| 655 _contentType = _mimeType+";charset="+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= "); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
656 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 657 } |
| 658 } | |
| 659 else | |
| 660 { | |
| 661 int i1=_contentType.indexOf("charset=",i0); | |
| 662 if (i1<0) | |
| 663 { | |
| 664 _contentType = _contentType+";charset="+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= "); | |
| 665 } | |
| 666 else | |
| 667 { | |
| 668 int i8=i1+8; | |
| 669 int i2=_contentType.indexOf(" ",i8); | |
| 670 if (i2<0) | |
| 671 _contentType=_contentType.substring(0,i8)+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= "); | |
| 672 else | |
| 673 _contentType=_contentType.substring(0,i8)+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= ")+_contentType.substring(i2); | |
| 674 } | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
675 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 676 } |
| 677 } | |
| 678 } | |
| 679 } | |
| 680 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
681 |
| 813 | 682 /* ------------------------------------------------------------ */ |
| 683 /* | |
| 684 * @see javax.servlet.ServletResponse#setContentLength(int) | |
| 685 */ | |
| 686 public void setContentLength(int len) | |
| 687 { | |
| 688 // Protect from setting after committed as default handling | |
| 689 // of a servlet HEAD request ALWAYS sets _content length, even | |
| 690 // if the getHandling committed the response! | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
691 if (isCommitted()) |
| 813 | 692 return; |
| 693 _connection._generator.setContentLength(len); | |
| 694 if (len>0) | |
| 695 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
696 _connection._responseFields.putLongField(HttpHeaders.CONTENT_LENGTH, len); |
| 813 | 697 if (_connection._generator.isAllContentWritten()) |
| 698 { | |
| 699 if (_outputState==WRITER) | |
| 700 _writer.close(); | |
| 701 else if (_outputState==STREAM) | |
| 702 { | |
| 703 try | |
| 704 { | |
| 705 getOutputStream().close(); | |
| 706 } | |
| 707 catch(IOException e) | |
| 708 { | |
| 709 throw new RuntimeException(e); | |
| 710 } | |
| 711 } | |
| 712 } | |
| 713 } | |
| 714 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
715 |
| 813 | 716 /* ------------------------------------------------------------ */ |
| 717 /* | |
| 718 * @see javax.servlet.ServletResponse#setContentLength(int) | |
| 719 */ | |
| 720 public void setLongContentLength(long len) | |
| 721 { | |
| 722 // Protect from setting after committed as default handling | |
| 723 // of a servlet HEAD request ALWAYS sets _content length, even | |
| 724 // if the getHandling committed the response! | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
725 if (isCommitted()) |
| 813 | 726 return; |
| 727 _connection._generator.setContentLength(len); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
728 _connection._responseFields.putLongField(HttpHeaders.CONTENT_LENGTH, len); |
| 813 | 729 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
730 |
| 813 | 731 /* ------------------------------------------------------------ */ |
| 732 /* | |
| 733 * @see javax.servlet.ServletResponse#setContentType(java.lang.String) | |
| 734 */ | |
| 735 public void setContentType(String contentType) | |
| 736 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
737 if (isCommitted()) |
| 813 | 738 return; |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
739 |
| 813 | 740 // Yes this method is horribly complex.... but there are lots of special cases and |
| 741 // as this method is called on every request, it is worth trying to save string creation. | |
| 742 // | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
743 |
| 813 | 744 if (contentType==null) |
| 745 { | |
| 746 if (_locale==null) | |
| 747 _characterEncoding=null; | |
| 748 _mimeType=null; | |
| 749 _cachedMimeType=null; | |
| 750 _contentType=null; | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
751 _connection._responseFields.remove(HttpHeaders.CONTENT_TYPE_BUFFER); |
| 813 | 752 } |
| 753 else | |
| 754 { | |
| 755 // Look for encoding in contentType | |
| 756 int i0=contentType.indexOf(';'); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
757 |
| 813 | 758 if (i0>0) |
| 759 { | |
| 760 // we have content type parameters | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
761 |
| 813 | 762 // Extract params off mimetype |
| 763 _mimeType=contentType.substring(0,i0).trim(); | |
| 764 _cachedMimeType=MimeTypes.CACHE.get(_mimeType); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
765 |
| 813 | 766 // Look for charset |
| 767 int i1=contentType.indexOf("charset=",i0+1); | |
| 768 if (i1>=0) | |
| 769 { | |
| 770 _explicitEncoding=true; | |
| 771 int i8=i1+8; | |
| 772 int i2 = contentType.indexOf(' ',i8); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
773 |
| 813 | 774 if (_outputState==WRITER) |
| 775 { | |
| 776 // strip the charset and ignore; | |
| 777 if ((i1==i0+1 && i2<0) || (i1==i0+2 && i2<0 && contentType.charAt(i0+1)==' ')) | |
| 778 { | |
| 779 if (_cachedMimeType!=null) | |
| 780 { | |
| 781 CachedBuffer content_type = _cachedMimeType.getAssociate(_characterEncoding); | |
| 782 if (content_type!=null) | |
| 783 { | |
| 784 _contentType=content_type.toString(); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
785 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,content_type); |
| 813 | 786 } |
| 787 else | |
| 788 { | |
| 789 _contentType=_mimeType+";charset="+_characterEncoding; | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
790 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 791 } |
| 792 } | |
| 793 else | |
| 794 { | |
| 795 _contentType=_mimeType+";charset="+_characterEncoding; | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
796 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 797 } |
| 798 } | |
| 799 else if (i2<0) | |
| 800 { | |
| 801 _contentType=contentType.substring(0,i1)+";charset="+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= "); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
802 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 803 } |
| 804 else | |
| 805 { | |
| 806 _contentType=contentType.substring(0,i1)+contentType.substring(i2)+";charset="+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= "); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
807 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 808 } |
| 809 } | |
| 810 else if ((i1==i0+1 && i2<0) || (i1==i0+2 && i2<0 && contentType.charAt(i0+1)==' ')) | |
| 811 { | |
| 812 // The params are just the char encoding | |
| 813 _cachedMimeType=MimeTypes.CACHE.get(_mimeType); | |
| 814 _characterEncoding = QuotedStringTokenizer.unquote(contentType.substring(i8)); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
815 |
| 813 | 816 if (_cachedMimeType!=null) |
| 817 { | |
| 818 CachedBuffer content_type = _cachedMimeType.getAssociate(_characterEncoding); | |
| 819 if (content_type!=null) | |
| 820 { | |
| 821 _contentType=content_type.toString(); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
822 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,content_type); |
| 813 | 823 } |
| 824 else | |
| 825 { | |
| 826 _contentType=contentType; | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
827 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 828 } |
| 829 } | |
| 830 else | |
| 831 { | |
| 832 _contentType=contentType; | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
833 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 834 } |
| 835 } | |
| 836 else if (i2>0) | |
| 837 { | |
| 838 _characterEncoding = QuotedStringTokenizer.unquote(contentType.substring(i8,i2)); | |
| 839 _contentType=contentType; | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
840 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 841 } |
| 842 else | |
| 843 { | |
| 844 _characterEncoding = QuotedStringTokenizer.unquote(contentType.substring(i8)); | |
| 845 _contentType=contentType; | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
846 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 847 } |
| 848 } | |
| 849 else // No encoding in the params. | |
| 850 { | |
| 851 _cachedMimeType=null; | |
| 852 _contentType=_characterEncoding==null?contentType:contentType+";charset="+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= "); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
853 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 854 } |
| 855 } | |
| 856 else // No params at all | |
| 857 { | |
| 858 _mimeType=contentType; | |
| 859 _cachedMimeType=MimeTypes.CACHE.get(_mimeType); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
860 |
| 813 | 861 if (_characterEncoding!=null) |
| 862 { | |
| 863 if (_cachedMimeType!=null) | |
| 864 { | |
| 865 CachedBuffer content_type = _cachedMimeType.getAssociate(_characterEncoding); | |
| 866 if (content_type!=null) | |
| 867 { | |
| 868 _contentType=content_type.toString(); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
869 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,content_type); |
| 813 | 870 } |
| 871 else | |
| 872 { | |
| 873 _contentType=_mimeType+";charset="+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= "); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
874 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 875 } |
| 876 } | |
| 877 else | |
| 878 { | |
| 879 _contentType=contentType+";charset="+QuotedStringTokenizer.quoteIfNeeded(_characterEncoding,";= "); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
880 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 881 } |
| 882 } | |
| 883 else if (_cachedMimeType!=null) | |
| 884 { | |
| 885 _contentType=_cachedMimeType.toString(); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
886 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_cachedMimeType); |
| 813 | 887 } |
| 888 else | |
| 889 { | |
| 890 _contentType=contentType; | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
891 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 892 } |
| 893 } | |
| 894 } | |
| 895 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
896 |
| 813 | 897 /* ------------------------------------------------------------ */ |
| 898 /* | |
| 899 * @see javax.servlet.ServletResponse#setBufferSize(int) | |
| 900 */ | |
| 901 public void setBufferSize(int size) | |
| 902 { | |
| 903 if (isCommitted() || getContentCount()>0) | |
| 904 throw new IllegalStateException("Committed or content written"); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
905 _connection._generator.increaseContentBufferSize(size); |
| 813 | 906 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
907 |
| 813 | 908 /* ------------------------------------------------------------ */ |
| 909 /* | |
| 910 * @see javax.servlet.ServletResponse#getBufferSize() | |
| 911 */ | |
| 912 public int getBufferSize() | |
| 913 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
914 return _connection._generator.getContentBufferSize(); |
| 813 | 915 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
916 |
| 813 | 917 /* ------------------------------------------------------------ */ |
| 918 /* | |
| 919 * @see javax.servlet.ServletResponse#flushBuffer() | |
| 920 */ | |
| 921 public void flushBuffer() throws IOException | |
| 922 { | |
| 923 _connection.flushResponse(); | |
| 924 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
925 |
| 813 | 926 /* ------------------------------------------------------------ */ |
| 927 /* | |
| 928 * @see javax.servlet.ServletResponse#reset() | |
| 929 */ | |
| 930 public void reset() | |
| 931 { | |
| 932 resetBuffer(); | |
| 933 fwdReset(); | |
| 934 _status=200; | |
| 935 _reason=null; | |
| 936 | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
937 HttpFields response_fields=_connection._responseFields; |
| 813 | 938 |
| 939 response_fields.clear(); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
940 String connection=_connection._requestFields.getStringField(HttpHeaders.CONNECTION_BUFFER); |
| 813 | 941 if (connection!=null) |
| 942 { | |
| 943 String[] values = connection.split(","); | |
| 944 for (int i=0;values!=null && i<values.length;i++) | |
| 945 { | |
| 946 CachedBuffer cb = HttpHeaderValues.CACHE.get(values[0].trim()); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
947 |
| 813 | 948 if (cb!=null) |
| 949 { | |
| 950 switch(cb.getOrdinal()) | |
| 951 { | |
| 952 case HttpHeaderValues.CLOSE_ORDINAL: | |
| 953 response_fields.put(HttpHeaders.CONNECTION_BUFFER,HttpHeaderValues.CLOSE_BUFFER); | |
| 954 break; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
955 |
| 813 | 956 case HttpHeaderValues.KEEP_ALIVE_ORDINAL: |
| 957 if (HttpVersions.HTTP_1_0.equalsIgnoreCase(_connection.getRequest().getProtocol())) | |
| 958 response_fields.put(HttpHeaders.CONNECTION_BUFFER,HttpHeaderValues.KEEP_ALIVE); | |
| 959 break; | |
| 960 case HttpHeaderValues.TE_ORDINAL: | |
| 961 response_fields.put(HttpHeaders.CONNECTION_BUFFER,HttpHeaderValues.TE); | |
| 962 break; | |
| 963 } | |
| 964 } | |
| 965 } | |
| 966 } | |
| 967 } | |
| 968 | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
969 |
| 813 | 970 public void reset(boolean preserveCookies) |
| 971 { | |
| 972 if (!preserveCookies) | |
| 973 reset(); | |
| 974 else | |
| 975 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
976 HttpFields response_fields=_connection._responseFields; |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
977 |
| 813 | 978 ArrayList<String> cookieValues = new ArrayList<String>(5); |
| 979 Enumeration<String> vals = response_fields.getValues(HttpHeaders.SET_COOKIE); | |
| 980 while (vals.hasMoreElements()) | |
| 981 cookieValues.add((String)vals.nextElement()); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
982 |
| 813 | 983 reset(); |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
984 |
| 813 | 985 for (String v:cookieValues) |
| 986 response_fields.add(HttpHeaders.SET_COOKIE, v); | |
| 987 } | |
| 988 } | |
| 989 | |
| 990 | |
| 991 | |
| 992 /* ------------------------------------------------------------ */ | |
| 993 /* | |
| 994 * @see javax.servlet.ServletResponse#reset() | |
| 995 */ | |
| 996 public void fwdReset() | |
| 997 { | |
| 998 resetBuffer(); | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
999 |
| 813 | 1000 _writer=null; |
| 1001 _outputState=NONE; | |
| 1002 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1003 |
| 813 | 1004 /* ------------------------------------------------------------ */ |
| 1005 /* | |
| 1006 * @see javax.servlet.ServletResponse#resetBuffer() | |
| 1007 */ | |
| 1008 public void resetBuffer() | |
| 1009 { | |
| 1010 if (isCommitted()) | |
| 1011 throw new IllegalStateException("Committed"); | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1012 _connection._generator.resetBuffer(); |
| 813 | 1013 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1014 |
| 813 | 1015 /* ------------------------------------------------------------ */ |
| 1016 /* | |
| 1017 * @see javax.servlet.ServletResponse#isCommitted() | |
| 1018 */ | |
| 1019 public boolean isCommitted() | |
| 1020 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1021 return _connection._generator.isCommitted(); |
| 813 | 1022 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1023 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1024 |
| 813 | 1025 /* ------------------------------------------------------------ */ |
| 1026 /* | |
| 1027 * @see javax.servlet.ServletResponse#setLocale(java.util.Locale) | |
| 1028 */ | |
| 1029 public void setLocale(Locale locale) | |
| 1030 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1031 if (locale == null || isCommitted()) |
| 813 | 1032 return; |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1033 |
| 813 | 1034 _locale = locale; |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1035 _connection._responseFields.put(HttpHeaders.CONTENT_LANGUAGE_BUFFER,locale.toString().replace('_','-')); |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1036 |
| 813 | 1037 if (_explicitEncoding || _outputState!=0 ) |
| 1038 return; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1039 |
| 813 | 1040 if (_connection.getRequest().getContext()==null) |
| 1041 return; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1042 |
| 813 | 1043 String charset = _connection.getRequest().getContext().getContextHandler().getLocaleEncoding(locale); |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1044 |
| 813 | 1045 if (charset!=null && charset.length()>0) |
| 1046 { | |
| 1047 _characterEncoding=charset; | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1048 |
| 813 | 1049 /* get current MIME type from Content-Type header */ |
| 1050 String type=getContentType(); | |
| 1051 if (type!=null) | |
| 1052 { | |
| 1053 _characterEncoding=charset; | |
| 1054 int semi=type.indexOf(';'); | |
| 1055 if (semi<0) | |
| 1056 { | |
| 1057 _mimeType=type; | |
| 1058 _contentType= type += ";charset="+charset; | |
| 1059 } | |
| 1060 else | |
| 1061 { | |
| 1062 _mimeType=type.substring(0,semi); | |
| 1063 _contentType= _mimeType += ";charset="+charset; | |
| 1064 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1065 |
| 813 | 1066 _cachedMimeType=MimeTypes.CACHE.get(_mimeType); |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1067 _connection._responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,_contentType); |
| 813 | 1068 } |
| 1069 } | |
| 1070 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1071 |
| 813 | 1072 /* ------------------------------------------------------------ */ |
| 1073 /* | |
| 1074 * @see javax.servlet.ServletResponse#getLocale() | |
| 1075 */ | |
| 1076 public Locale getLocale() | |
| 1077 { | |
| 1078 if (_locale==null) | |
| 1079 return Locale.getDefault(); | |
| 1080 return _locale; | |
| 1081 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1082 |
| 813 | 1083 /* ------------------------------------------------------------ */ |
| 1084 /** | |
| 1085 * @return The HTTP status code that has been set for this request. This will be <code>200<code> | |
| 1086 * ({@link HttpServletResponse#SC_OK}), unless explicitly set through one of the <code>setStatus</code> methods. | |
| 1087 */ | |
| 1088 public int getStatus() | |
| 1089 { | |
| 1090 return _status; | |
| 1091 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1092 |
| 813 | 1093 /* ------------------------------------------------------------ */ |
| 1094 /** | |
| 1095 * @return The reason associated with the current {@link #getStatus() status}. This will be <code>null</code>, | |
| 1096 * unless one of the <code>setStatus</code> methods have been called. | |
| 1097 */ | |
| 1098 public String getReason() | |
| 1099 { | |
| 1100 return _reason; | |
| 1101 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1102 |
| 813 | 1103 /* ------------------------------------------------------------ */ |
| 1104 /** | |
| 1105 */ | |
| 1106 public void complete() | |
| 1107 throws IOException | |
| 1108 { | |
| 1109 _connection.completeResponse(); | |
| 1110 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1111 |
| 813 | 1112 /* ------------------------------------------------------------- */ |
| 1113 /** | |
| 1114 * @return the number of bytes actually written in response body | |
| 1115 */ | |
| 1116 public long getContentCount() | |
| 1117 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1118 if (_connection==null) |
| 813 | 1119 return -1; |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1120 return _connection._generator.getContentWritten(); |
| 813 | 1121 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1122 |
| 813 | 1123 /* ------------------------------------------------------------ */ |
| 1124 public HttpFields getHttpFields() | |
| 1125 { | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1126 return _connection._responseFields; |
| 813 | 1127 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1128 |
| 813 | 1129 /* ------------------------------------------------------------ */ |
| 1130 @Override | |
| 1131 public String toString() | |
| 1132 { | |
| 1133 return "HTTP/1.1 "+_status+" "+ (_reason==null?"":_reason) +System.getProperty("line.separator")+ | |
|
972
5ee36654b383
simplify AbstractHttpConnection
Franklin Schmidt <fschmidt@gmail.com>
parents:
911
diff
changeset
|
1134 _connection._responseFields.toString(); |
| 813 | 1135 } |
| 1136 | |
| 1137 /* ------------------------------------------------------------ */ | |
| 1138 /* ------------------------------------------------------------ */ | |
| 1139 /* ------------------------------------------------------------ */ | |
| 1140 private static class NullOutput extends ServletOutputStream | |
| 1141 { | |
| 1142 @Override | |
| 1143 public void write(int b) throws IOException | |
| 1144 { | |
| 1145 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1146 |
| 813 | 1147 @Override |
| 1148 public void print(String s) throws IOException | |
| 1149 { | |
| 1150 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1151 |
| 813 | 1152 @Override |
| 1153 public void println(String s) throws IOException | |
| 1154 { | |
| 1155 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1156 |
| 813 | 1157 @Override |
| 1158 public void write(byte[] b, int off, int len) throws IOException | |
| 1159 { | |
| 1160 } | |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1161 |
| 813 | 1162 } |
|
802
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1163 |
|
3428c60d7cfc
replace jetty jars with source
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1164 } |
