<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Spark Java 簡介 原文:http://zetcode.com/java/spark/ 這是 Spark Java Web 框架的入門教程。 我們介紹了 Spark Java 框架,并提供了三個代碼示例。 ## Spark Java Spark 是一個 Java 微框架,用于以最小的工作量在 Java8 中創建 Web 應用。 Spark 框架是為快速開發而構建的簡單,輕量級的 Java Web 框架。 它的靈感來自流行的 Ruby 微框架 Sinatra 。 Spark 廣泛使用 Java8 的 lambda 表達式,這使 Spark 應用不再那么冗長。 與其他 Java Web 框架相比,Spark 不使用大量的 XML 文件或注解。 ## 路由 Spark 應用包含一組路由。 路由將 URL 模式映射到 Java 處理器。 路由包含三個部分: * 動詞,包括獲取,發布,放置,刪除,開頭,跟蹤,連接和選項 * 諸如`/first`或`/hello/:name`之類的路徑 * 回調`(request, response) -> {}` ## 首個應用 第一個應用返回一條簡單消息。 Gradle 用于構建應用。 ```java $ tree . ├── build.gradle └── src └── main └── java └── com └── zetcode └── firstspark └── FirstSpark.java ``` 這是項目結構。 Gradle 的 Java 插件期望 Java 生產代碼位于`src/main/java`目錄中。 `build.gradle` ```java apply plugin: 'java' apply plugin: 'application' archivesBaseName = "first" version = '1.0' mainClassName = "com.zetcode.firstspark.FirstSpark" repositories { mavenCentral() } dependencies { compile 'com.sparkjava:spark-core:2.5' compile 'org.slf4j:slf4j-simple:1.7.6' } ``` 這是 Gradle 構建文件。 它包括 Spark 核心組件和 slf4j 簡單記錄器的依賴項。 `FirstSpark.java` ```java package com.zetcode.firstspark; import static spark.Spark.get; public class FirstSpark { public static void main(String[] args) { get("/first", (req, res) -> "First Spark application"); } } ``` 應用將`"First Spark application"`返回到 GET 請求。 當我們運行應用時,Spark 將啟動嵌入式 Jetty Web 服務器。 ```java get("/first", (req, res) -> "First Spark application"); ``` `get()`方法映射 HTTP GET 請求的路由。 在 Spark 術語中,路由是處理器。路由是映射到處理器的 URL 模式。 處理器可以是物理文件,也可以是 ```java $ gradle build ``` 我們使用`gradle build`命令構建應用。 ```java $ gradle run ``` 我們使用`gradle run`命令運行該應用。 嵌入式 Jetty 服務器啟動。 ```java $ curl localhost:4567/first First Spark application ``` 我們使用`curl`工具將 GET 請求發送到服務器。 內置嵌入式 Jetty 服務器默認情況下監聽端口 4567。 ## 你好應用 第二個應用將向用戶打招呼。 客戶端發送帶有 URL 的名稱,應用向用戶打招呼。 `build.gradle` ```java apply plugin: 'java' apply plugin: 'application' archivesBaseName = "hello" version = '1.0' mainClassName = "com.zetcode.hellospark.HelloSpark" repositories { mavenCentral() } dependencies { compile 'com.sparkjava:spark-core:2.5' compile 'org.slf4j:slf4j-simple:1.7.6' } ``` 這是應用的 Gradle 構建文件。 ```java $ tree . ├── build.gradle └── src └── main └── java └── com └── zetcode └── hellospark └── HelloSpark.java 6 directories, 2 files ``` 這是項目結構。 `HelloSpark.java` ```java package com.zetcode.hellospark; import static spark.Spark.get; public class HelloSpark { public static void main(String[] args) { get("/hello/:name", (req, res) -> "Hello " + req.params(":name")); } } ``` Spark 應用檢索請求參數,生成一條消息,然后將其返回給調用方。 ```java get("/hello/:name", (req, res) -> "Hello " + req.params(":name")); ``` `params()`方法返回提供的路由模式參數的值。 ```java $ gradle build run ``` 我們構建并運行該應用。 ```java $ curl localhost:4567/hello/Peter Hello Peter ``` 我們向服務器發送請求; URL 包含一個名稱。 該應用發回問候。 ## 在 Tomcat 中運行 Spark 應用 默認情況下,Spark 應用在嵌入式 Jetty 服務器中運行。 在此示例中,我們顯示了如何在 Tomcat 中運行 Spark Java 應用。 這次我們使用 Maven 構建工具并在 NetBeans 中創建一個項目。 ![NetBeans project structure](https://img.kancloud.cn/5f/09/5f0983da0c654b6e13a63e3ce8a3e330_291x292.jpg) 圖:NetBeans 項目結構 該圖顯示了該項目在 NetBeans 中的外觀。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>HelloSpark2</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>HelloSpark2</name> <properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.sparkjava</groupId> <artifactId>spark-core</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.21</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> <compilerArguments> <endorseddirs>${endorsed.dir}</endorseddirs> </compilerArguments> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project> ``` 這是 Maven 構建文件。 `context.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <Context path="/HelloSpark2"/> ``` 這是`context.xml`文件。 `web.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <welcome-file-list> <welcome-file>index.html</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.zetcode.hellospark2.HelloSpark</param-value> </init-param> </filter> <filter-mapping> <filter-name>SparkFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> ``` 在`web.xml`部署描述符中,我們指定`spark.servlet.SparkFilter`。 `HelloSpark.java` ```java package com.zetcode.hellospark2; import static spark.Spark.get; import spark.servlet.SparkApplication; public class HelloSpark implements SparkApplication { @Override public void init() { get("/hello/:name", (request, response) -> "Hello " + request.params(":name")); } } ``` 我們實現`SparkApplication`接口,并在`init()`方法中指定路由。 最后,我們運行 Tomcat Web 服務器。 ```java $ curl localhost:8084/HelloSpark2/hello/Peter Hello Peter ``` NetBeans 的內置 Tomcat 監聽端口 8084。 ## 模板引擎 Spark 沒有自己的模板系統。 它使用第三方引擎。 在以下兩個示例中,我們使用 Thymeleaf 和 FreeMarker。 ### 使用 Thymeleaf 在以下示例中,我們將把 Thymeleaf 模板引擎集成到我們的 Spark 應用中。 Thymeleaf 是適用于 Web 和獨立環境的現代服務器端 Java 模板引擎。 ```java $ tree . ├── build.gradle └── src └── main ├── java │ └── com │ └── zetcode │ └── thymeleaf │ └── SparkThymeleaf.java └── resources └── templates └── hello.html ``` 這是項目的目錄結構。 模板文件位于`src/main/resources/templates`目錄中。 `build.gradle` ```java apply plugin: 'java' apply plugin: 'application' archivesBaseName = "sparkthymeleaf" version = '1.0' mainClassName = "com.zetcode.thymeleaf.SparkThymeleaf" repositories { mavenCentral() } dependencies { compile 'com.sparkjava:spark-core:2.5' compile 'org.slf4j:slf4j-simple:1.7.6' compile 'com.sparkjava:spark-template-thymeleaf:2.3' } ``` 在這里,我們有 Gradle 構建文件,其中包含`spark-template-thymeleaf`依賴項。 `SparkThymeleaf.java` ```java package com.zetcode.thymeleaf; import java.util.HashMap; import java.util.Map; import spark.ModelAndView; import spark.Request; import spark.Response; import spark.template.thymeleaf.ThymeleafTemplateEngine; import static spark.Spark.get; import static spark.Spark.staticFileLocation; public class SparkThymeleaf { public static void main(String[] args) { get("/hello/:name", SparkThymeleaf::message, new ThymeleafTemplateEngine()); } public static ModelAndView message(Request req, Response res) { Map<String, Object> params = new HashMap<>(); params.put("name", req.params(":name")); return new ModelAndView(params, "hello"); } } ``` 應用讀取請求參數并將其放入`ModelAndView`對象。 ```java get("/hello/:name", SparkThymeleaf::message, new ThymeleafTemplateEngine()); ``` `ThymeleafTemplateEngine`的實例傳遞給`get()`方法。 `hello.html` ```java <pre class="code"> <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"></meta> <title>Hello user</title> </head> <body> <p th:inline="text">Hello, [[${name}]]!</p> </body> </html> ``` 這是`hello.html`模板文件。 它引用隨`ModelAndView`對象傳遞的名稱變量。 ```java $ curl localhost:4567/hello/Peter <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8" /> <title>Hello user</title> </head> <body> <p>Hello, Peter!</p> </body> </html> ``` 我們得到這個輸出。 ### FreeMarker 在以下示例中,我們將把 FreeMarker 模板引擎集成到我們的 Spark 應用中。 FreeMarker 是一個完善的 Java 模板引擎。 ```java $ tree . ├── build.gradle └── src └── main ├── java │ └── com │ └── zetcode │ └── SparkFreeMarker.java └── resources └── views └── hello.ftl ``` 這是項目的目錄結構。 模板文件位于`src/main/resources/views`目錄中。 `build.gradle` ```java apply plugin: 'application' sourceCompatibility = '1.8' version = '1.0' mainClassName = "com.zetcode.SparkFreeMarker" repositories { mavenCentral() } dependencies { compile 'com.sparkjava:spark-core:2.5.5' compile 'org.slf4j:slf4j-simple:1.7.24' compile 'com.sparkjava:spark-template-freemarker:2.5.5' } ``` 在這里,我們有 Gradle 構建文件,其中包含`spark-template-freemarker`依賴項。 `SparkFreeMarker.java` ```java package com.zetcode; import freemarker.template.Configuration; import freemarker.template.Version; import java.io.IOException; import java.util.HashMap; import java.util.Map; import spark.ModelAndView; import spark.Request; import spark.Response; import static spark.Spark.get; import spark.template.freemarker.FreeMarkerEngine; public class SparkFreeMarker { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(new Version(2, 3, 23)); conf.setClassForTemplateLoading(SparkFreeMarker.class, "/views"); get("/hello/:name", SparkFreeMarker::message, new FreeMarkerEngine(conf)); } public static ModelAndView message(Request req, Response res) { Map<String, Object> params = new HashMap<>(); params.put("name", req.params(":name")); return new ModelAndView(params, "hello.ftl"); } } ``` 我們為 FreeMarker 設置了相同的應用。 ```java Configuration conf = new Configuration(new Version(2, 3, 23)); conf.setClassForTemplateLoading(SparkFreeMarker.class, "/views"); ``` 我們用`Configuration`類配置 FreeMarker。 模板文件將放置在`views`目錄中,該目錄必須位于類路徑上。 ```java get("/hello/:name", SparkFreeMarker::message, new FreeMarkerEngine(conf)); ``` `FreeMarkerEngine`傳遞給`get()`方法。 `hello.ftl` ```java <!DOCTYPE html> <html> <head> <title>Home page</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <p>Hello ${name}</p> </body> </html> ``` 這是`hello.ftl`模板文件; 它引用隨`ModelAndView`對象傳遞的名稱變量。 ```java $ curl localhost:4567/hello/Lucy <!DOCTYPE html> <html> <head> <title>Home page</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <p>Hello Lucy</p> </body> </html> ``` 這是輸出。 在本教程中,我們介紹了 Spark Java 框架。 您可能也對相關教程感興趣: [Java 教程](/lang/java/),[游戲介紹](/java/play/),[Stripes 介紹](/java/stripes/)或 [Jtwig 教程](/java/jtwig/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看