2014-11-07 3 views
1

StackOverflow에서 이와 같은 또 다른 질문을 보았습니다.하지만 그 대답은 꽤 우스꽝 스럽습니다. "로컬 호스트에 연결하십시오." - 좋아, 좋아.브라우저가 제티 (Jetty) 서버에 연결할 수 없습니다.

어쨌든 문제는 필자의 임베디드 부두 서버가 컴파일되고 실행된다는 것입니다. 문제는 API에서 사용하고 있기 때문에 문제가 아니라 종속성 대신 소스가 필요했습니다.

지금 가장 기본적인 hello-world 코드를 실행 중이며 서버가 시작되고 있지만 어떤 브라우저도 연결을 만들 수 없습니다. 여기에, JettyPage.java 당연히

try { 
    httpServer = new Server(8080); 
    httpServer.setHandler(new JettyPage()); 
    httpServer.start(); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

: 여기

코드의

public class JettyPage extends AbstractHandler { 

    @Override 
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException { 
     response.setContentType("text/html;charset=utf-8"); 
     response.setStatus(HttpServletResponse.SC_OK); 
     baseRequest.setHandled(true); 
     response.getWriter().println("<h1>Hello world.</h1>"); 
    } 

} 

콘솔의 출력 :

2014-11-07 07:01:05.155:INFO::main: Logging initialized @599ms 
2014-11-07 07:01:05.190:INFO:oejs.Server:main: jetty-9.3.0.M1 
2014-11-07 07:01:05.215:INFO:oejs.ServerConnector:main: Started [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 
2014-11-07 07:01:05.215:INFO:oejs.Server:main: Started @660ms 

파이어 폭스 :

The connection was reset 

오페라 :

No data received 

크롬 :

No data received 

--- 예, 로컬 호스트에 연결하고 : 8080 나는 또한 시도했다 : 0.0.0.0:8080 및 127.0.0.1를 : 8080

참고 : 포트 80에서 실행중인 아파치 서버를 비활성화하고 포트 80에 제티를 바인딩하면 계속 연결할 수 없습니다.

답변

0

HelloWorld 예제를 정확히 따라 갔다면 응답을 받게됩니다.

런타임 환경에 여전히 문제가 있습니다.

실행중인 Windows입니까? 그렇다면 포트를 8080 (try 38080) 이외의 포트로 설정하십시오.이 포트에 이미있는 것이 있으므로 Windows는이 상황에서 오류 또는 경고를 발생시키지 않습니다. (다른 운영 체제의 경우 바인드 예외가 발생합니다.)

오류 또는 경고를 나타내는 로깅 출력이 있습니까?

서버를 시작하거나 일부 콘텐츠를 제공하는 데 오류가있는 경우에도 콘솔에 많은 로깅 출력이 있어야합니다.

VERY 상세 로깅을 사용하려면 -Dorg.eclipse.jetty.LEVEL=DEBUG을 Java 실행에 추가 할 수 있습니다.

윈도우 버전

> java -Dorg.eclipse.jetty.LEVEL=DEBUG -cp .;servlet-api.jar;jetty-all.jar HelloWorld 

리눅스/OSX/유닉스 버전

$ java -Dorg.eclipse.jetty.LEVEL=DEBUG -cp .:servlet-api.jar:jetty-all.jar HelloWorld 
1

나는 정확히 같은 문제가 있었다 ...매우 간단한 코드는 명령 행과 IDE 모두에서 컴파일되고 실행되었지만 브라우저가 Jetty에 연결할 수 없습니다. 마침내 불일치 서블릿과 Jetty jars로 추적했습니다. (적어도 그것이 문제를 일으켰다 고 생각합니다). 저에게 도움이되는 것은 javax-servlet-api-3.1.0.jar과 jetty-all-9.2.8.v20150217.jar입니다. 코드를 사용하기 시작한 후 코드가 명령 줄 또는 NetBeans IDE에서 컴파일 된 경우 연결할 수있었습니다.

나 같은 원시 noobs의 경우, 명령 줄 컴파일을위한 온라인 예제의 대부분은 Linux/Unix 경로 구분 기호 (":")를 사용합니다. Windows 머신에서 다른 머신 (";")을 필요로하는 데 몇 분이 걸렸습니다. :

javac -cp. javax.servlet-api-3.1.0.jar; jetty-all-9.2. 8.v20150217.jar HelloWorld.java

도움이 되길 바랍니다.