java.lang.Object java.net.URLConnection
public abstract class URLConnection
抽象类 URLConnection
是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:
openConnection() |
connect() |
---|---|
对影响到远程资源连接的参数进行操作。 | 与资源交互;查询头字段和内容。 |
openConnection
方法创建连接对象。 connect
方法建立到远程对象的实际连接。 使用以下方法修改设置参数:
setAllowUserInteraction
setDoInput
setDoOutput
setIfModifiedSince
setUseCaches
使用以下方法修改一般请求属性:
setRequestProperty
使用 setDefaultAllowUserInteraction
和 setDefaultUseCaches
可设置 AllowUserInteraction
和 UseCaches
参数的默认值。
上面每个 set
方法都有一个用于获取参数值或一般请求属性值的对应 get
方法。适用的具体参数和一般请求属性取决于协议。
在建立到远程对象的连接后,以下方法用于访问头字段和内容:
getContent
getHeaderField
getInputStream
getOutputStream
某些头字段需要经常访问。以下方法:
getContentEncoding
getContentLength
getContentType
getDate
getExpiration
getLastModifed
提供对这些字段的便捷访问。getContent
方法使用 getContentType
方法以确定远程对象类型;子类重写 getContentType
方法很容易。
一般情况下,所有的预连接参数和一般请求属性都可忽略:预连接参数和一般请求属性默认为敏感值。对于此接口的大多数客户端而言,只有两个需要的方法:getInputStream
和 getContent
,它们通过便捷方法镜像到 URL
类中。
有关 http
连接的请求属性和头字段的更多信息,可从以下位置找到:
有关http://www.ietf.org/rfc/rfc2068.txt
fileNameMap
的注意事项:在 JDK 1.1.6 以前的版本中,
URLConnection
的
fileNameMap
字段是公共的。在 JDK 1.1.6 及以后的版本中,
fileNameMap
字段是私有的;对其添加了 accessor 方法和 mutator 方法
getFileNameMap
及
setFileNameMap
以便访问。
Compatibility 页中也对此更改进行了介绍。 完成请求后,在一个
URLConnection 的
InputStream 或
OutputStream 上调用
close() 方法可以释放与此实例相关的网络资源,除非特定的协议规范为其指定了其他行为。
URL.openConnection()
,
connect()
,
getContent()
,
getContentEncoding()
,
getContentLength()
,
getContentType()
,
getDate()
,
getExpiration()
,
getHeaderField(int)
,
getHeaderField(java.lang.String)
,
getInputStream()
,
getLastModified()
,
getOutputStream()
,
setAllowUserInteraction(boolean)
,
setDefaultUseCaches(boolean)
,
setDoInput(boolean)
,
setDoOutput(boolean)
,
setIfModifiedSince(long)
,
setRequestProperty(java.lang.String, java.lang.String)
,
setUseCaches(boolean)
字段摘要 | |
---|---|
protected boolean |
allowUserInteraction 如果为 true ,则在允许用户交互(例如弹出一个验证对话框)的上下文中对此 URL 进行检查。 |
protected boolean |
connected 如果为 false ,则此连接对象尚未创建到指定 URL 的通信链接。 |
protected boolean |
doInput 此变量由 setDoInput 方法设置。 |
protected boolean |
doOutput 此变量由 setDoOutput 方法设置。 |
protected long |
ifModifiedSince 有些协议支持跳过对象获取,除非该对象在某个特定时间点之后又进行了修改。 |
protected URL |
url URL 表示此连接要在互联网上打开的远程对象。 |
protected boolean |
useCaches 如果为 true ,则只要有条件就允许协议使用缓存。 |
构造方法摘要 | |
---|---|
protected |
URLConnection(URL url) 构造一个到指定 URL 的 URL 连接。 |
方法摘要 | |
---|---|
void |
addRequestProperty(String key, String value) 添加由键值对指定的一般请求属性。 |
abstract void |
connect() 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。 |
boolean |
getAllowUserInteraction() 返回此对象的 allowUserInteraction 字段的值。 |
int |
getConnectTimeout() 返回连接超时设置。 |
Object |
getContent() 获取此 URL 连接的内容。 |
Object |
getContent(Class[] classes) 获取此 URL 连接的内容。 |
String |
getContentEncoding() 返回 content-encoding 头字段的值。 |
int |
getContentLength() 返回 content-length 头字段的值。 |
String |
getContentType() 返回 content-type 头字段的值。 |
long |
getDate() 返回 date 头字段的值。 |
static boolean |
getDefaultAllowUserInteraction() 返回 allowUserInteraction 字段的默认值。 |
static String |
getDefaultRequestProperty(String key) 已过时。 应在获得 URLConnection 的适当实例后使用特定 getRequestProperty 方法的实例。 |
boolean |
getDefaultUseCaches() 返回 URLConnection 的 useCaches 标志的默认值。 |
boolean |
getDoInput() 返回此 URLConnection 的 doInput 标志的值。 |
boolean |
getDoOutput() 返回此 URLConnection 的 doOutput 标志的值。 |
long |
getExpiration() 返回 expires 头字段的值。 |
static FileNameMap |
getFileNameMap() 从数据文件加载文件名映射(一个 mimetable)。 |
String |
getHeaderField(int n) 返回第 n 个头字段的值。 |
String |
getHeaderField(String name) 返回指定的头字段的值。 |
long |
getHeaderFieldDate(String name, long Default) 返回解析为日期的指定字段的值。 |
int |
getHeaderFieldInt(String name, int Default) 返回解析为数字的指定字段的值。 |
String |
getHeaderFieldKey(int n) 返回第 n 个头字段的键。 |
Map<String,List<String>> |
getHeaderFields() 返回头字段的不可修改的 Map。 |
long |
getIfModifiedSince() 返回此对象的 ifModifiedSince 字段的值。 |
InputStream |
getInputStream() 返回从此打开的连接读取的输入流。 |
long |
getLastModified() 返回 last-modified 头字段的值。 |
OutputStream |
getOutputStream() 返回写入到此连接的输出流。 |
Permission |
getPermission() 返回一个权限对象,其代表建立此对象表示的连接所需的权限。 |
int |
getReadTimeout() 返回读入超时设置。 |
Map<String,List<String>> |
getRequestProperties() 返回一个由此连接的一般请求属性构成的不可修改的 Map。 |
String |
getRequestProperty(String key) 返回此连接指定的一般请求属性值。 |
URL |
getURL() 返回此 URLConnection 的 URL 字段的值。 |
boolean |
getUseCaches() 返回此 URLConnection 的 useCaches 字段的值。 |
static String |
guessContentTypeFromName(String fname) 根据 URL 的指定 "file" 部分尝试确定对象的内容类型。 |
static String |
guessContentTypeFromStream(InputStream is) 根据输入流的开始字符尝试确定输入流的类型。 |
void |
setAllowUserInteraction(boolean allowuserinteraction) 设置此 URLConnection 的 allowUserInteraction 字段的值。 |
void |
setConnectTimeout(int timeout) 设置一个指定的超时值(以毫秒为单位),该值将在打开到此 URLConnection 引用的资源的通信链接时使用。 |
static void |
setContentHandlerFactory(ContentHandlerFactory fac) 设置应用程序的 ContentHandlerFactory 。 |
static void |
setDefaultAllowUserInteraction(boolean defaultallowuserinteraction) 将未来的所有 URLConnection 对象的 allowUserInteraction 字段的默认值设置为指定的值。 |
static void |
setDefaultRequestProperty(String key, String value) 已过时。 应在获得 URLConnection 的适当实例后使用特定 setRequestProperty 方法的实例。调用此方法没有任何作用。 |
void |
setDefaultUseCaches(boolean defaultusecaches) 将 useCaches 字段的默认值设置为指定的值。 |
void |
setDoInput(boolean doinput) 将此 URLConnection 的 doInput 字段的值设置为指定的值。 |
void |
setDoOutput(boolean dooutput) 将此 URLConnection 的 doOutput 字段的值设置为指定的值。 |
static void |
setFileNameMap(FileNameMap map) 设置 FileNameMap。 |
void |
setIfModifiedSince(long ifmodifiedsince) 将此 URLConnection 的 ifModifiedSince 字段的值设置为指定的值。 |
void |
setReadTimeout(int timeout) 将读超时设置为指定的超时值,以毫秒为单位。 |
void |
setRequestProperty(String key, String value) 设置一般请求属性。 |
void |
setUseCaches(boolean usecaches) 将此 URLConnection 的 useCaches 字段的值设置为指定的值。 |
String |
toString() 返回此 URL 连接的 String 表示形式。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
protected URL url
使用 getURL
方法可访问此字段的值。
此变量的默认值为 URLConnection
构造方法中的 URL 参数的值。
protected boolean doInput
setDoInput
方法设置。其值由
getDoInput
方法返回。
URL 连接可用于输入和/或输出。将 doInput
标志设置为 true
,指示应用程序要从 URL 连接读取数据。
此字段的默认值为 true
。
getDoInput()
,
setDoInput(boolean)
protected boolean doOutput
setDoOutput
方法设置。其值由
getDoOutput
方法返回。
URL 连接可用于输入和/或输出。将 doOutput
标志设置为 true
,指示应用程序要将数据写入 URL 连接。
此字段的默认值为 false
。
protected boolean allowUserInteraction
true
,则在允许用户交互(例如弹出一个验证对话框)的上下文中对此
URL
进行检查。如果为
false
,则不允许有任何用户交互。
使用 setAllowUserInteraction
方法可对此字段的值进行设置。其值由 getAllowUserInteraction
方法返回。其默认值为上一次调用 setDefaultAllowUserInteraction
方法所用的参数的值。
protected boolean useCaches
true
,则只要有条件就允许协议使用缓存。如果为
false
,则该协议始终必须获得此对象的新副本。
此字段由 setUseCaches
方法设置。其值由 getUseCaches
方法返回。
其默认值为上一次调用 setDefaultUseCaches
方法时给定的值。
protected long ifModifiedSince
一个非零值给定一个时间,它表示距离格林威治标准时间 1970 年 1 月 1 日的毫秒数。只有在该时间之后又进行了修改时,才获取该对象。
此变量由 setIfModifiedSince
方法设置。其值由 getIfModifiedSince
方法返回。
此字段的默认值为 0
,表示必须一直进行获取。
protected boolean connected
false
,则此连接对象尚未创建到指定 URL 的通信链接。如果为
true
,则已经建立了通信链接。
构造方法详细信息 |
---|
protected URLConnection(URL url)
url
- 指定的 URL。
方法详细信息 |
---|
public static FileNameMap getFileNameMap()
setFileNameMap(java.net.FileNameMap)
public static void setFileNameMap(FileNameMap map)
如果有安全管理器,此方法首先调用安全管理器的 checkSetFactory
方法以确保允许该操作。这可能会导致抛出 SecurityException 异常。
map
- 要设置的 FileNameMap
SecurityException
- 如果安全管理器存在并且其
checkSetFactory
方法不允许进行此操作。
SecurityManager.checkSetFactory()
,
getFileNameMap()
public abstract void connect() throws IOException
如果在已打开连接(此时 connected
字段的值为 true
)的情况下调用 connect
方法,则忽略该调用。
URLConnection 对象经历两个阶段:首先创建对象,然后建立连接。在创建对象之后,建立连接之前,可指定各种选项(例如,doInput 和 UseCaches)。连接后再进行设置就会发生错误。连接后才能进行的操作(例如 getContentLength),如有必要,将隐式执行连接。
SocketTimeoutException
- 如果在建立连接之前超时期满
IOException
- 如果打开连接时发生 I/O 错误。
connected
,
getConnectTimeout()
,
setConnectTimeout(int)
public void setConnectTimeout(int timeout)
此方法的一些非标准实现可能忽略指定的超时。要查看连接超时设置,请调用 getConnectTimeout()。
timeout
- 一个指定连接超时值的
int
,以毫秒为单位
IllegalArgumentException
- 如果超时参数为负
getConnectTimeout()
,
connect()
public int getConnectTimeout()
返回 0 表明该选项被禁用(即超时为无穷大)。
int
,以毫秒为单位
setConnectTimeout(int)
,
connect()
public void setReadTimeout(int timeout)
此方法的一些非标准实现会忽略指定的超时。要查看读入超时设置,请调用 getReadTimeout()。
timeout
- 一个指定要使用的超时值的
int
,以毫秒为单位
IllegalArgumentException
- 如果超时参数为负
getReadTimeout()
,
InputStream.read()
public int getReadTimeout()
int
,以毫秒为单位
setReadTimeout(int)
,
InputStream.read()
public URL getURL()
URLConnection
的
URL
字段的值。
URLConnection
的
URL
字段的值。
url
public int getContentLength()
content-length
头字段的值。
-1
。
public String getContentType()
content-type
头字段的值。
null
。
getHeaderField(java.lang.String)
public String getContentEncoding()
content-encoding
头字段的值。
null
。
getHeaderField(java.lang.String)
public long getExpiration()
expires
头字段的值。
getHeaderField(java.lang.String)
public long getDate()
date
头字段的值。
0
。返回的值为距离格林威治标准时间 1970 年 1 月 1 日的毫秒数。
getHeaderField(java.lang.String)
public long getLastModified()
last-modified
头字段的值。结果为距离格林威治标准时间 1970 年 1 月 1 日的毫秒数。
URLConnection
引用的资源的上次修改日期,或者如果为未知,则返回 0。
getHeaderField(java.lang.String)
public String getHeaderField(String name)
如果调用的连接多次使用不同的值设置了头字段,则只返回最后一次设置的值。
name
- 头字段的名称。
null
。
public Map<String,List<String>> getHeaderFields()
public int getHeaderFieldInt(String name, int Default)
有些连接类型(例如 http-ng
)具有预解析头,所以存在这种形式的 getHeaderField
。用于这种连接类型的类可重写此方法从而缩短解析过程。
name
- 头字段的名称。
Default
- 默认值。
Default
值。
public long getHeaderFieldDate(String name, long Default)
有些连接类型(例如 http-ng
)具有预解析头,所以存在这种形式的 getHeaderField
。用于该类型的连接可重写此方法和缩短解析过程。
name
- 头字段的名称。
Default
- 默认值。
Default
参数的值。
public String getHeaderFieldKey(int n)
n
个头字段的键。如果少于
n+1
个字段,则返回
null
。
n
- 一个索引,n>=0
n
个头字段的键,或者如果少于
n+1
个字段,则返回
null
。
public String getHeaderField(int n)
n
个头字段的值。如果少于
n+1
个字段,则返回
null
。
此方法可与 getHeaderFieldKey
方法配合使用,以迭代消息中的所有头。
n
- 一个索引,n>=0
n
个头字段的值,或者如果少于
n+1
个字段,则返回
null
getHeaderFieldKey(int)
public Object getContent() throws IOException
此方法首先通过调用 getContentType
方法确定对象的内容类型。如果这是该应用程序第一次遇到的特定内容类型,则会创建适用于该类型的内容处理程序:
setContentHandlerFactory
方法建立了内容处理程序工厂实例,则调用此实例的 createContentHandler
方法,内容类型为其中的一个参数;结果为该内容类型的内容处理程序。 createContentHandler
方法返回 null
,则应用程序会加载以下名称的类:
其中,<contentType> 取自 content-type 字符串,将所有的斜杠字符用sun.net.www.content.<contentType>
句点
('