在JSP应用程序中,在Tomcat中,以下代码用于生成页面的整个地址(来自this answer):
String myUrl = "no network";
try {
Socket s = new Socket("www", 80);
myUrl = "http://"+s.getLocalAddress().getHostAddress()+":"+request.getLocalPort()+request.getRequestURI();
s.close();
} catch (Exception ex) {
} finally {
}
之后miUrl
将具有以下值(不是真正的IP地址):http://111.101.101.2:8080/mypage.jsp
它已经工作了几年。
一周前miUrl
开始将“无网络”作为值,表示发生了异常。
我发布了ex.printStackTrace()
,并说:java.net.UnknownHostException: www
使用文字“www”创建一个socked用于工作,现在突然它停止工作。
问题:
http://localhost:8080/downloadpage.jsp
(如浏览器的地址字段所示)是没有分享的好处。如果你告诉我如何在没有socket破解的情况下获得相同的信息会有所帮助。
答案 0 :(得分:2)
$ ping www
看看它是否解决了什么问题。如果你得到
$ ping www
ping: cannot resolve www: Unknown host
$
那是你的问题。
我在本地运行并得到了:
~$ java TestResolve
java.net.UnknownHostException: www
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at TestResolve.main(TestResolve.java:7)
(我不希望这是一个主机文件,因为每个人都可以使用URL。无论如何'www'是你使用DNS管理的东西。)
就以编程方式生成网址而言,请尝试
InetAddress.getLocalHost().getHostName()
如果您对主机名没问题。其他同行可能会解决这个问题。否则
InetAddress localhost = InetAddress.getLocalHost();
InetAddress[] ips = InetAddress.getAllByName(localhost.getHostName());
在这里,您将获得相关主机的IP列表,对应于不同的接口。您可能必须根据子网选择一个,这可能是您可以配置到应用程序中的。
答案 1 :(得分:1)
在不使用套接字的情况下解决了IP地址部分问题。
public String getIP(){
String ip="no network";
try {
Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
outmost:
for (; n.hasMoreElements();)
{
NetworkInterface e = n.nextElement();
Enumeration<InetAddress> a = e.getInetAddresses();
for (; a.hasMoreElements();)
{
InetAddress addr = a.nextElement();
if (addr instanceof Inet4Address){ // return the first IPv4 addr (127.0.1.1 is always last)
if (addr.isSiteLocalAddress()){
ip=addr.getHostAddress();
break outmost;
}
}
}
}
} catch (UnknownHostException e1) {
} catch (SocketException e) {
}
return ip;
}
然后
String miUrl = "http://"+getIP()+":"+request.getLocalPort()+request.getRequestURI();