Я реализую. Я хочу, чтобы 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 () внутри дескриптора выдает ошибку.