精华内容
下载资源
问答
  • 关于UrlConnection连接Socket连接的区别,只知道其中的原理如下:抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节。urlconnection 基于Http协议,Http协议是应用层协议,对传输层Tcp...

    关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下:

    抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节。

    urlconnection 基于Http协议,Http协议是应用层协议,对传输层Tcp协议进行了封装,是无状态协议,不需要你往考虑线程、同步、状态治理等,

    内部是通过socket进行连接和收发数据的,不过一般在数据传输完成之后需要封闭socket连接。

    直接使用Socket进行网络通讯得考虑线程治理、客户状态监控等,但是不用发送头信息等,更省流量。

    并不知道我们经常使用的URLConnection 内部是怎么实现的,今天心血来潮以URL为出发点来探个究竟。

    以下面这段代码为出发点

    URL url = new URL("http://zhoujianghai.iteye.com");

    URLConnection conecttion = (URLConnection)url.openConnection();

    根据java.net.URL源码,一步步进行分析,

    new URL("www.javaeye.com")会调用URL(URL context, String spec, URLStreamHandler handler),

    此时context和handler是null。

    url.openConnection()调用的是strmHandler.openConnection(this);

    而strmHandler是URLStreamHandler接口的子类的实例。

    抽象类 URLStreamHandler 是所有流协议处理程序的通用超类,可以通过不同 protocol 的 URL 实例,产生 java.net.URLConnection 对象。

    由于context和handler是null,所以终极根据具体的协议调用URL类中的setupStreamHandler()方法对strmHandler进行初始化。

    下面分析 setupStreamHandler()方法内的代码。

    ?

    ?

    String packageList = AccessController.doPrivileged(new PriviAction(

    "java.protocol.handler.pkgs"));

    ?

    ?

    首先通过java.protocol.handler.pkgs 来设置 URLStreamHandler 实现类的包路径,SUN 的 JDK 内部实现类均是在 sun.net.www.protocol. 包下。

    关于sun/net/www/protocol/http包下相关类的源码,可以访问:http://www.docjar.org/docs/api/sun/net/www/protocol/http/package-index.html

    PriviAction 部分源码:

    public PriviAction(String property) {

    action = GET_SYSTEM_PROPERTY;

    arg1 = property;

    }

    public T run() {

    switch (action) {

    case GET_SYSTEM_PROPERTY:

    return (T)System.getProperty((String) arg1, (String) arg2);

    case GET_SECURITY_PROPERTY:

    return (T)Security.getProperty((String) arg1);

    case GET_SECURITY_POLICY:

    return (T)Policy.getPolicy();

    case SET_ACCESSIBLE:

    ((AccessibleObject) arg1).setAccessible(true);

    }

    return null;

    }

    PriviAction 实现了 java.security.PrivilegedAction接口,会执行run()方法。

    由action = GET_SYSTEM_PROPERTY;可知会执行代码:

    (T)System.getProperty((String) arg1, (String) arg2);

    System.getProperty方法调用成员变量Properties props的getProperty(key, def)方法;

    由于并未设置任何Properties,此处会返回默认值def。def的值是null。

    因此会继续执行下面的代码:

    String className = "org.apache.harmony.luni.internal.net.www.protocol." + protocol

    + ".Handler";

    try {

    strmHandler = (URLStreamHandler) Class.forName(className)

    .newInstance();

    } catch (IllegalAccessException e) {

    } catch (InstantiationException e) {

    } catch (ClassNotFoundException e) {

    }

    此时protocol是http协议,从而根据协议 (protocol) 获得协议 URLStreamHandler 对象。

    所以此时通过反射机制创建org.apache.harmony.luni.internal.net.www.protocol.http.Handler类的实例。

    此时回到上面提到的 strmHandler.openConnection(this);

    将调用下面的Handler类的实例的openConnection(URL u)方法。

    protected URLConnection openConnection(URL u) throws IOException {

    return new HttpURLConnectionImpl(u, getDefaultPort());

    }

    ected URLConnection openConnection(URL u, Proxy proxy)

    throws IOException {

    if (null == u || null == proxy) {

    throw new IllegalArgumentException(Messages.getString("luni.1B"));

    }

    return new HttpURLConnectionImpl(u, getDefaultPort(), proxy);

    }

    此时会创建HttpURLConnectionImpl对象。HttpURLConnectionImpl是java.net.HttpURLConnection的子类。 该类有个成员变量

    HttpConnection connection;这才是我们要找的,该类对Socket进行了封装。

    HttpConnection 部分源码如下:

    private Socket socket;

    private SSLSocket sslSocket;

    private InputStream inputStream;

    private OutputStream outputStream;

    private InputStream sslInputStream;

    private OutputStream sslOutputStream;

    private HttpConfiguration config;

    public HttpConnection(HttpConfiguration config, int connectTimeout) throws IOException {

    this.config = config;

    String hostName = config.getHostName();

    int hostPort = config.getHostPort();

    Proxy proxy = config.getProxy();

    if(proxy == null || proxy.type() == Proxy.Type.HTTP) {

    socket = new Socket();

    } else {

    socket = new Socket(proxy);

    }

    socket.connect(new InetSocketAddress(hostName, hostPort), connectTimeout);

    }

    现在UrlConnection连接和Socket连接的区别应该十分清楚了吧。

    使用UrlConnection比直接使用Socket要简单的多,不用关心状态和线程治理。

    UrlConnection基于Http协议,只是进行了封装,添加了一些额外规则(如头信息),本质上也是建立TCP连接,利用Socket

    实现连接和传输数据的,不过我们一般每次请求完数据后都会实现finally方法,在该方法里封闭连接。

    展开全文
  • URL和URI的区别

    2019-07-05 15:58:35
    在做后端的过程中,经常会遇到URL和URI这两个名词,以前一直觉得他俩没什么却别,都是一个连接地址罢了,今天看restul教程的时候,提到URI,实在搞不明白到底是什么,就上网查了他们的区别,特开贴记录 不用看太...

    在做后端的过程中,经常会遇到URL和URI这两个名词,以前一直觉得他俩没什么却别,都是一个链接地址罢了,今天看restful教程的时候,提到URI,实在搞不明白到底是什么,就上网查了他们的区别,特开贴记录

    1. 不用看太专业的文章
      除非你是专门深入研究这块的,否则不用看太专业的文章,网上对这个概念解释的也是五花八门的,我觉得我看不懂这些o(╯□╰)o

    2. 概念区别
      URL = Universal Resource Locator 统一资源定位符
      URI = Universal Resource Identifier 统一资源标志符
      顾名思义。Locator:位置,定位,identifier:标识。
      URI:某个网络资源的标记
      URL:访问网络上某个URI的路径

    总结

    URI仅仅标记了一个网络资源
    URL用地址的形式访问该网络资源,并且给出了访问路径
    URL一定是URI,但是URI不一定是URL
    两者的联系就是:通过URL地址访问网络资源URI

    展开全文
  • url和超级url的区别

    2020-08-04 22:50:33
    URL,统一资源定位符 (Uniform Resource Locator, URL) 是用于完整bai地描述Internet上网页du其他资源地址一种标识方法。俗称zhi“网址”。 所谓超链dao接是指从一个网页指向一个目标的连接关系,这个目标可以...

    URL,统一资源定位符 (Uniform Resource Locator, URL) 是用于完整bai地描述Internet上网页和du其他资源的地址的一种标识方法。俗称zhi“网址”。
    所谓的超链dao接是指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是一个图片,一个电子邮件地址,一个文件,甚至是一个应用程序。
    URL只是网页上超链接的一种

     

    参考:https://zhidao.baidu.com/question/73351546.html

    展开全文
  • H2数据库连接的jdbc中url的区别

    千次阅读 2018-10-12 11:28:14
    H2数据库连接的jdbc中url的区别 h2分嵌入模式服务模式 1:嵌入模式的url的写法 #url = jdbc:h2:D:/java/workspace/dss/data/dss #由本程序进行数据库操作的独占,如果启动了数据库服务,则报错 — 嵌入模式 #不能...

    H2数据库连接的jdbc中url的区别

    h2分嵌入模式和服务模式
    1:嵌入模式的url的写法
    #url = jdbc:h2:D:/java/workspace/dss/data/dss
    #由本程序进行数据库操作的独占,如果启动了数据库服务,则报错 — 嵌入模式
    #不能开h2数据库的

    2:服务模式url的写法
    url = jdbc:h2:tcp://localhost/D:/java/workspace/dss/data/dss
    #可共享,可以在本地启动数据库server,进行数据库的增删改查 — server模式
    #必须要开h2数据库的,不开就会报错的

    区别:
    1、嵌入模式中没有tcp://localhost
    2、嵌入模式不能开h2数据库,服务模式必须开h2数据库,不开会报错的。

    展开全文
  • 内连接等值连接的区别

    千次阅读 2014-06-09 15:46:29
    内连接等值连接的区别   url:   内连接就是满足连接条件的结果集,这是相对于外连接而言。 外连接即使找不到满足条件的记录,另一方的记录还是要输出 INNER JOIN可以不等: select * from t1 inner join...
  • 连接oralce数据库url: jdbc:oracle:thin:@10.18.1.11:1522:orcl jdbc:oracle:thin:@10.18.1.11:1522/orcl 这两种连接方式有什么区别?经测试这两种都可以使用
  • 今天安装了oracle11g后,写了JDBC测试程序,一直都连接不上! 一直找不到原因 ...后来读了一下安装文件中Readme.txt文档,汗啊!这个版本居然把url的访问方式改变了: Some Useful Hints In Using the J...
  • 最近遇到了mysql连接url不同,导致程序出现乱码问题,采用是spring架构,同样程序数据库运行在不同平台上就出现了乱码问题,经查实是url出错,导致参数无法读进来。 先记录一下,以待解决: 1.连接...
  • 转载 - URL和URI的区别

    2011-01-19 13:47:00
    url:同一资源定位符uri:同一资源标志符url定位客户端连接到服务器所需要信息,如http://www.csdn.nethttp://tcc.com:8080/servlet/logon?name=zhangsan&addr=tttt完整构成<protocol>://<servername&...
  • URI:Uniform Resource Identifier... URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。 U
  • URI和URL的区别及联系

    2020-06-03 00:13:21
    先介绍一下,URI(统一资源标识符),URL(Uniform Resource Locator,统一...另一种就是URN,这是URL的一种更新形式,URN不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件
  • 2020.4.9输入输出密码两种方式像input中得到输入数据类型是string类型,所以双引号中数据类型是相同,均为string.所以在输出时候可以用+号来相连接(这个是我在扇贝编程里面学到),因此输出...
  • jdbc连数据库时的url“:”是什么意思? 查url的rfc文档 :是一种协议约定,用来分割协议或者域 问题来源: 项目配置文件如下写法 ,都可以用 Navicat链接属性:(同一个ip地址) sid连接成功 服务名...
  • http持久连接和非持久连接区别

    千次阅读 2015-06-06 20:30:56
    HTTP 协议概要 非持久连接 ...设这个网页的URL为www.server.com/somepath/index.html。如果用户请求该网页并采用“非持久连接”,那么在HTTP 客户(通常是用户浏览器)服务器之间将发生以下操作: 1. HTTP 客
  • GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT ...URI和URL的区别 HTTP使用统一资源标识符(URI)来传输数据建立连接。 URI:Uniform Resource Identifier 统一资源标识符 URL:Uniform Resource Lo
  • URL和URI区别

    2010-06-19 16:42:19
    url:同一资源定位符 uri:同一资源标志符,url定位客户端连接到服务器所需要信息,如:http://www.csdn.net ,http://tcc.com:8080/servlet/logon?name=zhangsan&addr=tttt 完整构成 ://[:p...
  • Sql Server20002005的连接代码区别连接代码时需要注意20002005不同:1、连接SqlServer2000Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();URL = "jdbc:microsoft:sqlserver:...
  • 连接和连接区别

    2009-07-30 10:38:26
    在之前,我对MSSQL中连接和连接所得出数据集不是很清楚。这几天重新温习了一下SQL书本,现在思路应该是很清楚了,现在把自己理解发出来给大家温习下。希望我一样对SQL的连接语句不太理解朋友能够...
  • 可以看Java帮助文档,就能清楚它们之间的区别: public URLConnection openConnection() throws IOException——返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。每次调用此URL的协议处理程序的...
  • //看看thinoci的url写法上的区别: jdbc:oracle:thin:@server ip: service jdbc:oracle:oci:@service /* 1)从使用上来说,oci必须在客户机上安装oracle客户端或才能连接,而thin就不需要,因此从使用上...
  • Sql Server20002005的连接代码区别 写连接代码时需要注意20002005不同:1、连接SqlServer2000 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); URL = "jdbc:microsoft:sql...
  • url: jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver 2、5.6写法 jdbc.driver=com.my
  • 在要连接的数据库中类添加如下java代码(也可以作为一个类进行封装)即可Connection conn = null;try {Class.forName("oracle.jdbc.driver.OracleDriver"); //注册数据库驱动try {String url = "jdbc:oracle:thin:@...
  • 本文为学习笔记 URL:统一资源定位符(uniform...http1.0http1.1的区别: http1.0:一次连接只能有一次请求。(浪费资源) http1.1:一次连接可以有多次请求。(keep-alive) 常见的网络架构: C/S:clien...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,298
精华内容 519
关键字:

url和连接的区别