HttpHandler.handle для выполнения без запуска потока - PullRequest
0 голосов
/ 03 мая 2020

Я реализую. Я хочу, чтобы run () работала в методе дескриптора.

Код, как показано ниже, работает. Thread и run () располагаются сразу после дескриптора.

class TestHandler implements HttpHandler {
    static Logger logger = Logger.getLogger(TestHandler.class);
    @Override
    public void handle(final HttpExchange he) throws IOException {
        new Thread() {
            public void run() {
                // code       
            }
        }.start();
    }
}

Ниже код, который я пробовал с обоими интерфейсами и расширяет поток класса TestHandler1 и пробовал запустить метод. Я хочу, чтобы дескриптор выполнялся в потоке, где http post - новая тема. ОШИБКА publi c void run () // throwing erro {// throwing erro

package test1;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import org.apache.commons.io.IOUtils;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

class Server {
    public Server() {
        HttpServer httpServer;
        try {
            httpServer = HttpServer.create(new InetSocketAddress(Integer.valueOf(8080)), 0);
            httpServer.createContext("/Mysite", new TestHandler1());
            // Start the server
            httpServer.start();
        } catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            System.out.println("config.properties is not found at " + e.getMessage());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("config.properties is not found at " + e.getMessage());
        }
    }

}

class TestHandler1 extends Thread implements HttpHandler {
    TestHandler1() {
        System.out.println("my thread created" + getName());
        start();
    }

    public void handle(HttpExchange he) throws IOException {
        System.out.println("my thread created" + getName()); **
        public void run() // throwing erro
        { // throwing erro**
            if (he.getRequestMethod().equalsIgnoreCase("POST")) {
                // REQUEST Headers
                Headers requestHeaders = he.getRequestHeaders();
                int contentLength = Integer.parseInt(requestHeaders.getFirst("Content-length"));
                // REQUEST Body
                InputStream is = he.getRequestBody();
                StringWriter writer = new StringWriter();
                IOUtils.copy(is, writer, "UTF-8");
                String theString = writer.toString();
                System.out.println("HTTPServer:XML theString::::" + "      " + theString);
                byte[] data = new byte[contentLength];
                int length = is.read(data);
                // RESPONSE Headers
                Headers responseHeaders = he.getResponseHeaders();
                // Send RESPONSE Headers
                String FTResponse = "hi";
                he.getResponseHeaders().set("Content-Type", "text/xml, charset=UTF-8");
                he.sendResponseHeaders(HttpURLConnection.HTTP_OK, FTResponse.getBytes().length);
                // RESPONSE Body
                OutputStream os = he.getResponseBody();
                os.write(FTResponse.getBytes());
                he.close();
            }
        }
    }
}

public class MyThread {
    public static void main(String[] args) {
        Server server1 = new Server();
    }
}

Это полный код и не работает. publi c void run () внутри дескриптора выдает ошибку.

...