simple HTTP server in Java using only Java SE API

前端 未结 17 1919
无人共我
无人共我 2020-11-22 13:28

Is there a way to create a very basic HTTP server (supporting only GET/POST) in Java using just the Java SE API, without writing code to manually parse HTTP requests and man

17条回答
  •  不知归路
    2020-11-22 14:26

    The com.sun.net.httpserver solution is not portable across JREs. Its better to use the official webservices API in javax.xml.ws to bootstrap a minimal HTTP server...

    import java.io._
    import javax.xml.ws._
    import javax.xml.ws.http._
    import javax.xml.transform._
    import javax.xml.transform.stream._
    
    @WebServiceProvider
    @ServiceMode(value=Service.Mode.PAYLOAD) 
    class P extends Provider[Source] {
      def invoke(source: Source) = new StreamSource( new StringReader("

    Hello There!

    ")); } val address = "http://127.0.0.1:8080/" Endpoint.create(HTTPBinding.HTTP_BINDING, new P()).publish(address) println("Service running at "+address) println("Type [CTRL]+[C] to quit!") Thread.sleep(Long.MaxValue)

    EDIT: this actually works! The above code looks like Groovy or something. Here is a translation to Java which I tested:

    import java.io.*;
    import javax.xml.ws.*;
    import javax.xml.ws.http.*;
    import javax.xml.transform.*;
    import javax.xml.transform.stream.*;
    
    @WebServiceProvider
    @ServiceMode(value = Service.Mode.PAYLOAD)
    public class Server implements Provider {
    
        public Source invoke(Source request) {
            return  new StreamSource(new StringReader("

    Hello There!

    ")); } public static void main(String[] args) throws InterruptedException { String address = "http://127.0.0.1:8080/"; Endpoint.create(HTTPBinding.HTTP_BINDING, new Server()).publish(address); System.out.println("Service running at " + address); System.out.println("Type [CTRL]+[C] to quit!"); Thread.sleep(Long.MAX_VALUE); } }

提交回复
热议问题