java 사이트 - 기존 URL에 검색어 매개 변수를 추가하려면 어떻게해야합니까?





링크 측정 (4)


java.net.URI 클래스를 사용하십시오.

기존 String 을 사용하여 새 URI 를 만들어 부분으로 "분해"하고 다른 인스턴스를 인스턴스화하여 수정 된 URL을 어셈블합니다.

URI u = new URI("http://[email protected]&name=John#fragment");

// Modify the query: append your new parameter
StringBuilder sb = new StringBuilder(u.getQuery() == null ? "" : u.getQuery());
if (sb.length() > 0)
    sb.append('&');
sb.append(URLEncoder.encode("paramName", "UTF-8"));
sb.append('=');
sb.append(URLEncoder.encode("paramValue", "UTF-8"));

// Build the new url with the modified query:
URI u2 = new URI(u.getScheme(), u.getAuthority(), u.getPath(),
    sb.toString(), u.getFragment());

키 - 값 쌍을 기존 URL에 쿼리 매개 변수로 추가하고 싶습니다. URL에 질의 부분이나 조각 부분이 있는지 여부를 검사하여 if-clauses를 점프하여 추가를 수행하지만 Apache를 통해이 작업을 수행하는 경우 깨끗한 방법이 있는지 궁금한 점이 있습니다. 커먼즈 라이브러리 또는 이와 동등한 것.

http://example.comhttp://example.com 이됩니다 http://example.com?name=John

http://example.com#fragmenthttp://example.com?name=John#fragment 가됩니다 http://example.com?name=John#fragment

http://[email protected]http://[email protected] 이됩니다 http://[email protected]&name=John

http://[email protected]#fragmenthttp://[email protected]#fragment 가됩니다 http://[email protected]&name=John#fragment

전에이 시나리오를 여러 번 실행했고 URL을 깨지 않고이 작업을하고 싶습니다.




이 작업은 java.net.URI 클래스를 사용하여 기존 인스턴스의 파트를 사용하여 새 인스턴스를 생성함으로써 수행 할 수 있습니다.이 작업은 URI 구문을 준수하는지 확인해야합니다.

쿼리 부분은 null이거나 기존 문자열이므로 다른 매개 변수를 &로 추가하거나 새 쿼리를 시작할 수 있습니다.

public class 26177749 {

    public static URI appendUri(String uri, String appendQuery) throws URISyntaxException {
        URI oldUri = new URI(uri);

        String newQuery = oldUri.getQuery();
        if (newQuery == null) {
            newQuery = appendQuery;
        } else {
            newQuery += "&" + appendQuery;  
        }

        URI newUri = new URI(oldUri.getScheme(), oldUri.getAuthority(),
                oldUri.getPath(), newQuery, oldUri.getFragment());

        return newUri;
    }

    public static void main(String[] args) throws Exception {
        System.out.println(appendUri("http://example.com", "name=John"));
        System.out.println(appendUri("http://example.com#fragment", "name=John"));
        System.out.println(appendUri("http://[email protected]", "name=John"));
        System.out.println(appendUri("http://[email protected]#fragment", "name=John"));
    }
}

산출

http://example.com?name=John
http://example.com?name=John#fragment
http://example.com?email=j[email protected]&name=John
http://[email protected]&name=John#fragment



URI 작성에는 도움이되는 라이브러리가 많이 있습니다 (바퀴를 재발 명하지 마십시오). 시작하기 위해 다음 세 가지가 있습니다.

Java EE 7

import javax.ws.rs.core.UriBuilder;
...
return UriBuilder.fromUri(url).queryParam(key, value).build();

org.apache.httpcomponents:httpclient:4.5.2

import org.apache.http.client.utils.URIBuilder;
...
return new URIBuilder(url).addParameter(key, value).build();

org.springframework:spring-web:4.2.5.RELEASE

import org.springframework.web.util.UriComponentsBuilder;
...
return UriComponentsBuilder.fromUriString(url).queryParam(key, value).build().toUri();

GIST> URI 빌더 테스트




만약 누군가가 이것을 유용하게 찾을 수 있을지 모르겠다. 이것은 '해킹 앤 슬래시 (hash n slash)'방법의 단순한 것이고 특정 문자 만 원하면 멋지게 작동한다.

$dictionary = "abcdfghjklmnpqrstvwxyz23456789";
$dictionary = str_split($dictionary);

// Encode
$str_id = '';
$base = count($dictionary);

while($id > 0) {
    $rem = $id % $base;
    $id = ($id - $rem) / $base;
    $str_id .= $dictionary[$rem];
}


// Decode
$id_ar = str_split($str_id);
$id = 0;

for($i = count($id_ar); $i > 0; $i--) {
    $id += array_search($id_ar[$i-1], $dictionary) * pow($base, $i - 1);
} 




java url