Play framework不支持servlet规范,但在deployment options中,可以将整个应用程序打包到war文件中并将其部署到任何servlet容器中。
从第1.1节开始,play使用netty作为集成的Web服务器。
我想知道在war文件中部署播放应用时会发生什么。
它是否仍然在servlet容器中使用netty并将其包装起来? 它有任何明显的性能成本吗? 或者它只是加入servlet容器?
答案 0 :(得分:6)
正如Niels所说,Play不会使用Netty部署到其他平台。
如果您使用play run
或play start
命令运行Play,它会使用Netty来管理请求,然后将它们传递给Play框架。
但是,如果要部署到其他应用程序服务器,则无法进行此操作。因此,Play围绕ServletWrapper包装HTTP处理,这有效地转换了Play工作的正常方式,并使其在符合Servlet规范的J2EE堆栈上可用。
此包装器的特定代码可以是found here。在构建WAR文件时,有效地将此ServletWrapper放置为公开的Servlet(就像Struts与ActionServlet一样),它处理将请求路由到正确位置的必要工作。
答案 1 :(得分:0)
据我所知,它不使用netty。它有一个特殊的servlet,它将工作委托给play-classes。只有glassfish有一个原生的游戏容器。 它对绩效有明显的负面影响。
答案 2 :(得分:0)
如this页所示,
在Play 1.2中,您可以使用.war
命令获取play war myapp -o myapp.war
文件并部署在该页面中列出的其中一个Java EE服务器中。