- GUI
- Windows API tutorial
- Introduction to Windows API
- Windows API main functions
- System functions in Windows API
- Strings in Windows API
- Date & time in Windows API
- A window in Windows API
- First steps in UI
- Windows API menus
- Windows API dialogs
- Windows API controls I
- Windows API controls II
- Windows API controls III
- Advanced controls in Windows API
- Custom controls in Windows API
- The GDI in Windows API
- PyQt4 tutorial
- PyQt5 tutorial
- Qt4 tutorial
- Introduction to Qt4 toolkit
- Qt4 utility classes
- Strings in Qt4
- Date and time in Qt4
- Working with files and directories in Qt4
- First programs in Qt4
- Menus and toolbars in Qt4
- Layout management in Qt4
- Events and signals in Qt4
- Qt4 Widgets
- Qt4 Widgets II
- Painting in Qt4
- Custom widget in Qt4
- The Breakout game in Qt4
- Qt5 tutorial
- Introduction to Qt5 toolkit
- Strings in Qt5
- Date and time in Qt5
- Containers in Qt5
- Working with files and directories in Qt5
- First programs in Qt5
- Menus and toolbars in Qt5
- Layout management in Qt5
- Events and signals in Qt5
- Qt5 Widgets
- Qt5 Widgets II
- Painting in Qt5
- Custom widget in Qt5
- Snake in Qt5
- The Breakout game in Qt5
- PySide tutorial
- Tkinter tutorial
- Tcl/Tk tutorial
- Qt Quick tutorial
- Java Swing tutorial
- JavaFX tutorial
- Java SWT tutorial
- wxWidgets tutorial
- Introduction to wxWidgets
- wxWidgets helper classes
- First programs in wxWidgets
- Menus and toolbars in wxWidgets
- Layout management in wxWidgets
- Events in wxWidgets
- Dialogs in wxWidgets
- wxWidgets widgets
- wxWidgets widgets II
- Drag and Drop in wxWidgets
- Device Contexts in wxWidgets
- Custom widgets in wxWidgets
- The Tetris game in wxWidgets
- wxPython tutorial
- Introduction to wxPython
- First Steps
- Menus and toolbars
- Layout management in wxPython
- Events in wxPython
- wxPython dialogs
- Widgets
- Advanced widgets in wxPython
- Drag and drop in wxPython
- Internationalisation
- Application skeletons in wxPython
- The GDI
- Mapping modes
- Creating custom widgets
- Tips and Tricks
- wxPython Gripts
- The Tetris game in wxPython
- C# Winforms Mono tutorial
- Java Gnome tutorial
- Introduction to Java Gnome
- First steps in Java Gnome
- Layout management in Java Gnome
- Layout management II in Java Gnome
- Menus in Java Gnome
- Toolbars in Java Gnome
- Events in Java Gnome
- Widgets in Java Gnome
- Widgets II in Java Gnome
- Advanced widgets in Java Gnome
- Dialogs in Java Gnome
- Pango in Java Gnome
- Drawing with Cairo in Java Gnome
- Drawing with Cairo II
- Nibbles in Java Gnome
- QtJambi tutorial
- GTK+ tutorial
- Ruby GTK tutorial
- GTK# tutorial
- Visual Basic GTK# tutorial
- PyGTK tutorial
- Introduction to PyGTK
- First steps in PyGTK
- Layout management in PyGTK
- Menus in PyGTK
- Toolbars in PyGTK
- Signals & events in PyGTK
- Widgets in PyGTK
- Widgets II in PyGTK
- Advanced widgets in PyGTK
- Dialogs in PyGTK
- Pango
- Pango II
- Drawing with Cairo in PyGTK
- Drawing with Cairo II
- Snake game in PyGTK
- Custom widget in PyGTK
- PHP GTK tutorial
- C# Qyoto tutorial
- Ruby Qt tutorial
- Visual Basic Qyoto tutorial
- Mono IronPython Winforms tutorial
- Introduction
- First steps in IronPython Mono Winforms
- Layout management
- Menus and toolbars
- Basic Controls in Mono Winforms
- Basic Controls II in Mono Winforms
- Advanced Controls in Mono Winforms
- Dialogs
- Drag & drop in Mono Winforms
- Painting
- Painting II in IronPython Mono Winforms
- Snake in IronPython Mono Winforms
- The Tetris game in IronPython Mono Winforms
- FreeBASIC GTK tutorial
- Jython Swing tutorial
- JRuby Swing tutorial
- Visual Basic Winforms tutorial
- JavaScript GTK tutorial
- Ruby HTTPClient tutorial
- Ruby Faraday tutorial
- Ruby Net::HTTP tutorial
- Java 2D games tutorial
- Java 2D tutorial
- Cairo graphics tutorial
- PyCairo tutorial
- HTML5 canvas tutorial
- Python tutorial
- Python language
- Interactive Python
- Python lexical structure
- Python data types
- Strings in Python
- Python lists
- Python dictionaries
- Python operators
- Keywords in Python
- Functions in Python
- Files in Python
- Object-oriented programming in Python
- Modules
- Packages in Python
- Exceptions in Python
- Iterators and Generators
- Introspection in Python
- Ruby tutorial
- PHP tutorial
- Visual Basic tutorial
- Visual Basic
- Visual Basic lexical structure
- Basics
- Visual Basic data types
- Strings in Visual Basic
- Operators
- Flow control
- Visual Basic arrays
- Procedures & functions in Visual Basic
- Organizing code in Visual Basic
- Object-oriented programming
- Object-oriented programming II in Visual Basic
- Collections in Visual Basic
- Input & output
- Tcl tutorial
- C# tutorial
- Java tutorial
- AWK tutorial
- Jetty tutorial
- Tomcat Derby tutorial
- Jtwig tutorial
- Android tutorial
- Introduction to Android development
- First Android application
- Android Button widgets
- Android Intents
- Layout management in Android
- Android Spinner widget
- SeekBar widget
- Android ProgressBar widget
- Android ListView widget
- Android Pickers
- Android menus
- Dialogs
- Drawing in Android
- Java EE 5 tutorials
- Introduction
- Installing Java
- Installing NetBeans 6
- Java Application Servers
- Resin CGIServlet
- JavaServer Pages, (JSPs)
- Implicit objects in JSPs
- Shopping cart
- JSP & MySQL Database
- Java Servlets
- Sending email in a Servlet
- Creating a captcha in a Servlet
- DataSource & DriverManager
- Java Beans
- Custom JSP tags
- Object relational mapping with iBATIS
- Jsoup tutorial
- MySQL tutorial
- MySQL quick tutorial
- MySQL storage engines
- MySQL data types
- Creating, altering and dropping tables in MySQL
- MySQL expressions
- Inserting, updating, and deleting data in MySQL
- The SELECT statement in MySQL
- MySQL subqueries
- MySQL constraints
- Exporting and importing data in MySQL
- Joining tables in MySQL
- MySQL functions
- Views in MySQL
- Transactions in MySQL
- MySQL stored routines
- MySQL Python tutorial
- MySQL Perl tutorial
- MySQL C API programming tutorial
- MySQL Visual Basic tutorial
- MySQL PHP tutorial
- MySQL Java tutorial
- MySQL Ruby tutorial
- MySQL C# tutorial
- SQLite tutorial
- SQLite C tutorial
- SQLite PHP tutorial
- SQLite Python tutorial
- SQLite Perl tutorial
- SQLite Ruby tutorial
- SQLite C# tutorial
- SQLite Visual Basic tutorial
- PostgreSQL C tutorial
- PostgreSQL Python tutorial
- PostgreSQL Ruby tutorial
- PostgreSQL PHP tutorial
- PostgreSQL Java tutorial
- Apache Derby tutorial
- SQLAlchemy tutorial
- MongoDB PHP tutorial
- MongoDB Java tutorial
- MongoDB JavaScript tutorial
- MongoDB Ruby tutorial
- Spring JdbcTemplate tutorial
- JDBI tutorial
Introduction to Spark Java
This is an introductory tutorial of the Spark Java web framework. We introduce the Spark Java framework and provide three code examples.
Spark is a Java micro framework for creating web applications in Java 8 with minimal effort. Spark framework is a simple and lightweight Java web framework built for rapid development. It was inspired by Sinatra, a popular Ruby micro framework.
Spark uses Java 8's lambda expressions extensively, which makes Spark applications a lot less verbose. In contrast to other Java web frameworks, Spark does not use heavily XML files or annotations.
Routes
A Spark application contains a set of routes. A route maps URL patterns to Java handlers.
A route has three parts:
- a verb, including get, post, put, delete, head, trace, connect, and options
- a path such as /first or /hello/:name
- a callback (request, response) -> { }
First application
The first application returns a simple message. Gradle is used to build the application.
$ tree . ├── build.gradle └── src └── main └── java └── com └── zetcode └── firstspark └── FirstSpark.java
This is the project structure. The Gradle's Java plugin expects the Java production code to be located in src/main/java
directory.
build.gradle
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' }
This is the Gradle build file. It includes dependencies for Spark core components and the slf4j simple logger.
FirstSpark.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"); } }
The applications returns the "First Spark application message" to the GET request. When we run the application, Spark starts an embedded Jetty web server.
get("/first", (req, res) -> "First Spark application");
The get()
method maps the routes for HTTP GET requests. In the Spark lingo, a route is a handler A route is a URL pattern that is mapped to a handler. A handler can be a physical file or a
$ gradle build
We build the application with gradle build
command.
$ gradle run
We run the application with gradle run
command. An embedded Jetty server is started.
$ curl localhost:4567/first First Spark application
We send a GET request to the server with the curl
tool. The built-in embedded Jetty server listens on port 4567 by default.
Hello application
The second application will respond with a greeting to the user. The client sends a name with the URL and the application responds with a greeting to the user.
build.gradle
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' }
This is the Gradle build file of the application.
$ tree . ├── build.gradle └── src └── main └── java └── com └── zetcode └── hellospark └── HelloSpark.java 6 directories, 2 files
This is the project structure.
HelloSpark.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")); } }
The Spark application retrieves the request parameter, builds a message, and returns it to the caller.
get("/hello/:name", (req, res) -> "Hello " + req.params(":name"));
The params()
method returns the value of the provided route pattern parameter.
$ gradle build run
We build and run the application.
$ curl localhost:4567/hello/Peter Hello Peter
We send a request to the server; the URL includes a name. The application sends back a greeting.
Running Spark application in Tomcat
By default, Spark applications run in an embedded Jetty server. In this example, we show how to run a Spark Java application in Tomcat. This time we use Maven build tool and create a project in NetBeans.

The figure shows how the project looks like in NetBeans.
pom.xml
<?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>
This is the Maven build file.
context.xml
<?xml version="1.0" encoding="UTF-8"?> <Context path="/HelloSpark2"/>
This is the context.xml
file.
web.xml
<?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>
In the web.xml
deployment descriptor, we specify the spark.servlet.SparkFilter
.
HelloSpark.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")); } }
We implement the SparkApplication
interface and specify the route in the init()
method.
Finally, we run the Tomcat web server.
$ curl localhost:8084/HelloSpark2/hello/Peter Hello Peter
The NetBeans' built-in Tomcat listens on port 8084.
Using Thymeleaf
In the following example, we are going to integrate the Thymeleaf template engine into our Spark application. Thymeleaf is a modern server-side Java template engine for both web and standalone environments.
Spark does not have its own templating system; it uses third-party engines.
$ tree . ├── build.gradle └── src └── main ├── java │ └── com │ └── zetcode │ └── thymeleaf │ └── SparkThymeleaf.java └── resources └── templates └── hello.html 8 directories, 3 files
This is the directory structure of the project. The template files are located in the src/main/resources/templates
directory.
build.gradle
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' }
Here we have the Gradle build file, which includes the spark-template-thymeleaf
dependency.
SparkThymeleaf.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"); } }
The application reads the request parameter and puts it into the ModelAndView
object.
get("/hello/:name", SparkThymeleaf::message, new ThymeleafTemplateEngine());
An instance of the ThymeleafTemplateEngine
is passed to the get()
method.
hello.html <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>
This is the hello.html
template file. It refers to the name variable which was passed with the ModelAndView
object.
$ 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>
We get this output.
In this tutorial, we have introduced the Spark Java framework. You might also be interested in the related tutorials: Java tutorial , Introduction to Play , Introduction to Stripes , or Jtwig tutorial .
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论