Writing Data to a Server
Sometimes you need to write data to a
URLConnection
—for example, when you submit a
form to a web server using POST or upload a file using PUT. The
getOutputStream( )
method returns an
OutputStream
on which you can write data for
transmission to a server:
public OutputStream getOutputStream( )
Since a
URLConnection
doesn’t allow output by
default, you have to call setDoOutput(true)
before
asking for an output stream. When you set doOutput
to true for an http URL, the
request method is changed from GET to POST. In Chapter 7, you saw how to send data to CGI programs with
GET. GET is straightforward to work with, but it does limit the
amount of data you can send. Some web servers have maximum lengths of
lines they’ll accept as part of a GET request, typically 255 or
1,024. This is generally enough for a simple search request or page
navigation, but not enough for a form that allows users to contribute
to a bulletin board, for example. Forms that allow larger blocks of
text should use POST instead. We’ll explore this more shortly.
Once you’ve got the OutputStream
, you should
buffer it by chaining it to a BufferedOutputStream
or a BufferedWriter
. You generally also chain it
to a DataOutputStream
, an
OutputStreamWriter
, or some other class
that’s more convenient to use than a raw
OutputStream
. For example:
try { URL u = new URL("http://www.somehost.com/cgi-bin/acgi"); // open the connection and prepare it to POST URLConnection uc = u.openConnection( ); uc.setDoOutput(true); ...
Get Java Network Programming, Second Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.