指引网

当前位置: 主页 > 编程开发 > Java >

Java网络编程之URI、URL研究专题三

来源:网络 作者:佚名 点击: 时间:2017-11-14 05:54
[摘要] 典型情况下URI构造函数用于建立封装用户指定的URI的URI对象。因为用户可能输入不正确的URI,所以URI构造函数产生已检查的URISyntaxException对象。这意味着你的代码必须明确地尝试着调用某个UR

  典型情况下URI构造函数用于建立封装用户指定的URI的URI对象。因为用户可能输入不正确的URI,所以URI构造函数产生已检查的URISyntaxException对象。这意味着你的代码必须明确地尝试着调用某个URI构造函数并捕捉异常,或者通过在该方法的Throws子句中列举URISyntaxException以"推卸责任"。
  
  如果你知道URI是有效的(例如在源代码中的URI),将不会产生URISyntaxException对象。因为在这种情况下处理某个URI构造函数的异常处理要求可能有困难,所以URI提供了静态的create(String uri)方法。
  
  这个方法分解通过uri引用的String对象中包含URI,如果该URI没有违反任何语法规则就建立URI对象(并从方法中返回对它的引用),否则将捕捉到一个内部的URISyntaxException对象,把该对象包装金一个未检查的IllegalArgumentException对象中,并抛出这个IllegalArgumentException对象。
  
  因为IllegalArgumentException是未检查的,你不需要明确的尝试代码并捕捉异常或把它的类名称列举在Throws子句中。
  
  下面的代码片断演示了create(String uri):
  
  URI uri = URI.create ("http://www.cnn.com");
  
  URI构造函数和create(String uri)方法试图分解出某个URI的授权机构组件的用户信息、主机和端口部分。对于按正常形式形成的基于服务器的授权机构组件,它们是会成功的。对于按拙劣的形式形成的基于服务器的授权机构组件,他们将会失败--并且把该授权机构组件当作是基于注册的。
  
  有时你可能知道某个URI的授权机构组件必须是基于服务器的。你可以确保该URI的授权机构组件分解出用户信息、主机和端口,或者你可以确保将产生一个异常(伴随着相应的诊断信息)。你可以通过调用URI的parseServerAuthority()方法实现这种操作。
  
  如果成功分解出URI,该方法将返回包含提取的用户信息、主机和端口部分的URI的新URI对象的一个引用(但是如果授权机构组件已经被分解过了,将会返回调用parseServerAuthority()的URI对象的引用。),否则该方法将产生一个URISyntaxException对象。
  
  下面的代码片断演示了parseServerAuthority():
  
  // 下面的parseServerAuthority()调用出现后会发生什么情况?
  
  URI uri = new URI ("//foo:bar").parseServerAuthority();
  
  一旦拥有了URI对象,你就可以通过调用getAuthority()、getFragment()、getHost()、getPath()、getPort()、getQuery()、getScheme()、getSchemeSpecificPart()和 getUserInfo()方法提取多种组件。
  
  你也可以通过调用isAbsolute()确定该URI是绝对的还是相对的,通过调用isOpaque()确定该URI是不透明的还是分层的。如果返回值是true意味着该URI是绝对的或不透明的,如果返回值是false意味着该URI是相对的或分层的。
  
  列表1中的程序用命令行参数建立了一个URI对象,调用URI组件提取方法来检索URI的组件,并调用URI的isAbsolute()和isOpaque()方法把该URI分类为绝对的/相对性和不透明的/分层的。
  
  列表1: URIDemo1.java
  
  // URIDemo1.java
  
  import java.net.*;
  
  class URIDemo1
  
  {
  
  ublic static void main (String [] args) throws Exception
  
  {
  
  if (args.length != 1)
  
  {
  
  System.err.println ("usage: java URIDemo1 uri");
  
  return;
  
  }
  
  URI uri = new URI (args [0]);
  
  System.out.println ("Authority = " +uri.getAuthority ());
  
  System.out.println ("Fragment = " +uri.getFragment ());
  
  System.out.println ("Host = " +uri.getHost ());
  
  System.out.println ("Path = " +uri.getPath ());
  
  System.out.println ("Port = " +uri.getPort ());
  
  System.out.println ("Query = " +uri.getQuery ());
  
  System.out.println ("Scheme = " +uri.getScheme ());
  
  System.out.println ("Scheme-specific part = " +
  
  uri.getSchemeSpecificPart ());
  
  System.out.println ("User Info = " +uri.getUserInfo ());
  
  System.out.println ("URI is absolute: " +uri.isAbsolute ());
  
  System.out.println ("URI is opaque: " +uri.isOpaque ());
  
  }
  
  }
------分隔线----------------------------