无法从InputStream中读取

时间:2015-01-25 11:14:39

标签: java jsp

我目前的代码是:

try {
    inputStream is = (new URL(urlpath).openStream());
    ByteArrayOutputStream os = new ByteArrayOutputStream();
        for (int len; (len = is.read(data)) != -1;) {
            os.write(data, 0, len);
        }
        os.flush();
        data = os.toByteArray();
    } catch (Exception e) {
        e.printStackTrace();
    }

is.read(data)始终返回-1。我不明白为什么它不起作用。我在其他地方使用相同的代码,它正在工作,但在这个应用程序中,此代码不起作用。 url路径应该有什么问题?

2 个答案:

答案 0 :(得分:1)

您说此代码旨在在服务器上运行,但它可以在您的本地环境中运行。它无法工作的原因是因为服务器也提供了localhost地址,并且该资源仅在您的本地环境中。将localhost更改为资源所在主机的IP地址,您的代码将起作用。

http://localhost...< - 将告诉代码在运行代码的同一台计算机上查找,这就是服务器无法找到它的原因。

localhost更改为运行Web应用程序的资源的IP地址(xxx.xxx.xxx.xxx)。

因此,如果Web应用程序托管在192.168.0.100上,那么您将执行以下操作:

http://192.168.0.100:8080/School/abc.jsp?selectedLetter=d~2015012200001~NOTICE~%27%27

请注意,由于服务器需要访问外部资源以与Web应用程序通信防火墙规则也将发挥作用(您需要确保任何防火墙都不阻止Web应用程序运行的主机上的端口8080上)。

答案 1 :(得分:0)

如果没有更多数据要读取,InputStream将返回-1。

请参阅 http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte[])了解更多详情。

  1. 您是否在浏览器中打开了请求的内容?
  2. 您是否尝试在服务器计算机防火墙上打开端口?
  3. 您确定使用正在使用的框架正确执行请求吗?
  4. 试试这个

    InputStream is = url.openConnection().getInputStream();
    
    BufferedReader reader = new BufferedReader( new InputStreamReader( is )  );
    
    String line = null;
    while( ( line = reader.readLine() ) != null )  {
        System.out.println(line);
    }
    reader.close();