Я получаю самую странную ошибку Tomcat. У меня есть веб-приложение, работающее на моем localhost на порту 8080 с использованием tomcat, и все работает отлично, никаких ошибок и т. Д. Однако, когда я пытаюсь получить доступ к этому веб-приложению из другого приложения, используя класс HttpURLConnection, я получаю ошибку 404. Странная часть заключается в том, что когда я помещаю тот же URL-адрес в браузер, он возвращает код 200 и имеет действительный ответ.404 при доступе к Tomcat с HttpUrlConnection, 200 из браузера
Я попытался/проверил следующее из этих сообщений: post1 и post2
- Установка
User Agent
иAccept
заголовок. - Я проверил тело ответа (с использованием
HttpURLConnection.getInputStream()
, а такжеHttpURLConnection.getErrorStream()
, в случае, если 404 был неправильным кодом возврата), и я действительно получаю сообщение, не найденное на странице. - Я попытался установить
connection.setDoOutput()
наtrue
иfalse
, но это не помогло. - Происходит изменение
localhost
по127.0.0.1
.
Некоторые больше информации, я посмотрел на журналы доступа Tomcat
, и оказывается, что запрос никогда не попав на сервер (это означает, запрос никогда не будет запротоколированы). Однако, когда я помещаю url в браузер (и получаю действительный ответ), запрос появляется в журналах.
Ещё одна вещь, я использую tomcat, используя затмение. И да, приложение развертывается на сервере.
Кроме того, я нашел кого-то, что по-видимому, имел точно такую же проблему here, но нет никакого решения, поэтому я несу вопрос к большому сообществу SO!
EDIT: Код с вызывающим приложения:
По соображениям безопасности, я сохранил URL скрытого
public static void main(String[] args) {
final String url = "";
try {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setDoOutput(false);
System.out.println(con.getResponseCode());
System.out.println(getStringFromInputStream(con.getInputStream()));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("DONE");
}
Да, это действительно работает для других хостов, таких как Google. Ответ я получаю от http://www.google.com
это:
200
<!doctype html><html....>*bunch of html*</html>
DONE
Ответить на http://localhost:8080/...
:
404
java.io.FileNotFoundException: *url*
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1672)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1670)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1243)
at Get.main(Get.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.io.FileNotFoundException: *url*
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1623)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at Get.main(Get.java:31)
... 5 more
DONE
Я бы начал с включения журнала доступа в Tomcat. Если вы вообще не видите доступа, вы почти наверняка используете другой URL-адрес (скопировали ли вы из своей Java-программы и вставили в браузер?). – parsifal
Спасибо, да, я посмотрел на них, и только запросы, поступившие в журнал, находятся в браузере. И я проверил URL-адрес так много раз, что лол (потому что, по-моему, это было то, что должно было быть и этим). Они, безусловно, одинаковы. И я копирую и вставляя значение url, указанное в java-отладчике, перед запросом. – jlars62
Возможно, вам следует опубликовать snipplet вашей реализации HttpURLConnection, ваша реализация «другого приложения» может подключаться к другому URL-адресу (например, google)? – jethroo