Java Code
import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpExchange;
import java.io.IOException;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class SimpleHttpServer {
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/", new EchoHandler());
server.setExecutor(null);
server.start();
System.out.println("Server started on port 8080");
}
static class EchoHandler implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
try {
// Parse request components
String requestUri = exchange.getRequestURI().toString();
String queryParams = exchange.getRequestURI().getQuery();
String requestBody = getRequestBody(exchange);
// Build response
String response = buildHtmlResponse(requestUri, queryParams, requestBody);
String logMessage = buildLogMessage(requestUri, queryParams, requestBody);
// Send response and log
exchange.sendResponseHeaders(200, response.getBytes().length);
try (OutputStream os = exchange.getResponseBody()) {
os.write(response.getBytes());
}
System.out.println(logMessage);
} catch (Exception e) {
e.printStackTrace();
String errorResponse = "Error processing request: " + e.getMessage();
exchange.sendResponseHeaders(500, errorResponse.getBytes().length);
try (OutputStream os = exchange.getResponseBody()) {
os.write(errorResponse.getBytes());
}
}
}
private String getRequestBody(HttpExchange exchange) throws IOException {
try (BufferedReader br = new BufferedReader(
new InputStreamReader(exchange.getRequestBody(), "UTF-8"))) {
return br.lines().collect(Collectors.joining("\n"));
}
}
private String buildHtmlResponse(String uri, String params, String body) {
return "<html><body>" +
"<h1>Request Details</h1>" +
"<p><strong>URI:</strong> " + uri + "</p>" +
"<p><strong>Query Parameters:</strong> " + (params != null ? params : "None") + "</p>" +
"<p><strong>Request Body:</strong><br/><pre>" + body + "</pre></p>" +
"</body></html>";
}
private String buildLogMessage(String uri, String params, String body) {
return String.format("Request Received:\nURI: %s\nParams: %s\nBody: %s\n",
uri, params != null ? params : "None", body);
}
}
}
Compilation and Packaging
# Clean previous artifacts
del *.class, SimpleHttpServer.jar
# Recompile source
javac SimpleHttpServer.java
# Create JAR with direct main class specification (no external manifest needed)
jar --create --file SimpleHttpServer.jar --main-class SimpleHttpServer -C . .
# Run the server
java -jar SimpleHttpServer.jar