HTTP 端口 80 上的 URLConnection FileNotFoundException

Posted

技术标签:

【中文标题】HTTP 端口 80 上的 URLConnection FileNotFoundException【英文标题】:URLConnection FileNotFoundException on HTTP port 80 【发布时间】:2015-06-21 18:53:58 【问题描述】:

我有一个名为 aniltest.jsp 的 JSP 文件,其中包含以下代码:

<%
    try 
        URL aURL = new URL("http://localhost:80/admin/anil1.txt");

        BufferedReader in = new BufferedReader(new InputStreamReader(aURL.openStream()));

        String inputLine;

        while ((inputLine = in.readLine()) != null)
            System.out.println("content of anil1.txt: " + inputLine);

        in.close();
     catch (IOException e) 
        System.out.println("Error reading content of url");
        e.printStackTrace();
     
%>

在上面的代码中,我试图读取一个名为 anil1.txt 的文本文件,该文件位于 http://localhost:80/admin/anil1.txt

运行时出现以下错误:http://localhost:80/aniltest.jsp

java.io.FileNotFoundException: http://localhost:80/admin/anil1.txt 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1625) 在 _jsp._aniltest__jsp._jspService(_aniltest__jsp.java:93) 在 _jsp._aniltest__jsp._jspService(_aniltest__jsp.java:31) 在 com.caucho.jsp.JavaPage.service(JavaPage.java:64) 在 com.caucho.jsp.Page.pageservice(Page.java:548) 在 com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:194) 在 com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:156) 在 com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95) 在 com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:289) 在 com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:838) 在 com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:1349) 在 com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:1305) 在 com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:1289) 在 com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:1197) 在 com.caucho.network.listen.TcpSocketLink.handleAcceptTaskImpl(TcpSocketLink.java:993) 在 com.caucho.network.listen.ConnectionTask.runThread(ConnectionTask.java:117) 在 com.caucho.network.listen.ConnectionTask.run(ConnectionTask.java:93) 在 com.caucho.network.listen.SocketLinkThreadLauncher.handleTasks(SocketLinkThreadLauncher.java:169) 在 com.caucho.network.listen.TcpSocketAcceptThread.run(TcpSocketAcceptThread.java:61) 在 com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173) 在 com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118)

虽然我可以在网络浏览器中毫无问题地访问文件http://localhost:80/admin/anil1.txt:我使用的是最新的 Resin 服务器。我完全陷入困境,无法弄清楚问题所在。

【问题讨论】:

80端口不是保留端口吗? 我不这么认为,因为我可以毫无问题地从浏览器访问文件。 尝试先通过aURL.openConnection()获取一个URLConnection对象,然后调用urlConnection.connect(),再调用urlConnection.getInputStream() 我厌倦了,但没有运气 【参考方案1】:

代码似乎没有任何问题。您可以检查 localhost 是否解析到其他任何地方,您可以尝试 127.0.0.1 代替。提及端口不是强制性的,否则它也应该工作(默认为 80)。

如果问题仍然存在,请尝试使用 wireshark 嗅探请求和响应。

网址是否受到任何身份验证的保护?尝试清除浏览器 cookie 和缓存并发起新的请求。

【讨论】:

No URL 不受任何身份验证保护。当我尝试 127.0.0.1 它不起作用。尝试清除浏览器和新请求仍然无效。 您可以尝试在 Java 类而不是 JSP 上编写相同的代码并尝试它是否有效?您遇到的情况不寻常,因此我们正在尝试奇怪的方法。 它在 Java 类代码而不是 JSP 中运行良好。为什么它不能与 JSP 一起使用是什么问题?【参考方案2】:

试试这个

URLConnection  uCon = aUrl.openConnection();
InputStream is = uCon.getInputStream();

然后从输入流中读取字节

【讨论】:

尝试在localhost:80/admin目录下创建一个文件,看看能不能这样做 尝试在运行时创建。 在服务器运行时创建了一个新的文本文件。但还是同样的问题,我可以在浏览器中打开,但不能用 jsp【参考方案3】:

大家好,文件未找到异常是因为 Skype 使用端口 80 进行传入连接。更改端口后,它运行良好。感谢您的帮助。

【讨论】:

这很有趣。从我之前的评论来看 - 你所经历的是不寻常的,因此我们正在尝试奇怪的方式。当您从浏览器尝试时,我很好奇它是如何工作的。您可以尝试通过浏览器保持 Skype 运行吗? 当我的 Skype 运行时,我无法访问它,因为 Skype 使用的是 80 端口。当我更改 Skype 的端口时,它运行良好。

以上是关于HTTP 端口 80 上的 URLConnection FileNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

关闭端口80的nginx上的http和https重定向

Ubuntu:端口 80 上的 Http-server 启动,但无法从浏览器访问?

端口 80 上的 superwebsocket

如何在apache中打开一个新端口

从 80 端口到另一个端口的角度 $http 请求

将 Web 服务器从端口 5000 重定向到 localhost (Fedora) 上的端口 80