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

时间:2008-11-04 18:43:25

标签: java html servlets

我正在使用java servlet开发一个Web应用程序,我希望通过从request.getRemoteAddr()内部调用processRequest(HttpServletRequest request,HttpServletResponse response)来获取用户的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.shtml它将显示正确的那个,因为我正在使用servlet,我没有.shtml到我动态生成的html页面,我该怎么办?为什么该网站上的脚本可以在request.getRemoteAddr()无法正常显示时正确显示?

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

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

5 个答案:

答案 0 :(得分:19)

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

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

从其他计算机上试用,您将获得更有用的IP地址。

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

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

干杯,

-R

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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