ServletRequest.getRemoteAddr()是否有理由将客户端IP地址作为字符串而不是int / long / IPSomethingInstance返回?
或者问另一种方式:是否有任何情况下getRemoteAddr()返回的值无法解析为数字IP地址?
将ip地址作为字符串返回,然后让开发人员将其转换为ipV4 / IpV6地址对我来说似乎是一个错误的设计,除非确实存在该方法返回其他字符串的情况。
答案 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为参数的函数和方法比使用相当不必要的本机对象的实例更容易。