URLs,URIs,Proxies和Passwords 解析[6]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

记住类URI  与URI规范是不同的。所以像é 和 ü 这种非ASCII字符绝不会在第一位置以%xx形式出现,所以在用方法getRawFoo() 返回得到的string中,仍将回出现在其中;除非本来被用做构建URI对象的string已被编码。
注意: 这里没有方法getRawPort( ) 和 getRawHost( )  ,因为这些部分总是被保证由ASCII字符构成的,至少现在是这样的。国际化的域名时代即将来临,希望在java以后的版本中能重新思考这一做法。

事实上,具体的URI不会包括这些信息—例如,这个URI,http://www.example.com 就没有user info, path, port, 或 query string—相应的方法就返回null。方法getPort( )  是唯一例外。因为它被声明为返回一个int ,所以它不能返回null。它就用返回-1来代替,来表示没有port的信息。
由于各种技术上的也不会有多大实际影响的原因,java不会一开始就在认证部分做语法错误检察。这样做的一个很自然的后果就是不会返回认证的各个部分:port, host,  user info。这种情况下,你可以调用parseServerAuthority()  让认证(authority)被强制再解析:

public URI parseServerAuthority( )  throws URISyntaxException



这个最初的URI 不会发生变化(URI对象是永远不会变的),但是URI 的返回值将会是authority被分开后的部分:user info, host,  port。如果这个authority不能被解析,会抛出URISyntaxException 异常。

例子7-10使用这些方法把输入在命令行上的URI分成了它的那几个组成部分。这与例子7-4相似,只是它处理的是语法上正确的URI,而不要求JDK必须提供一个合适的protocal 处理器。
Example 7-10. The parts of a URI

import java.net.*;

public class URISplitter {

  public static void main(String args[]) {

    for (int i = 0; i < args.length; i++) {
      try {
        URI u = new URI(args[i]);
        System.out.println("The URI is " + u);
        if (u.isOpaque( )) {
          System.out.println("This is an opaque URI.");
          System.out.println("The scheme is " + u.getScheme( ));        
          System.out.println("The scheme specific part is "
           + u.getSchemeSpecificPart( ));        
          System.out.println("The fragment ID is " + u.getFragment( ));        
        }
        else {
          System.out.println("This is a hierarchical URI.");
          System.out.println("The scheme is " + u.getScheme( ));        
          try {      
            u = u.parseServerAuthority( );
            System.out.println("The host is " + u.getUserInfo( ));        
            System.out.println("The user info is " + u.getUserInfo( ));        
            System.out.println("The port is " + u.getPort( ));        
          }
          catch (URISyntaxException ex) {
            // Must be a registry based authority
            System.out.println("The authority is " + u.getAuthority( ));        
          }
          System.out.println("The path is " + u.getPath( ));        
          System.out.println("The query string is " + u.getQuery( ));        
          System.out.println("The fragment ID is " + u.getFragment( ));
        } // end else      
      }  // end try
      catch (URISyntaxException ex) {

本文关键:URLs,URIs,Proxies和Passwords 解析
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top