All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tvd12.ezyhttp.server.jetty.JettyApplicationBootstrap Maven / Gradle / Ivy

package com.tvd12.ezyhttp.server.jetty;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.FilterMapping;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlets.CrossOriginFilter;
import org.eclipse.jetty.util.thread.QueuedThreadPool;

import com.tvd12.ezyfox.annotation.EzyProperty;
import com.tvd12.ezyfox.util.EzyLoggable;
import com.tvd12.ezyhttp.server.core.ApplicationEntry;
import com.tvd12.ezyhttp.server.core.annotation.ApplicationBootstrap;
import com.tvd12.ezyhttp.server.core.servlet.BlockingServlet;

import lombok.Setter;

@ApplicationBootstrap
public class JettyApplicationBootstrap extends EzyLoggable implements ApplicationEntry {
	
	@EzyProperty("server.port")
	@Setter
	protected int port = 8080;
	
	@EzyProperty("server.host")
	@Setter
	protected String host = "0.0.0.0";
	
	@EzyProperty("server.max_threads")
	@Setter
	protected int maxThreads = 256;
	
	@EzyProperty("server.min_threads")
	@Setter
	protected int minThreads = 16;
	
	@EzyProperty("server.idle_timeout")
	@Setter
	protected int idleTimeout = 150 * 1000;
	
	protected Server server;
	 
    public void start() throws Exception {
    	QueuedThreadPool threadPool = new QueuedThreadPool(maxThreads, minThreads, idleTimeout);
        server = new Server(threadPool);
        ServerConnector connector = new ServerConnector(server);
        connector.setHost(host);
        connector.setPort(port);
        server.setConnectors(new Connector[] {connector});
        ServletHandler servletHandler = newServletHandler();
        server.setHandler(servletHandler);
        server.start();
        logger.info("http server started on: {}:{}", host, port);
    }
	
    protected ServletHandler newServletHandler() {
    	FilterHolder crossOriginFilter = newCrossOriginFilter();
    	ServletHandler servletHandler = new ServletHandler();
        servletHandler.addServletWithMapping(BlockingServlet.class, "/*");
        addFilter(servletHandler, crossOriginFilter);
        return servletHandler;
    }
    
    protected void addFilter(ServletHandler servletHandler, FilterHolder filter) {
    	String filerName = filter.getName();
    	servletHandler.addFilter(filter, createFilterMapping("/*", filerName));
    }
    
    protected FilterMapping createFilterMapping(String pathSpec, String filterName) {
        FilterMapping filterMapping = new FilterMapping();
        filterMapping.setPathSpec(pathSpec);
        filterMapping.setFilterName(filterName);
        return filterMapping;
    }
    
    protected FilterHolder newCrossOriginFilter() {
    	FilterHolder filter = new FilterHolder();
    	filter.setName("cross-origin");
    	filter.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
    	filter.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,HEAD,POST,PUT,DELETE,CONNECT,TRACE,PATCH,OPTIONS");
    	filter.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "*");
    	filter.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*");
    	filter.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_METHODS_HEADER, "GET,HEAD,POST,PUT,DELETE,CONNECT,TRACE,PATCH,OPTIONS");
    	filter.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_HEADERS_HEADER, "*");
    	CrossOriginFilter corsFilter = new CrossOriginFilter();
    	filter.setFilter(corsFilter);
    	return filter;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy