2010-07-15 1 views
2

Знаете ли вы какую-либо службу JDK в Java 1.5, которая знает, как позаботиться о добавлении URL? (забота о пометке «?» или «&» зависит от того, что параметр запроса является первым или нет).Как добавить URL-адрес в java

Спасибо, Shay

+0

Сомневаюсь, что вы найдете для этого услугу. Реализация этого довольно тривиальна. –

+2

Не стандартная часть JDK, но [этот предыдущий вопрос] (http://stackoverflow.com/questions/883136/is-there-a-good-url-builder-for-java) дает ответ на использование Apache HTTPClient для создания URL-адреса. – mikej

ответ

1

Довольно простой пример (и очень похож на пример Noel M, который разместил его в то время как я пишу это) будет:

StringBuilder sb = new StringBuilder(url); 
url.indexOf("?") > -1 ? sb.append("&") : sb.append("?"); 

// loop over your paramaters and append them like in Noel M's example 

url = sb.toString(); 
1
public String buildUrl(String url, List<String> params) { 
    StringBuilder builder = new StringBuilder(url); 
    if(params != null && params.size() > 0) { 
     builder.append("?"); 

     for(Iterator<String> i = params.iterator(); i.hasNext();) { 
      String s = i.next(); 
      builder.append(s); 
      if(i.hasNext()) { 
       builder.append("&"); 
      } 
     } 
    } 

    return builder.toString(); 
} 
3

Этот простой класс для URL-адрес построения сохраняет меня много времени:

public class LinkBuilder { 

    protected String scheme; 
    protected String host; 
    protected int port; 
    protected Map<String, String> args = new HashMap<String, String>(); 
    protected String path; 
    protected String hash; 

    public LinkBuilder() { 
     this(null, null, 0, new HashMap<String, String>(), null, null); 
    } 

    protected LinkBuilder(LinkBuilder other) { 
     this.scheme = other.scheme; 
     this.host = other.host; 
     this.port = other.port; 
     this.args = new HashMap<String, String>(); 
     if (other.args != null) { 
      this.args.putAll(other.args); 
     } 
     this.path = other.path; 
     this.hash = other.hash; 
    } 

    protected LinkBuilder(String schema, String host, int port, Map<String, String> args, String path, String hash) { 
     this.scheme = schema; 
     this.host = host; 
     this.port = port; 
     this.args = new HashMap<String, String>(); 
     if (args != null) { 
      this.args.putAll(args); 
     } 
     this.path = path; 
     this.hash = hash; 
    } 

    public LinkBuilder(URI url) { 
     String query = url.getRawQuery(); 
     if (query != null) { 
      for (String argLine : query.split("&")) { 
       if (argLine.length() > 0) { 
        int i = argLine.indexOf('='); 
        if (i != -1) { 
         args.put(argLine.substring(0, i), argLine.substring(i + 1)); 
        } 
        else { 
         args.put(argLine, null); 
        } 
       } 
      } 
     } 
     this.scheme = url.getScheme(); 
     this.host = url.getHost(); 
     this.port = url.getPort(); 
     this.path = url.getRawPath(); 
     this.hash = url.getRawFragment(); 
    } 

    public LinkBuilder url(URI url) { 
     return new LinkBuilder(url); 
    } 

    public LinkBuilder scheme(String schema) { 
     return new LinkBuilder(schema, host, port, args, path, hash); 
    } 

    public LinkBuilder host(String host) { 
     if (host.indexOf('/') != -1) { 
      throw new IllegalArgumentException("Wrong host name: " + host); 
     } 
     return new LinkBuilder(scheme, host, port, args, path, hash); 
    } 

    public LinkBuilder port(int port) { 
     return new LinkBuilder(scheme, host, port, args, path, hash); 
    } 

    public LinkBuilder hash(String hash) { 
     return new LinkBuilder(scheme, host, port, args, path, hash); 
    } 

    public LinkBuilder path(String path) { 
     return new LinkBuilder(scheme, host, port, args, path, hash); 
    } 

    public LinkBuilder arg(String name) { 
     return arg(name, null); 
    } 

    public LinkBuilder arg(String name, Object value) { 
     Map<String, String> newArgs = new HashMap<String, String>(args); 
     newArgs.put(name, value == null ? null : value.toString()); 
     return new LinkBuilder(scheme, host, port, newArgs, path, hash); 
    } 

    public String build() { 
     StringBuilder buf = new StringBuilder(); 
     if (scheme != null) { 
      buf.append(scheme); 
     } 
     buf.append("://"); 
     if (host != null) { 
      buf.append(host); 
     } 
     if (port > 0 && !"https".equals(scheme)) { 
      buf.append(':').append(port); 
     } 
     if (path != null) { 
      if (path.charAt(0) != '/') { 
       buf.append('/'); 
      } 
      buf.append(path); 
     } 
     else if (args.size() > 0 || hash != null) { 
      buf.append('/'); 
     } 
     if (args.size() > 0) { 
      buf.append('?'); 
      boolean first = true; 
      for (Entry<String, String> arg : args.entrySet()) { 
       if (!first) { 
        buf.append('&'); 
       } 
       else { 
        first = false; 
       } 
       buf.append(URLEncoder.encode(arg.getKey(), "UTF-8")); 
       if (arg.getValue() != null && arg.getValue().length() > 0) { 
        buf.append("=").append(URLEncoder.encode(arg.getValue(), "UTF-8")); 
       } 
      } 
     } 
     if (hash != null) { 
      buf.append('#').append(hash); 
     } 
     return buf.toString(); 
    } 

    public String toString() { 
     return build(); 
    } 
} 

Использование очень простое :

new LinkBuilder() 
    .scheme("http") 
    .host("stackoverflow.com") 
    .path("https://stackoverflow.com/questions/3253058/how-to-append-url-in-java/3253350") 
    .hash("3253350") 
    .build(); // Generates link to this post 

new LinkBuilder(new URI("http://www.google.com/search")) 
    .arg("q", "Bugs Bunny") 
    .arg("ie", "UTF-8") 
    .build(); // Results in http://www.google.com/search?q=Bugs+Bunny&ie=UTF-8 

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^