一尘不染

JSP:新的Socket(“ www”,80);经过多年的努力后停止工作了

jsp

在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开始将“无网络”作为值,表明发生了异常。

我发出ex.printStackTrace()并说:java.net.UnknownHostException: www

用以前的文字 “ www” 创建一个袜子,该袜子现在可以正常工作了。

题:

  • 它能够工作多年的技术原因是什么?
  • 它突然停止工作的技术原因是什么?
  • 以编程方式产生任何不容易出错的JSP页面的整个地址的最佳方法是什么?

编辑:这是一个文件共享应用程序,在用户的工作站中运行,我希望用户能够复制地址以与他人共享链接,并且http://localhost:8080/downloadpage.jsp(如浏览器的地址字段中所示)不利于共享。如果您向我展示如何在不使用套接字的情况下获取相同的信息,将对您有所帮助。


阅读 224

收藏
2020-06-10

共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();
2020-06-10