在Tomcat的JSP应用程序中,以下代码用于产生页面的整个地址
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
http://111.101.101.2:8080/mypage.jsp
它已经工作了几年。
一周前miUrl开始将“无网络”作为值,表明发生了异常。
我发出ex.printStackTrace()并说:java.net.UnknownHostException: www
ex.printStackTrace()
java.net.UnknownHostException: www
用以前的文字 “ www” 创建一个袜子,该袜子现在可以正常工作了。
题:
编辑:这是一个文件共享应用程序,在用户的工作站中运行,我希望用户能够复制地址以与他人共享链接,并且http://localhost:8080/downloadpage.jsp(如浏览器的地址字段中所示)不利于共享。如果您向我展示如何在不使用套接字的情况下获取相同的信息,将对您有所帮助。
http://localhost:8080/downloadpage.jsp
解决了不使用套接字的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();