Chapter 15. URLConnections
URLConnection is an abstract class that represents an
active connection to a resource specified by a URL. The
URLConnection class has two different but related
purposes. First, it provides more control over the interaction with a
server (especially an HTTP server) than the URL
class. With a URLConnection, you can inspect the
header sent by the server and respond accordingly. You can set the
header fields used in the client request. You can use a
URLConnection to download binary files. Finally, a
URLConnection lets you send data back to a web
server with POST or PUT and use other HTTP request methods. We will
explore all of these techniques in this chapter.Second, the URLConnection class is part of
Java's protocol
handler mechanism, which also includes the
URLStreamHandler class. The idea behind protocol
handlers is simple: they separate the details of processing a
protocol from processing particular data types, providing user
interfaces, and doing the other work that a monolithic web browser
performs. The base java.net.URLConnection class is
abstract; to implement a specific protocol, you write a subclass.
These subclasses can be loaded at runtime by applications. For
example, if the browser runs across a URL with a strange scheme, such
as compress, rather than throwing up its hands
and issuing an error message, it can download a protocol handler for
this unknown protocol and use it to communicate with the server.
Writing protocol handlers is the subject of the next chapter.Only abstract URLConnection classes are present in
the java.net package. The concrete subclasses are
hidden inside the sun.net package hierarchy. Many
of the methods and fields as well as the
single constructor in the URLConnection class are
protected. In other words, they can only be
accessed by instances of the URLConnection class
or its subclasses. It is rare to instantiate
URLConnection objects directly in your source
code; instead, the runtime environment creates these objects as
needed, depending on the protocol in use. The class (which is unknown
at compile time) is then instantiated using the forName() and newInstance( ) methods of the
java.lang.Class class.