所以我有一个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中提供我的静态上下文。