2011-02-15 2 views
1

매우 이상한 문제가 있습니다. HTTP GET 및 몇 가지 매개 변수 (http://mydomain.com/method?param1=test & param2 = 123)를 사용하여 서블릿 (JSP)을 호출하려고합니다. bash 세션에서 브라우저 또는 WGET을 통해 호출하면 정상적으로 작동합니다. 그러나 urlConnection 또는 httpURLConnection을 사용하여 자바 클라이언트에서 똑같은 호출을하면 서버는 500 오류를 반환합니다.urlConnection/httpUrlConnection을 사용하여 Java 클라이언트가 호출 한 경우에만 서버에서 500 오류가 발생합니다.

나는이 온라인을 포함하여 발견 한 모든 것을 시도했다 :

urlConn.setRequestProperty("Accept-Language", "en-us,en;q=0.5"); 

아무것도 내가 시도하지했습니다, 그러나, 일을했습니다. 불행히도 로그를 볼 수 없도록 호출하는 서버에 대한 액세스 권한이 없습니다.

private String testURLConnection() { 
String ret = ""; 

String url = "http://localhost:8080/TestService/test"; 
String query = "param1=value1&param2=value2"; 

try { 
    URLConnection connection = new URL(url + "?" + query).openConnection(); 
    connection.setRequestProperty("Accept-Charset", "UTF-8"); 
    connection.setRequestProperty("Accept-Language", "en-us,en;q=0.5"); 

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 

    String line; 

    StringBuilder content = new StringBuilder(); 
    while ((line = bufferedReader.readLine()) != null) { 
     content.append(line + "\n"); 
    } 
    bufferedReader.close(); 
    metaRet = content.toString(); 
    log.debug(methodName + " return = " + metaRet); 
} catch (Exception ex) { 
    log.error("Exception: " + ex); 
    log.error("stack trace: " + getStackTrace(ex)); 
} 

return metaRet; 

} 어떤 도움을 크게 감상 할 수

:

여기에 최신 코드입니다!

+0

HTTP 요청을 서버로 보내는 데 사용하는 모든 관련 코드를 게시 할 수 있습니까? – sjr

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 원래의 게시 코드를 업데이트했다. – user455889

+0

그것은 서버 측 오류입니다. params가있는 프로그램에서 요청 URL을 인쇄하여 브라우저에 붙여 넣으십시오. 올바른 쿼리 문자열을 사용하지 않았을 가능성이 큽니다. – Nishant

답변

1

불행히도 로그를 볼 수 없도록 전화하는 서버에 액세스 할 권한이 없습니다.

불행히도 서버 로그는 500 내부 오류의 원인에 대한 정보를 찾는 가장 좋은 장소입니다.

응답 본문에 일부 정보가있을 수도 있습니다. 예 : 오류 메시지가 포함 된 HTML 형식의 오류 페이지와 서식이 지정된 스택 추적 (운이 좋다면).

작동하지 않는 케이스 및 작동하지 않는 케이스에 대한 요청 헤더를 덤프해야하며 그 차이점을 알아 내려고해야 할 수도 있습니다. 그런 다음 문제의 원인이되는 것을 찾을 때까지 시행 착오에 의한 차이점을 제거하십시오.


또 다른 방법은 클라이언트의 오류가 아니라 서버의 오류라는 것입니다. 서버는이 클라이언트가 요청한 모든 요청을 처리 할 수 ​​있어야합니다. 500 응답은 서버가 할 수 없다는 말입니다.

물론 "서버의 잘못입니다"라고 말하면 문제를 해결하는 데 도움이되지 않습니다.

+0

고마워요, 스티븐 - 그럴 수도 있습니다. – user455889

0

같은 문제가 있었지만 다행히도 서버 로그에 액세스 할 수있었습니다. 이것은 서버의 부두 구성과 관련된 문제입니다.

서버는이 예외를 제공 할 것이다 : java.lang.IllegalStateException : 폼 너무 large1105723> 200,000

이 수정 서버 측 부두 구성이다.

클라이언트 측에서 서버가 허용하는 경우 application/www-x-formencoded 이외의 다른 형식으로 데이터를 보내보십시오.

관련 문제