2014-12-12 5 views
2

을 중지하고 나는 질문이 URL의 단어로 문자열을 변경하십시오. 따라서 http://localhost:8004/example을 입력하고 페이지를 새로 고침하면 example이 표시됩니다.JAVA API의 HTTP 서버는 URL 매개 변수를 가져와 서버에게 나는이 HTTP 서버의 예를 가지고 노는거야

2) 서버를 어떻게 중지 할 수 있습니까? 왜냐하면 내가 다시 시도하면 포트가 이미 바인딩되어 있다고 항상 말하기 때문입니다.

누군가가 아이디어를 가지고 있습니까?

import java.io.IOException; 
import java.io.OutputStream; 
import java.net.InetSocketAddress; 

import com.sun.net.httpserver.HttpExchange; 
import com.sun.net.httpserver.HttpHandler; 
import com.sun.net.httpserver.HttpServer; 

/* 
* a simple static http server 
*/ 
public class SimpleHttpServer { 

    public static void main(String[] args) throws Exception { 
    HttpServer server = HttpServer.create(new InetSocketAddress(8004), 0); 
    server.createContext("/test", new MyHandler()); 
    server.setExecutor(null); // creates a default executor 
    server.start(); 
    } 

    static class MyHandler implements HttpHandler { 
    public void handle(HttpExchange t) throws IOException { 
     String response = "Hello world"; 
     t.sendResponseHeaders(200, response.length()); 
     OutputStream os = t.getResponseBody(); 
     os.write(response.getBytes()); 
     os.close(); 
    } 
    } 
} 

답변

1

나는 당신의 질문을 이해한다면, 먼저 getRequestURI()를 호출하여 response을 설정할 수 있습니다 및 서버를 중지에 관해서는, 당신이

System.exit(0); 

부를 수있는 다음

String response = t.getRequestURI().getPath(); 

같은 getPath()를 호출하는 JVM을 종료합니다.

+0

감사합니다. 이제 url에서/test라는 단어를 얻습니다. 하지만 'http : // localhost : 8011/anotherword'와 같이 새로운 단어를 입력하면 "404 Not Found"라고 표시됩니다. – Drak890

+0

다른 [context] (http://docs.oracle.com/javase/7/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/HttpServer.html#)가 필요합니다. mapping_description). 그렇게하고 싶다면'server.createContext ("/", new MyHandler());와 같이하십시오. –

0

서버를 시작한 후 주 방법을 종료하고 서버를 백그라운드 스레드로 남겨두고 포트를 계속 점유합니다. 메인 스레드가 중단되는 것과 같은 이벤트가 발생할 때까지 기다렸다가 서버를 중지해야합니다. 또한 t.getRequestURI(). getPath()를 사용하여 요청 URI의 경로 구성 요소를 얻을 수 있습니다.

import java.io.IOException; 
import java.io.OutputStream; 
import java.net.InetSocketAddress; 
import com.sun.net.httpserver.HttpExchange; 
import com.sun.net.httpserver.HttpHandler; 
import com.sun.net.httpserver.HttpServer; 

public class SimpleHttpServer { 
    public static void main(String[] args) throws Exception { 
    HttpServer server = HttpServer.create(new InetSocketAddress(8004), 0); 
    server.createContext("/test", new MyHandler()); 
    server.setExecutor(null); // creates a default executor 
    server.start(); 

    try 
    { 
     while(!Thread.currentThread().isInterrupted()) 
      Thread.sleep(100); 
    } 
    catch(InterruptedException e) 
    { 
    } 
    finally 
    { 
     server.stop(0); 
    } 
    } 
    static class MyHandler implements HttpHandler { 
    public void handle(HttpExchange t) throws IOException { 
     String response = t.getRequestURI().getPath(); 
     t.sendResponseHeaders(200, response.length()); 
     OutputStream os = t.getResponseBody(); 
     os.write(response.getBytes()); 
     os.close(); 
    } 
    } 
} 
+0

난 당신의 코드 오류를 얻을 : 스레드에서 예외를 "주"상위를 : 해결되지 않은 컴파일 문제 : \t HttpServer에 HttpServer에이 \t이 InetSocketAddress이 유형 – Drak890

+1

에 해결 될 수없는 해결할 수없는 \t 유형에 해결 될 수없는 그들을 포함시켜야합니다! – etherous