What: Create a simple http server for a jersey app without traditional application servers.
Why: Kiss & useful for micro services
How: Use built-in java classes
Download the following dependencies (or include them in your pom.xml):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.25.1</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-jdk-http</artifactId> <version>2.25.1</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.25.1</version> </dependency> |
7-line Java way, minimal
1 2 3 4 5 6 7 | ResourceConfig resourceConfig = new ResourceConfig(); resourceConfig.packages("mandelbrot"); String hostName = "localhost"; try {hostName = InetAddress.getLocalHost().getCanonicalHostName();} catch (UnknownHostException e) {e.printStackTrace();} URI uri = UriBuilder.fromUri("http://" + hostName + "/").port(PORT).build(); JdkHttpServerFactory.createHttpServer(uri, resourceConfig); |
Usually, you need a little bit more like:
- Cors support
- Jackson
- Logging
Create the following class:
1 2 3 4 5 6 7 8 9 10 11 12 13 | /** * See: http://stackoverflow.com/a/28067653 * */ public class CORSFilter implements ContainerResponseFilter { @Override public void filter(ContainerRequestContext request, ContainerResponseContext response) throws IOException { response.getHeaders().add("Access-Control-Allow-Origin", "*"); response.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization"); response.getHeaders().add("Access-Control-Allow-Credentials", "true"); response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); } } |
Add the following lines:
1 2 | ResourceConfig resourceConfig = new ResourceConfig(); resourceConfig.packages("mandelbrot"); |
Full example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ResourceConfig resourceConfig = new ResourceConfig(); resourceConfig.packages("mandelbrot"); resourceConfig.register(JacksonFeature.class); resourceConfig.register(CORSFilter.class); String hostName = "localhost"; try { hostName = InetAddress.getLocalHost().getCanonicalHostName(); } catch (UnknownHostException e) { e.printStackTrace(); } URI uri = UriBuilder.fromUri("http://" + hostName + "/").port(PORT).build(); JdkHttpServerFactory.createHttpServer(uri, resourceConfig); |