我的工具:eclipse JEE
从今天上午11:30到今天下午17.40:终于解决了一个心头大患;脑壳痛
问题来源:只要电脑和手机连得是同一个网络,我的手机就能访问我本机服务器上面的网络页面,也就是局域网。但是每次用eclipse运行jsp程序的时候,因为我是自己电脑做服务器,url用的是localhost例如【http://localhost:8080/secondary_market_web/getID_test.jsp】
在我的电脑上面访问当然没有问题,但是直接把含有”localhost”的链接发给局域网内的其他人却是打不开的,必须要用电脑IP(IPv4)地址代替“localhost”字符串,这样别人才能访问。 问题是,服务器上(本人的电脑)网页众多,何况IP地址每天都会换,换一个WiFi也会随之换一个IP,难道每次要用局域网内其他客户端访问服务器上网页的时候,我都要去我的电脑上改变源代码,在JSP文件的超链接中的地址值修改成当前的IP吗?
对不起我很懒,也不太现实去一个个改源代码里面的地址。
所以我需要调用一个函数每次运行时帮我自动获取IP地址,再用连接字符串的方式与文件路径一起拼接成一个链接!
问题来了!用网络上面的方法/函数request.getRemoteAddr()运行得到的我的IP地址怎么都是“0:0:0:0:0:0:0:1”。查询优快云的答案是“在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1”
ps:localhost==127.0.01==”0:0:0:0:0:0:0:1(IPv6形式)”,是等价的。
继续在网上看了一下午一直在尝试各种解决方案,不管怎样,测试时在jsp上out.println的ip值都是0:0:0:0:0:0:0:1,终于我看到了一个别出心裁的方法,正巧我自己也是这样的想法,碰到了大牛用代码实现了—————调用cmd获取电脑IP值!!!
用CMD命令的方法返回本机IP值:
代码实现如下
在eclipse JEE中找到web项目文件–>Java Resources–>src中新建一个包getIP,再新建一个类名为
getIP.java:
代码:
package getIP;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class getIP {
public static String getLocalIPForCMD(){
StringBuilder sb = new StringBuilder();
String command = "cmd.exe /c ipconfig | findstr IPv4";
try {
Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while((line = br.readLine()) != null){
line = line.substring(line.lastIndexOf(":")+2,line.length());
sb.append(line);
}
br.close();
p.destroy();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}
在eclipse JEE中找到web项目文件–>WebContent中找到需要使用IP的jsp文件:
在该JSP文件中部分引入包含头文件
<head>
<%@ page import="getIP.getIP" %>
</head>
在body中直接调用自己写的函数,如下:
<body>
<%
String IP=getIP.getLocalIPForCMD();
%>
通过cmd查找到您的 IPv4为:<%=IP %>
</body>
调试即可!