View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *  http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  
20  package javax.servlet;
21  
22  import java.io.OutputStream;
23  import java.io.IOException;
24  import java.io.CharConversionException;
25  import java.text.MessageFormat;
26  import java.util.ResourceBundle;
27  
28  /**
29   * Provides an output stream for sending binary data to the
30   * client. A <code>ServletOutputStream</code> object is normally retrieved 
31   * via the {@link ServletResponse#getOutputStream} method.
32   *
33   * <p>This is an abstract class that the servlet container implements.
34   * Subclasses of this class
35   * must implement the <code>java.io.OutputStream.write(int)</code>
36   * method.
37   *
38   * 
39   * @author 	Various
40   * @version 	$Version$
41   *
42   * @see 	ServletResponse
43   *
44   */
45  
46  public abstract class ServletOutputStream extends OutputStream {
47  
48      private static final String LSTRING_FILE = "javax.servlet.LocalStrings";
49      private static ResourceBundle lStrings =
50  	ResourceBundle.getBundle(LSTRING_FILE);
51  
52  
53      
54      /**
55       *
56       * Does nothing, because this is an abstract class.
57       *
58       */
59  
60      protected ServletOutputStream() { }
61  
62  
63      /**
64       * Writes a <code>String</code> to the client, 
65       * without a carriage return-line feed (CRLF) 
66       * character at the end.
67       *
68       *
69       * @param s			the <code>String</code> to send to the client
70       *
71       * @exception IOException 	if an input or output exception occurred
72       *
73       */
74  
75      public void print(String s) throws IOException {
76  	if (s==null) s="null";
77  	int len = s.length();
78  	for (int i = 0; i < len; i++) {
79  	    char c = s.charAt (i);
80  
81  	    //
82  	    // XXX NOTE:  This is clearly incorrect for many strings,
83  	    // but is the only consistent approach within the current
84  	    // servlet framework.  It must suffice until servlet output
85  	    // streams properly encode their output.
86  	    //
87  	    if ((c & 0xff00) != 0) {	// high order byte must be zero
88  		String errMsg = lStrings.getString("err.not_iso8859_1");
89  		Object[] errArgs = new Object[1];
90  		errArgs[0] = new Character(c);
91  		errMsg = MessageFormat.format(errMsg, errArgs);
92  		throw new CharConversionException(errMsg);
93  	    }
94  	    write (c);
95  	}
96      }
97  
98  
99  
100     /**
101      * Writes a <code>boolean</code> value to the client,
102      * with no carriage return-line feed (CRLF) 
103      * character at the end.
104      *
105      * @param b			the <code>boolean</code> value 
106      *				to send to the client
107      *
108      * @exception IOException 	if an input or output exception occurred
109      *
110      */
111 
112     public void print(boolean b) throws IOException {
113 	String msg;
114 	if (b) {
115 	    msg = lStrings.getString("value.true");
116 	} else {
117 	    msg = lStrings.getString("value.false");
118 	}
119 	print(msg);
120     }
121 
122 
123 
124     /**
125      * Writes a character to the client,
126      * with no carriage return-line feed (CRLF) 
127      * at the end.
128      *
129      * @param c			the character to send to the client
130      *
131      * @exception IOException 	if an input or output exception occurred
132      *
133      */
134 
135     public void print(char c) throws IOException {
136 	print(String.valueOf(c));
137     }
138 
139 
140 
141 
142     /**
143      *
144      * Writes an int to the client,
145      * with no carriage return-line feed (CRLF) 
146      * at the end.
147      *
148      * @param i			the int to send to the client
149      *
150      * @exception IOException 	if an input or output exception occurred
151      *
152      */  
153 
154     public void print(int i) throws IOException {
155 	print(String.valueOf(i));
156     }
157 
158 
159 
160  
161     /**
162      * 
163      * Writes a <code>long</code> value to the client,
164      * with no carriage return-line feed (CRLF) at the end.
165      *
166      * @param l			the <code>long</code> value 
167      *				to send to the client
168      *
169      * @exception IOException 	if an input or output exception 
170      *				occurred
171      * 
172      */
173 
174     public void print(long l) throws IOException {
175 	print(String.valueOf(l));
176     }
177 
178 
179 
180     /**
181      *
182      * Writes a <code>float</code> value to the client,
183      * with no carriage return-line feed (CRLF) at the end.
184      *
185      * @param f			the <code>float</code> value
186      *				to send to the client
187      *
188      * @exception IOException	if an input or output exception occurred
189      *
190      *
191      */
192 
193     public void print(float f) throws IOException {
194 	print(String.valueOf(f));
195     }
196 
197 
198 
199     /**
200      *
201      * Writes a <code>double</code> value to the client,
202      * with no carriage return-line feed (CRLF) at the end.
203      * 
204      * @param d			the <code>double</code> value
205      *				to send to the client
206      *
207      * @exception IOException 	if an input or output exception occurred
208      *
209      */
210 
211     public void print(double d) throws IOException {
212 	print(String.valueOf(d));
213     }
214 
215 
216 
217     /**
218      * Writes a carriage return-line feed (CRLF)
219      * to the client.
220      *
221      *
222      *
223      * @exception IOException 	if an input or output exception occurred
224      *
225      */
226 
227     public void println() throws IOException {
228 	print("\r\n");
229     }
230 
231 
232 
233     /**
234      * Writes a <code>String</code> to the client, 
235      * followed by a carriage return-line feed (CRLF).
236      *
237      *
238      * @param s			the <code>String</code> to write to the client
239      *
240      * @exception IOException 	if an input or output exception occurred
241      *
242      */
243 
244     public void println(String s) throws IOException {
245 	print(s);
246 	println();
247     }
248 
249 
250 
251 
252     /**
253      *
254      * Writes a <code>boolean</code> value to the client, 
255      * followed by a 
256      * carriage return-line feed (CRLF).
257      *
258      *
259      * @param b			the <code>boolean</code> value 
260      *				to write to the client
261      *
262      * @exception IOException 	if an input or output exception occurred
263      *
264      */
265 
266     public void println(boolean b) throws IOException {
267 	print(b);
268 	println();
269     }
270 
271 
272 
273     /**
274      *
275      * Writes a character to the client, followed by a carriage
276      * return-line feed (CRLF).
277      *
278      * @param c			the character to write to the client
279      *
280      * @exception IOException 	if an input or output exception occurred
281      *
282      */
283 
284     public void println(char c) throws IOException {
285 	print(c);
286 	println();
287     }
288 
289 
290 
291     /**
292      *
293      * Writes an int to the client, followed by a 
294      * carriage return-line feed (CRLF) character.
295      *
296      *
297      * @param i			the int to write to the client
298      *
299      * @exception IOException 	if an input or output exception occurred
300      *
301      */
302 
303     public void println(int i) throws IOException {
304 	print(i);
305 	println();
306     }
307 
308 
309 
310     /**  
311      *
312      * Writes a <code>long</code> value to the client, followed by a 
313      * carriage return-line feed (CRLF).
314      *
315      *
316      * @param l			the <code>long</code> value to write to the client
317      *
318      * @exception IOException 	if an input or output exception occurred
319      *
320      */  
321 
322     public void println(long l) throws IOException {
323 	print(l);
324 	println();
325     }
326 
327 
328 
329     /**
330      *
331      * Writes a <code>float</code> value to the client, 
332      * followed by a carriage return-line feed (CRLF).
333      *
334      * @param f			the <code>float</code> value 
335      *				to write to the client
336      *
337      *
338      * @exception IOException 	if an input or output exception 
339      *				occurred
340      *
341      */
342 
343     public void println(float f) throws IOException {
344 	print(f);
345 	println();
346     }
347 
348 
349 
350     /**
351      *
352      * Writes a <code>double</code> value to the client, 
353      * followed by a carriage return-line feed (CRLF).
354      *
355      *
356      * @param d			the <code>double</code> value
357      *				to write to the client
358      *
359      * @exception IOException 	if an input or output exception occurred
360      *
361      */
362 
363     public void println(double d) throws IOException {
364 	print(d);
365 	println();
366     }
367 }