2013-06-01 3 views
3

HTTPService을 사용하는 동안 오류가 있습니다. 나는 샘플 코드를 작성하고 그것은 다음과 같습니다 : 나는 cmd를 신속하고이 구문을 사용하여 텔넷을하려고 할 때,WebService에 텔넷 - HTTP/1.1 400 잘못된 요청

import java.net.InetSocketAddress; 

import com.kivar.lumina.services.handlers.LuminaSearchService; 
import com.sun.net.httpserver.HttpServer; 

public class LuminaWebService { 

    public static void main(String[] args) throws Exception { 
     HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); 
     server.createContext("/luminaSearchService ", new LuminaSearchService()); 
     server.start(); 
    } 

} 

그리고 내 핸들러 클래스

import java.io.IOException; 
import java.io.OutputStream; 

import com.kivar.lumina.services.interfaces.SearchService; 
import com.sun.net.httpserver.HttpExchange; 
import com.sun.net.httpserver.HttpHandler; 

public class LuminaSearchService extends Thread implements SearchService, HttpHandler { 

    @Override 
    public void handle(HttpExchange arg0) throws IOException { 
     setDaemon(true); 
     String response = "This is the response"; 
     arg0.sendResponseHeaders(200, response.length()); 
     OutputStream os = arg0.getResponseBody(); 
     os.write(response.getBytes()); 
     os.close(); 
    } 

} 

텔넷 127.0.0.1 8000

나는

HTTP/1.1 400 Bad Request 
Connection to the host lost. 

여기 내가 저지른 실수를 알려주십시오. 엄청 고마워.

+1

텔넷에서 HTTP 헤더를 보내고 있습니까? 아니면 입력을 기다리지 않고 즉시 실패합니까? 두 번째 경우 버그입니다 ... – fge

+0

사실이 간단한 웹 서비스를 테스트하는 올바른 방법은 무엇인지 모릅니다. 'telnet 127.0.0.1 8000'을 실행하면 빈 화면이 나타나지만'GET/luminaSearchService' (cmd 프롬프트에 표시되지 않음)를 입력하려고하면 오류가 발생합니다. – LPD

+2

HTTP 버전을 지정해야합니다 , 즉'GET/luminaSearchService HTTP/1.0'을 사용합니다. 그런 다음 Return을 두 번 누르십시오. 즉, 요청의 끝을 나타내는 빈 줄을 남겨 두십시오. – Rup

답변

5

웹 서버가 HTTP 1.0을 더 이상 지원하지 않는 것 같습니다. HTTP 1.1를 들어, 버전 번호 및 호스트 이름을 지정해야합니다

GET /luminaSearchService HTTP/1.1 
Host: 127.0.0.1 

Windows 명령 윈도우를, 당신이 당신이 입력하는 것을 볼 수 없습니다 정상을합니다.

간단한 GET 요청이므로 웹 브라우저를이 URL로 가리키면 더 쉬울 수 없습니까?

+0

예. 나는 이미 그 일을했지만,이 텔넷을 테스트 해보고 싶었습니다. 고마워요. – LPD

+0

의심의 여지가 있습니다. 텔넷을 사용하여 연결하면 여러 GET 요청을 보낼 수 있습니까? – LPD

+0

HTTP 1.1은 이전 요청에 대한 응답이 전송 된 후에 다른 요청을 기다려야합니다.하지만 일반적으로 매우 짧은 시간 제한 (일반적으로 새로운 구현에서는 5 초)이 있으며 연결을 신속하게 종료합니다. HTTP 1.0의 경우 "연결 : 연결 유지"를 지정하여이를 달성 할 수 있습니다. 하지만 대부분의 경우 HTTP 1.0에서 청크 분할 전송 코드가 누락되어 연결을 종료합니다. – Codo

1

웹 서비스가 일부 요청 또는 헤더 매개 변수를 기대할 수 있으며 따라서이 오류가 발생합니다. 웹 서비스 계약을 제공 할 수 있습니까?

+0

죄송하지만, 계약서에 정확히 무슨 의미가 있니? 내 질문에 이제는 처리기 클래스도 추가 했으므로 살펴 보시기 바랍니다. 감사합니다 ur 시간을 많이 – LPD

+0

계약에 의해, 당신의 webservice의 사양을 의미. URL은 무엇이며, 요청/헤더 매개 변수는 필수/선택 사항입니다. 일단 어떤 웹 서비스가 요청을 올바르게 처리 할 것으로 예상되면, 우리는 왜 그것이 400 개의 나쁜 요청을 던지고 있는지 이해할 수 있습니다. –