3

所以我有一个 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 中)。在我的原文中,上下文根是 /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
}

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

4

0 回答 0