Мой текущий код:
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-адресом?
Вы сказали, что этот код предназначен для работы на сервере, но он работает в вашей локальной среде. Причина, по которой он не работает, заключается в том, что сервер также получает адрес 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 на хосте, на котором работает веб-приложение).
InputStream вернет -1, если больше нет данных для чтения.
Подробнее см. Http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read (byte []).
Попробуй это
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();
data
илиurlpath
. Пожалуйста, укажите эти значения, чтобы мы могли лучше помочь вам.