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

org.http4s.servlet.syntax.ServletContextSyntax.scala Maven / Gradle / Ivy

package org.http4s
package servlet
package syntax

import javax.servlet.{ServletRegistration, ServletContext}

import org.http4s.server.AsyncTimeoutSupport

import scalaz.concurrent.Strategy

trait ServletContextSyntax {
  implicit def ToServletContextOps(self: ServletContext): ServletContextOps = new ServletContextOps(self)
}

final class ServletContextOps private[syntax](val self: ServletContext) extends AnyVal {
  /** Wraps an HttpService and mounts it as a servlet */
  def mountService(name: String, service: HttpService, mapping: String = "/*"): ServletRegistration.Dynamic = {
    val servlet = new Http4sServlet(
      service = service,
      asyncTimeout = AsyncTimeoutSupport.DefaultAsyncTimeout,
      threadPool = Strategy.DefaultExecutorService,
      servletIo = servletIo
    )
    val reg = self.addServlet(name, servlet)
    reg.setLoadOnStartup(1)
    reg.setAsyncSupported(true)
    reg.addMapping(mapping)
    reg
  }

  private def servletIo: ServletIo = {
    val version = ServletApiVersion(self.getMajorVersion, self.getMinorVersion)
    if (version >= ServletApiVersion(3, 1))
      NonBlockingServletIo(DefaultChunkSize)
    else
      BlockingServletIo(DefaultChunkSize)
  }
}

object servletContext extends ServletContextSyntax




© 2015 - 2025 Weber Informatics LLC | Privacy Policy