2

2つのURLを次のコードとマージします。

String strUrl1 = "http://www.domainname.com/path1/2012/04/25/file.php";
   String arg = "?page=2";
   URL url1;
    try {
        url1 = new URL(strUrl1);
        URL reconUrl1 = new URL(url1,arg);
        System.out.println(" url : " + reconUrl1.toString());
    } catch (MalformedURLException ex) {
        ex.printStackTrace();
    }

結果に驚いています:http://www.domainname.com/path1/2012/04/25/?page = 2

私はそれが(ブラウザが何をするか)であることを期待しています:http://www.domainname.com/path1/2012/04/25/file.php?page = 2

コンストラクターURL(URLコンテキスト、文字列仕様)に関するjavadocは、RFCを尊重する必要があることを説明しています。

私は何か間違ったことをしていますか?

ありがとう

アップデート :

This is the only problem I encountered with the fonction.
The code already works in all others cases, like browser do
  "domain.com/folder/sub" + "/test" -> "domain.com/test"
  "domain.com/folder/sub/" + "test" -> "domain.com/folder/sub/test"
  "domain.com/folder/sub/" + "../test" -> "domain.com/folder/test"
  ...
4

6 に答える 6

2

いつでも最初に文字列をマージしてから、マージされた文字列に基づいて URL を作成できます。

  StringBuffer buf = new StringBuffer();
  buf.append(strURL1);
  buf.append(arg);
  URL url1 = new URL(buf.toString());
于 2012-04-27T10:24:45.403 に答える
1

試す

String k = url1+arg;
URL url1;
    try {
        url1 = new URL(k);
        //URL reconUrl1 = new URL(url1,arg);
        System.out.println(" url : " + url1.toString());
    } catch (MalformedURLException ex) {
        ex.printStackTrace();
    }
于 2012-04-27T10:25:22.903 に答える
1

ここでは、パラメーターを として取る URL のコンストラクターを使用していますURL(URL context, String spec)。そのため、php ページに URL を渡すのではなく、文字列を渡します。context はディレクトリである必要があります。これを行う適切な方法は

  String strUrl1 = "http://www.domainname.com/path1/2012/04/25";
  String arg = "/file.php?page=2";
  URL url1;
  try {
    url1 = new URL(strUrl1);
    URL reconUrl1 = new URL(url1,arg);
    System.out.println(" url : " + reconUrl1.toString());
 } catch (MalformedURLException ex) {
    ex.printStackTrace();
 }
于 2012-04-27T10:30:17.030 に答える
1

私はRFCを読んでいませんが、コンテキスト( URLの Java Doc で言及されているように) はおそらく URL のディレクトリです。

"http://www.domainname.com/path1/2012/04/25/file.php"

"http://www.domainname.com/path1/2012/04/25/"

というわけで

new URL(url1,arg);

収量

"http://www.domainname.com/path1/2012/04/25/?page=2"

「回避策」は明らかに、を使用してパーツを自分で連結すること+です。

于 2012-04-27T10:29:18.617 に答える
0

これを試して

String strUrl1 = "http://www.domainname.com/path1/2012/04/25/";
       String arg = "file.php?page=2";
       URL url1;
        try {
            url1 = new URL(strUrl1);
            URL reconUrl1 = new URL(url1,arg);
            System.out.println(" url : " + reconUrl1.toString());
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        }
于 2012-04-27T10:31:50.863 に答える
0


Java doc を読むと、ドメインとパス である指定された URL のコンテキストについて言及されています。

"http://www.domainname.com"  +  "/path1/2012/04/25/"

Where"file.php"は、上記のコンテキストに属するテキストと見なされます。
この 2 つのパラメーターのオーバーロードされたコンストラクターは、URL のコンテキストをベースとして使用し、2 番目のパラメーターを追加して完全な URL を作成しますが、これは必要なものではありません。

そのため、文字列で 2 つの部分を追加してから、それらから URL を作成することをお勧めします。

   String contextURL = "http://www.domainname.com/path1/2012/04/25/";
   String textURL = "file.php?page=2";
   URL url;
    try {
        url = new URL(contextURL);
        URL reconUrl = new URL(url, textURL);
        System.out.println(" url : " + reconUrl.toString());
    } catch (MalformedURLException murle) {
        murle.printStackTrace();
    }
于 2012-04-27T10:38:28.720 に答える