为什么HttpServletRequest.getRemoteAddr()不';不能在Javaservlet中工作?

为什么HttpServletRequest.getRemoteAddr()不';不能在Javaservlet中工作?,java,html,servlets,Java,Html,Servlets,我正在用java servlet开发一个web应用程序,我希望通过调用request.getRemoteAddr()从内部processRequest(HttpServletRequest请求,HttpServletResponse响应)获取用户ip信息 但是它返回了一个错误的IP。因为我对这个区域不是很了解,我不知道它显示了什么,可能是一个代理,我得到了这个: RemoteAddr : 127.0.0.1 RemoteHost : 127.0.0.1 x-forwarded-for : nul

我正在用java servlet开发一个web应用程序,我希望通过调用
request.getRemoteAddr()
从内部
processRequest(HttpServletRequest请求,HttpServletResponse响应)
获取用户ip信息

但是它返回了一个错误的IP。因为我对这个区域不是很了解,我不知道它显示了什么,可能是一个代理,我得到了这个:

RemoteAddr : 127.0.0.1 RemoteHost : 127.0.0.1 x-forwarded-for : null RemoteAddr:127.0.0.1 远程主机:127.0.0.1 x-for:null 127.0.0.1不是我的IP

但当我去:
http://www.javascriptkit.com/script/script2/displayip.shtml
它将显示正确的页面,因为我使用的是servlet,所以动态生成的html页面中没有.shtml,我该怎么办?为什么该站点上的脚本可以正确显示它,而
request.getRemoteAddr()
却不能这样做

感谢所有的答案,我现在有了一个线索,在将它部署到服务器后,它可以正常工作。显示了正确的地址


但是,即使我在本地机器上开发它,如何要求它像在真正的服务器上运行一样显示绝对IP?还是可行?

它显示的IP地址是什么?我猜是有一些代理或者什么改变了事情。(例如,出于明显的原因,该脚本页面显示了我的ADSL路由器的IP地址,而不是局域网内的IP地址。)

编辑:现在您已经显示您看到的IP地址是127.0.0.1,答案相当清楚-您看到的是环回适配器(即同一台机器的快捷方式),可能是因为您正在开发的同一台机器上进行测试。答案完全正确


从另一台机器上试用它,您会得到一个更有用的IP地址。

通过调用request.getHeader(“X-Forwarded-For”)检查X-Forwarded-For报头,看看它返回什么IP。

您显示的返回IP是本地主机IP。这就提出了一个问题——您在哪里进行测试,以及如何访问servlet进行测试

如果您在本地(开发)机器上运行servlet,并且在同一机器上从浏览器调用它,那么这个输出是绝对正确的

干杯


-R

您正在本地计算机上运行测试服务器,并在上连接到它。因为您是在本地接口上连接的,所以连接的源也是localhost,也称为127.0.0.1。

如果您使用调用servlet,通常会得到“localhost”作为远程地址。如果您使用机器的名称,例如,您通常会得到“正确”的地址。

这也是我的问题。你只是打得更快了。:)当您说
错误的ip
时,地址是否在您的域内?错在哪里?你能给我们更多关于呼叫返回内容的信息吗?我们使用这个头,如果它不可用,请返回请求。getRemoteAddr()