Не удается прочитать из InputStream

1

Мой текущий код:

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-адресом?

  • 0
    Какова ценность urlpath? Также, пожалуйста, опубликуйте полную трассировку стека.
  • 0
    У вас нет нигде определенных data или urlpath . Пожалуйста, укажите эти значения, чтобы мы могли лучше помочь вам.
Показать ещё 12 комментариев
Теги:
jsp

2 ответа

1

Вы сказали, что этот код предназначен для работы на сервере, но он работает в вашей локальной среде. Причина, по которой он не работает, заключается в том, что сервер также получает адрес localhost и этот ресурс находится только в вашей локальной среде. Измените localhost на IP-адрес хоста, на котором включен ресурс, и ваш код будет работать.

http://localhost... <- сообщит код, чтобы посмотреть на том же компьютере, на котором работает код, поэтому сервер не может его найти.

Измените localhost на IP-адрес (xxx.xxx.xxx.xxx) ресурса, на котором запущено ваше веб-приложение.

Поэтому, если веб-приложение размещено на 192.168.0.100 вы должны сделать следующее:

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

Обратите внимание, что поскольку серверу требуется доступ к внешнему ресурсу, чтобы поговорить с веб-приложением, также будут действовать правила брандмауэра (вам нужно будет убедиться, что любой брандмауэр не блокирует порт 8080 на хосте, на котором работает веб-приложение).

  • 0
    Я уже делаю это, но ничего не происходит.
  • 0
    Пожалуйста, скажите мне, что я должен проверить, потому что тот же код был запущен несколько дней назад
Показать ещё 8 комментариев
0

InputStream вернет -1, если больше нет данных для чтения.

Подробнее см. Http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read (byte []).

  1. Вы проверили содержимое своего запроса, открыв его в браузере?
  2. Вы пытались открыть порты на брандмауэре серверных компьютеров?
  3. Вы уверены, что правильно выполняете запрос с каркасом, который используете?

Попробуй это

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();
  • 0
    Нет, это так же, как предыдущий. Я думаю, что после изменения центра обработки данных эта проблема возникла. Пожалуйста, скажи мне, что мне делать.
  • 0
    проблема в том, что весь контекст того, как вы подключаетесь к своему серверу и т. д. отсутствует :-(. Если вы ожидаете, что ответ, который вас устраивает, будет более конкретным в вашем вопросе. Опубликуйте детали, код и трассировку стека :-)
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню