Java Network Programming (3rd ed) [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Java Network Programming (3rd ed) [Electronic resources] - نسخه متنی

Harold, Elliotte Rusty

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید








15.7 Content Handlers


The URLConnection
class is intimately tied to Java's protocol and
content handler mechanism. The protocol handler is responsible for
making connections, exchanging headers, requesting particular
documents, and so forth. It handles all the overhead of the protocol
for requesting files. The content handler deals only with the actual
data. It takes the raw input after all headers and so forth are
stripped and converts it to the right kind of object for Java to deal
with; for instance, an InputStream or an
ImageProducer.


15.7.1 Getting Content


The getContent( ) methods of
URLConnection use a content handler to turn the
raw data of a connection into a Java object.

15.7.1.1 public Object getContent( ) throws IOException


This method is virtually identical to the getContent() method of the URL class. In fact, that
method just calls this method. getContent( )
downloads the object selected by the URL of this
URLConnection. For getContent() to work, the virtual machine needs to recognize and
understand the content type. The exact content types supported vary
from one VM and version to the next. Sun's JDK 1.5
supports text/plain, image/gif,
image/jpeg, image/png,
audio/aiff, audio/basic,
audio/wav, and a few others. Different VMs and
applications may support additional types. For instance, HotJava 3.0
includes a PDF content handler. Furthermore, you can install
additional content handlers that understand other content types.

getContent( ) works only for protocols like HTTP,
which has a clear understanding of MIME content types. If the content
type is unknown or the protocol doesn't understand
content types, getContent( ) throws an
UnknownServiceException.

15.7.1.2 public Object getContent(Class[] classes) throws IOException // Java 1.3


This overloaded variant of the getContent( )
method lets you choose what class you'd like the
content returned as in order to provide different object
representations of data. The method attempts to return the content in
the form of one of the classes in the classes
array. The order of preference is the order of the array. For
instance, if you'd prefer an HTML file to be
returned as a String but your second choice is a
Reader and your third choice is an
InputStream, you would write:

URL u = new URL("http://www.thehungersite.com/");
URLConnection uc = u.openConnection( )
Class[] types = {String.class, Reader.class, InputStream.class};
Object o = uc.getContent(types);

Then test for the type of the returned object using
instanceof. For example:

if (o instanceof String) {
System.out.println(o);
}
else if (o instanceof Reader) {
int c;
Reader r = (Reader) o;
while ((c = r.read( )) != -1) System.out.print((char) c);
}
else if (o instanceof InputStream) {
int c;
InputStream in = (InputStream) o;
while ((c = in.read( )) != -1) System.out.write(c);
}
else if (o == null) {
System.out.println("None of the requested types were available.");
}
else {
System.out.println("Error: unexpected type " + o.getClass( ));
}

That last else clause shouldn't
be reached. If none of the requested types are available, this method
is supposed to return null rather than returning
an unexpected type.


15.7.2 ContentHandlerFactory


The URLConnection
class contains a static Hashtable of
ContentHandler objects. Whenever the
getContent( ) method of
URLConnection is invoked, Java looks in this
Hashtable to find the right content handler for
the current URL, as indicated by the URL's
Content-type. If it doesn't find a
ContentHandler object for the MIME type, it tries
to create one using a ContentHandlerFactory (which
you'll learn more about in Chapter 17). That is, a content handler factory tells
the program where it can find a content handler for a
text/html file, an image/gif
file, or some other kind of file. You can set the
ContentHandlerFactory by passing an instance of
the java.net.ContentHandlerFactory interface to
the setContentHandlerFactory( ) method:

public static void setContentHandlerFactory(ContentHandlerFactory factory) 
throws SecurityException, Error

You may set the ContentHandlerFactory only once
per application; this method throws a generic
Error if it is called a second time. As with most
other setFactory( ) methods, untrusted applets
will generally not be allowed to set the content handler factory
whether one has already been set or not. Attempting to do so throws a
SecurityException.


/ 164