用java实现RFC862、RFC863、RFC865、RFC867、RFC868的源代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java实现RFC862、RFC863、RFC865、RFC867、RFC868的源代码相关的知识,希望对你有一定的参考价值。

用我们学的java实现,急用 谢谢大家了 要比较简练的,不要代码特别长的,当然实在不能写比较短的,长的也行啦
要遵照上面的RFC协议实现啊

参考技术A 感觉你是在用钱买东西 参考技术B 朋友 做人不要这么懒啊 既然你现在在学 那就好好学 上上网 多找资料,问问同学老师那些的 不要动不动就找答案,虽然你 悬赏分很惊人,100分,但是 我还是觉得你应该自己去摸索 这样对你自己以后攻克更多的 难题有帮助 这个还不是最难的 现在这样了以后呢,以后还有更难的,所以 呵呵 ,建议你 自己摸索,希望你成功

Java URL 类 getPath()、getQuery() 和 getFile() 与 RFC3986 URI 语法不一致

【中文标题】Java URL 类 getPath()、getQuery() 和 getFile() 与 RFC3986 URI 语法不一致【英文标题】:Java URL Class getPath(), getQuery() and getFile() inconsistent with RFC3986 URI Syntax 【发布时间】:2015-07-12 06:27:42 【问题描述】:

我正在编写一个半包装 Java 的 URL class 的实用程序类,并且我编写了一堆测试用例来验证我使用自定义实现包装的方法。对于某些URL 字符串,我不理解某些Java 的getter 的输出。

根据 RFC 3986 规范,路径组件定义如下:

The path is terminated by the first question mark ("?") or number sign   
("#") character, or by the end of the URI.

查询组件定义如下:

The query component is indicated by the first question
mark ("?") character and terminated by a number sign ("#") character
or by the end of the URI.

我有几个测试用例被 Java 视为有效 URL,但路径、文件和查询的 getter 没有返回我预期的值:

URL url = new URL("https://www.somesite.com/?param1=val1");

System.out.print(url.getPath());
System.out.println(url.getFile());
System.out.println(url.getQuery());

以上结果如下:

//?param1=val1
param1=val1
<empty string>

我的另一个测试用例:

URL url = new URL("https://www.somesite.com?param1=val1");

System.out.print(url.getPath());
System.out.println(url.getFile());
System.out.println(url.getQuery());

以上结果如下:

?param1=val1
param1=val1
<empty string>

根据Java URL的文档:

public String getFile()

Gets the file name of this URL. The returned file portion will be the  
same as getPath(), plus the concatenation of the value of getQuery(), if 
any. If there is no query portion, this method and getPath() will return 
identical results.

Returns:
    the file name of this URL, or an empty string if one does not exist

所以,当调用 getQuery() 时,我的测试用例会导致空字符串。在这种情况下,我希望getFile() 返回与getPath() 相同的值。事实并非如此。

我预计两个测试用例的输出如下:

<empty string>
?param1=val1
param1=val1

也许我对 RFC 3986 的解释不正确。但是我看到的输出也不符合 URL 类的文档?谁能解释我所看到的?

【问题讨论】:

【参考方案1】:

这里有一些基于你的片段的可执行代码:

import java.net.MalformedURLException;
import java.net.URL;

public class URLExample 
  public static void main(String[] args) throws MalformedURLException 
    printURLInformation(new URL("https://www.somesite.com/?param1=val1"));
    printURLInformation(new URL("https://www.somesite.com?param1=val1"));
  

  private static void printURLInformation(URL url) 
    System.out.println(url);
    System.out.println("Path:\t" + url.getPath());
    System.out.println("File:\t" + url.getFile());
    System.out.println("Query:\t" + url.getQuery() + "\n");
  


工作正常,这是您可能预期的结果。唯一的区别是,您使用了一个System.out.print,然后是System.out.println,将路径和文件的结果打印在同一行中。

https://www.somesite.com/?param1=val1
Path:   /
File:   /?param1=val1
Query:  param1=val1

https://www.somesite.com?param1=val1
Path:   
File:   ?param1=val1
Query:  param1=val1

【讨论】:

以上是关于用java实现RFC862、RFC863、RFC865、RFC867、RFC868的源代码的主要内容,如果未能解决你的问题,请参考以下文章

Java URL 类 getPath()、getQuery() 和 getFile() 与 RFC3986 URI 语法不一致

RFC4862 IPV6无状态地址自动配置 阅读记录

当相对 URI 包含空路径时,Java 的 URI.resolve 是不是与 RFC 3986 不兼容?

SAP的RFC接口的发布与JAVA调用

Go语言中实现的RFC xxx是个啥?

Java 和 RFC 3986 URI 编码