I want to write a simple P2P test app which uses HTTP as underlying protocol.
The app has to decide on demand, if it should act as a HTTP server, or as a HTTP client.
The classic way which I am aware of, would be to deploy the app on some existing HTTP server. But this is the wrong way for my intention. It has to be the other way: the server is started by the app (and only if it decides to).
Is there a way to execute the HTTP server part on demand (without deploying the app itself on a server)?
Can I do it by linking Glassfish or Tomcat libraries and call some ‘main’ method?
Edit: IT WORKS!!!
I now tried Jetty along with JAX-RS (Jersey) successfully!
Thank you all.
(the REST class is trivial and left out)
package my.p2p;
import com.sun.jersey.spi.container.servlet.*; import org.mortbay.jetty.*; import org.mortbay.jetty.servlet.*; public class Main { public static void main(String[] args) throws Exception { ServletHolder holder = new ServletHolder(ServletContainer.class); holder.setInitParameter('com.sun.jersey.config.property.resourceConfigClass', 'com.sun.jersey.api.core.PackagesResourceConfig'); holder.setInitParameter('com.sun.jersey.config.property.packages', 'my.p2p.rest'); Server server = new Server(8000); Context context = new Context(server, '/', Context.SESSIONS); context.addServlet(holder, '/*'); server.start(); } }
You may use Jetty or some other embeddable HTTP server. From Jetty’s web site: