淺談Java中的URL和URLConnection
URI 和 URLConnection
java.net.URL 類將 URL 地址進(jìn)行了封裝,并提供了解析 URL 地址的基本方法,比如獲取 URL 的主機(jī)名和端口號。
java.net.URLConnection 則代表了應(yīng)用程序和 URL 之間的通信鏈接,可用于讀取和寫入此 URL 引用的資源。
- URI = Universal Resource Identifier ,中文釋義為統(tǒng)一資源標(biāo)志符
- URL = Universal Resource Locator ,中文釋義為統(tǒng)一資源定位符
- URN = Universal Resource Name ,中文釋義為統(tǒng)一資源名稱
URI 可以分為 URL 和 URN,或者是 URL 和 URN 的結(jié)合體(同時具備 Locator 和 Name)。
URN 就好像一個人的名字,URL 就像一個人的地址。
換句話說:URN 確定了身份,URL 提供了找到它的方式。
URL其實(shí)是一種資源
URL代表的是一種資源,它使用的是統(tǒng)一資源定位格式,形如:https://juejin.cn, 其實(shí)我們還可以用URL來構(gòu)造對象的,使用字符串嗎?
不是的,java中有大量的構(gòu)造函數(shù)允許使用一個個的分串來指定URL,有了URL對象就可以通過幾個不用的方法來獲取URL對應(yīng)的內(nèi)容,沒錯,我說的就是網(wǎng)頁:
import java.net.*;
import java.io.*;
public class IntTest{
public static void main(String [] args) throws Exception{
URL url = new URL(args[0]);
InputStream html = url.openStream();
int c;
do{
c = html.read();
if(c != -1){
System.out.print((char) c);
}
}while(c != -1);
}
}URLConnection
一般靜態(tài)的操作就都是很容易的,使用一個URL對象讀取一個URL簡直不要太容易,剛才說的靜態(tài)是我自己起的,其實(shí)并沒有這個說法,而是我聯(lián)想到數(shù)據(jù)結(jié)構(gòu),像讀取這樣的操作都是靜態(tài)的 ,于是我在這里也算是做相同的比喻;
如果你想對HTTP事務(wù)做更多的控制呢?
比如說我們肯定需要往服務(wù)器提交一些數(shù)據(jù),需要URL對象的 openConnection 函數(shù),這個函數(shù)可以返回一個 URLConnection 對象,如果URL使用了HTTP協(xié)議,那么URLConnection 對象會返回一個URLConnection的子類:HttpURLConnection;
import java.net.*;
import java.io.*;
public class Handin{
public static void main(String [] args) throws Exception{
URL url=new URL(""http//com.aaaaa.com"");//網(wǎng)址瞎編的
HttpURLConnection con=(HttpURLConnection)url.openConnection();
int c;
con.setDoInput(true);
con.setDoOutput(true);
con.setrequestMethod("POST");
con.setRequestProperty("Content-type","application/X-WWW-form-urlencoded");
con.connect();
PrintWriter pri=new PrintWriter{
new OutputStreamWriter{con.getOutputStream(),"12321",true}
pri.print("sasd"+URLEncoder.encode(args[0]+'dasda'));
pri.flush();
System.out.println(con.getResponseMessage());
InputStream in=con.getInputStream();
do{
char x;
c=in.read();
x=(char)c;
if(c!=-1){
System.out.print(x);
}
}while(c!=-1);
}
}關(guān)于HttpURLConnection,獲取HttpURLConnection對象只能是用 //URL (注意我這里只是寫了一個格式而已)來創(chuàng)建,并調(diào)用HttpURLConnection對象的openConnection函數(shù),然后把返回的URLConnection值賦給HttpURLConnection。
URLStreamHandler
URL和URLConnection都是指派URLStreamHandler和URLConnection來干活,經(jīng)過封裝之后,URL對象會檢查他的URL協(xié)議端口,然后調(diào)用URLStreamHandlerFactory的一個對象,這個對象主要用于創(chuàng)建URLStreamHandler子類,使得與指定的協(xié)議相符合;
子類URLStreamHandler創(chuàng)建一個相應(yīng)的URLConnection對象,也解析URL,這樣你可以定義用戶化URL格式,對象URLConnection通常都是和服務(wù)器打交道的。
import java.net.*;
import java.io.*;
public class TimeURLConnection extends URLConnection{
private Socket con;
public final static int de=13;
public TimeURLConnection void connect() throws IOException{
if(!=connected){
int port=url.getPort();
if(port<0) port=de;
con=new Socket(url.getHost(),port);
connected=true;
}
}
public synchronized InputStream getInputStream() throws IOException{
connect();
return con.getInputStream();
}
}到此這篇關(guān)于淺談Java中的URL和URLConnection的文章就介紹到這了,更多相關(guān)Java的URL和URLConnection內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis SQL日志如何轉(zhuǎn)換為可執(zhí)行sql
這篇文章主要介紹了Mybatis SQL日志如何轉(zhuǎn)換為可執(zhí)行sql問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Java中JFrame實(shí)現(xiàn)無邊框無標(biāo)題方法
這篇文章主要介紹了Java中JFrame實(shí)現(xiàn)無邊框無標(biāo)題方法,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-05-05
Java實(shí)戰(zhàn)之字符編碼問題的幾種解決方案
在Java中設(shè)置字符編碼是一個常見且重要的操作,特別是在處理文件讀寫、網(wǎng)絡(luò)通信等場景時,下面這篇文章主要介紹了Java實(shí)戰(zhàn)之字符編碼問題的幾種解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-02-02

