如何部署 spark Java Web 应用?

2022-09-02 20:55:01

我使用 spark Web 框架创建了一个 web 应用程序,但我不知道如何部署这个 web 应用程序。很抱歉,如果这是非常基本的,但我是spark框架的新手,我找不到任何指导我如何部署spark webapp的文档:

  • 如何独立部署 spark webapp
  • 如何构建一个 spark webapp(到 war 文件或类似的文件)并使用 Web 服务器(jetty 或 Tomcat)进行部署。

答案 1

您首先需要创建一个可以构建到.war文件中的常规Java项目(在Eclipse中,这将是一个动态Web项目)

此链接中的 spark 文档描述了需要添加到项目 Web.xml文件中的内容。http://sparkjava.com/documentation.html#other-webserver

筛选器内的文档中列出的参数值需要指向已定义路由的类。

此外,以前在 main() 中的所有代码都需要移动到 init()。

@Override
public void init() {
    get(new Route("/test") {
        @Override
        public Object handle(Request request, Response response) {
            return "response goes here;
        }

    });

另外,为了让我把它部署到 JBoss,我只能包含 spark 库,而不能包含 Jetty 库。完成此操作后,您应该能够构建战争并将其部署到服务器,就像任何其他Java项目一样。


答案 2

在这里,您可以找到有关部署的信息:http://sparkjava.com/documentation.html#embedded-web-server

首先,为配置设置过滤器选项:web.xml

<web-app>
  <!-- some options -->
  <filter>
    <filter-name>SparkFilter</filter-name>
    <filter-class>spark.servlet.SparkFilter</filter-class>
    <init-param>
      <param-name>applicationClass</param-name>
      <param-value>your.package.Application</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>SparkFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Application类应该实现接口,并且必须在方法中初始化路由。spark.servlet.SparkApplicationinit()

这个看起来像(在Java SE 8中,您可以将Lambda表达式用于路由器。

package your.package;

import static spark.Spark.*;

public class Application implements SparkApplication {
    @Override
    public void init() {
        get("/", (request, response) -> "Hello World");

        get("/hello/:name", (request, response) -> {
            return "Hello: " + request.params(":name");
        });
    }
}

具有此配置的应用程序适用于雄猫玻璃鱼服务器。


推荐