为什么HttpServletRequest.getRemoteAddr()在Java servlet中不起作用?

我正在开发一个带有java servlet的web应用程序,我希望通过从processRequest(HttpServletRequest request,HttpServletResponse response)调用request.getRemoteAddr()来获取用户ip信息。

但它返回错误的IP。 由于我对这个领域不是很了解,我不知道它在显示什么,也许是代理,我得到了这个:

 RemoteAddr:127.0.0.1
 RemoteHost:127.0.0.1
 x-forwarded-for:null

127.0.0.1不是我的IP。

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

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

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

它显示的是什么IP地址? 我的猜测是有一些代理或改变事物的东西。 (例如,该脚本页面显示了我的ADSL路由器的IP地址 – 而不是我局域网中的IP地址 – 原因显而易见。)

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

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

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

您显示的返回IP是localhost IP。 这提出了一个问题 – 您在哪里测试,以及如何访问servlet进行测试?

如果您在本地(开发)计算机上运行servlet,并在同一台计算机上的浏览器中调用它,则此输出绝对正确。

干杯,

-R

您在本地计算机上运行测试服务器并在http:// localhost /上连接到它。 由于您在本地接口上进行连接,因此连接源也是localhost,即127.0.0.1。

如果使用http:// localhost:8080 / servlet调用servlet ,通常会将“localhost”作为远程地址。 如果您使用机器的名称,即http:// yourmachine / servlet ,您将获得“正确”的地址。