java - JSP: 新套接字 ("www", 80);工作多年后停止工作

标签 java jsp sockets tomcat6

在 Tomcat 中的 JSP 应用程序中,以下代码用于生成页面的完整地址(来自 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”的 socks 曾经可以工作,现在突然停止工作了。

问题:

  • 它多年来一直有效的技术原因是什么?
  • 突然停止工作的技术原因是什么?
  • 以编程方式生成任何 JSP 页面的完整地址且不易出错的最佳方法是什么?

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

最佳答案

就像 Beau Grantham 在评论中所说,这很有可能是 DNS 问题。尝试一下

$ 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 进行管理的那种东西。)

就以编程方式生成 URL 而言,请尝试

InetAddress.getLocalHost().getHostName()

如果您同意主机名。其他同行也许可以解决这个问题。否则

InetAddress localhost = InetAddress.getLocalHost();
InetAddress[] ips = InetAddress.getAllByName(localhost.getHostName());

在这里,您将获得相关主机的 IP 列表,对应于不同的接口(interface)。您可能必须根据子网选择一个,您可以将其配置到应用程序中。

关于java - JSP: 新套接字 ("www", 80);工作多年后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487579/

相关文章:

java - 查找两个字符串之间的匹配字符

java - 无法从jsp重定向到html

java - 是否可以在单个jsp页面中有两个servlet连接

web-services - 套接字编程与 Web 服务?

linux - 监听端口上的选择性多播组

java - 解析超大 Excel 2007 文件的最佳语言

java - 在java中打印文件类型

Java Socket 服务器端无法读取 play 框架应用程序中传入的文本行

java - 子弹运动物理和数学转 Java (Javafx)

java - 简单的jsp页面出现404错误