我有一个Spark MVC应用程序,非常简单。
根据spark documentation,这应该足以运行应用程序:
public class SparkServer {
public static void main(String args[]) {
Spark.staticFileLocation("src/main/webapp");
System.out
.println("bla bla bla");
RService rService = new SparqlRService();
new RController(rService);
}
}
我将该类放在项目中的包中,然后在Apache Tomcat服务器上运行Web应用程序(动态Web应用程序)。
运行Apache Tomcat时不会出现print语句,这意味着此类未被调用。 我知道这很有意义。这就是我要问的原因。请问如何让Apache Tomcat运行我的spark应用程序?
在@mlk answer之后,我做了以下事情:
public class SparkServer implements SparkApplication {
@Override
public void init() {
Spark.staticFileLocation("src/main/webapp");
System.out
.println("bla bla lba");
RService rService = new SparqlRService();
new RController(rService);
}
}
在我的web.xml中我做了:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>SRecommender</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>SparkFilter</filter-name>
<filter-class>spark.servlet.SparkFilter</filter-class>
<init-param>
<param-name>
applicationClass</param-name>
<param-value>com.srecommender.SparkServer</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SparkFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
我的SparkServer在一个包中:
源文件夹中存在的com.recommender
:src/main/java
我运行apache tomcat,但是当我从spark调用任何路径时,它仍然返回404。
HITE 我可以从main方法运行spark并调用我的页面,它们正在运行。所以我配置spark的方式问题在apache tomcat中运行
这是设置视图路径的方法
public RecommendationController(RecommendationService service) {
get("/", (request, response) -> {
Map<String, Object> model = new HashMap<>();
model.put("data", "forza ROMA");
model.put("data2", "It's Rome, It's home");
return View("src/main/webapp/template/index.html", model);
});
答案 0 :(得分:2)
Spark内置了一个容器,因此您不需要tomcat或jetty。如果您要部署到完整的容器,然后you can by creating a web.xml file并实施spark.servlet.SparkApplication
。
编辑:您缺少Web.xml中的applicationClass属性。
答案 1 :(得分:1)
WebApps不执行static void main()
方法,它们根据其部署的WAR文件中的web.xml
进行引导。
您是否有运行Web应用程序的经验?你需要一个像Tomcat或Jetty这样的容器。 Apache服务器仅用于提供HTTP,本身不是应用程序容器。