1:在使用request.getRemoteAddr()取得客戶端的IP地址時,得到的卻是IPv6的地址格式0:0:0:0:0:0:0:1,而不是IPv4的地址格式127.0.0.1的原因?
因為機器上啟用的IPv6協議,所以在對localhost進DNS解析時,得到的是IPv6形式的本機地址0:0:0:0:0:0:0:1.
實際上這種情況只有在服務器和客戶端在同一台機器上用localhost訪問時才會出現。
2:解決方法
(1)使用127.0.0.1代替localhost進行訪問
把地址格式寫為http://127.0.0.1/
(2)讓tomcat只支持IPv4(方便一些)
a:在eclipse中使用tomcat的修改方法
Run->Run Configurations...->Apache Tomcat->Tomcat v7.0 Server at localhost-> Arguments->VM arguments
在運行參數中添加: -Djava.net.preferIPv4Stack=true
重啟Tomcat在使用request.getRemoteAddr()方法就能得到IPv4的地址了。
如圖:
(b)通過Tomcat的start.bat啟動修改方法
找到Tomcat的bin目錄下的 catalina.bat文件,在其中加入:
set JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true %LOGGING_MANAGER%
重啟Tomcat在使用request.getRemoteAddr()方法就能得到IPv4的地址了。
插入的位置如圖:
在其他地方插入應該也可以。
(3)一些其他的方法(不知道什么原因設置之后沒有效果)
修改hosts文件。位置:C:\Windows\System32\drivers\etc
注釋掉# ::1 localhost這一句,可win7本就是注釋掉的。
又添加一句127.0.0.1 localhost說這樣request.getRemoteAddr()函數得到的將是127.0.0.1,可試過了還是沒有效果。
又在網絡和共享中心和注冊表禁用了IPv6也沒有效果。