嵌入式Tomcat,在classpath / jar中包含webapp目录

时间:2014-04-28 11:31:35

标签: java scala servlets jetty embedded-tomcat-7

所以我有一个Java应用程序,用于打包为战争,然后部署到Tomcat,但现在我已经设置好所有这一切都直接从使用嵌入式Jetty的jar文件运行,如下所示:

class JettyServer extends ServerTrait {

 val server = new Server()
  val connector = new ServerConnector(server)
  connector.setPort(BigSenseServer.config.options("httpPort").toInt)
  server.setConnectors(Array(connector))

  val context = new ServletContextHandler()
  context.setContextPath(BigSenseServer.webRoot)
  context.addServlet(new MasterServlet().getClass, "/*")
  context.addEventListener(new InitLoggingListener())
  context.addEventListener(new DBUpdateListener())

  val fileContext = new WebAppContext()
  fileContext.setContextPath(BigSenseServer.contentRoot)
  fileContext.setResourceBase(BigSenseServer.getClass.getResource("/io/bigsense/web").toExternalForm)

  val handlers = new HandlerCollection()
  handlers.setHandlers(Array( fileContext, context, new DefaultHandler()))
  server.setHandler(handlers)

  override def startServer() {
    server.start
    server.join
  }

  override def stopServer() {
    server.stop
  }
}

webroot是/ bigsense / api,contentRoot是/ static。在此配置中,CSS和Javascript等静态文件由/ io / bigsense / web包提供(保存在SBT中的src / main / resources中)。在我的原文中,context-root是/ bigsense,servlet被映射到api / *,因此所有静态内容都可以直接从/ bigsense / {js,css,whatever}提供。

我无法弄清楚如何让Jetty做同样的事情,但上面列出的当前设置工作正常,我调整了所有模板以从同一配置对象(具有后端)获取该静态路径在属性文件中)。

我也想创建一个嵌入式Tomcat实现,并且我已经阅读了几个指南,但他们似乎都想要一个真正的webapp基目录。我找不到任何一个例子,它们只是在没有webapp基础的情况下映射servlet目录,或者从类路径(在jar中)中获取webapp基础而不是真正的物理目录。我尝试过以下类似的事情:

编辑让servlet使用以下内容。现在我只需要ServletContextListneres以及从jar中获取服务器文件的方法:

class TomcatServer extends ServerTrait {

  val tomcat = new Tomcat()
  tomcat.setPort(BigSenseServer.config.options("httpPort").toInt)
  val tmp = new File(System.getProperty("java.io.tmpdir"))

  val ctx = tomcat.addContext(BigSenseServer.webRoot,tmp.getAbsolutePath)
  Tomcat.addServlet(ctx,"bigsense",new MasterServlet())
  ctx.addServletMapping("/*","bigsense")

  override def startServer() = {
    tomcat.start()
    tomcat.getServer().await()
  }

  override def stopServer() = tomcat.stop
}

所以我对主要servlet的Jetty设置类似。我无法在上下文对象上找到任何函数来添加我拥有的两个ServletContextListner对象。我还需要能够在contentRoot(/ static)上的jar中提供我的静态上下文。

0 个答案:

没有答案