为什么getRemoteAddr()以字符串形式返回ip地址?

时间:2011-08-15 15:56:02

标签: java servlets

ServletRequest.getRemoteAddr()是否有理由将客户端IP地址作为字符串而不是int / long / IPSomethingInstance返回?

或者问另一种方式:是否有任何情况下getRemoteAddr()返回的值无法解析为数字IP地址?

将ip地址作为字符串返回,然后让开发人员将其转换为ipV4 / IpV6地址对我来说似乎是一个错误的设计,除非确实存在该方法返回其他字符串的情况。

5 个答案:

答案 0 :(得分:3)

这个方法作为CGI变量REMOTE_ADDR的直接等价物,所以我猜这就是它的字符串的原因。因为CGI变量是字符串的原因是什么 - 我不知道。

答案 1 :(得分:0)

可能与getRemoteHost()一致,可以返回IP或已解析的名称。

答案 2 :(得分:0)

如果容器从ServletRequest.getRemoteAddr()返回IP以外的其他内容,则它不符合API:

"Returns the Internet Protocol (IP) address of the client
 or last proxy that sent the request."

我只能猜测它是这样做的,因为java.net类可能有点奇怪。

答案 3 :(得分:0)

我同意将地址作为对象返回会很方便,它提供了处理IP地址的有用方法。

字符串工作得很好,并且将来更灵活地改变IP地址格式(虽然这是推测性设计,这可能不是一个很好的做法)。

答案 4 :(得分:0)

我想说,IP可能不可能是数字,因为IP的单个部分由点和冒号(IPv6)分隔。我想你在谈论Java。不幸的是,我对Java知之甚少,所以我不知道是否有IPSomethingInstance。但是,如果它困扰你那么多,为什么不写自己的呢?

此外,我假设将字符串传递给以IP为参数的函数和方法比使用相当不必要的本机对象的实例更容易。