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的主要内容,如果未能解决你的问题,请参考以下文章