美文网首页互联网科技Java 杂谈程序员
骚年,你可听说过 spark-java?

骚年,你可听说过 spark-java?

作者: java菲 | 来源:发表于2019-06-18 14:49 被阅读10次

本篇文章,我想向大家推荐一下 spark-java 这个框架,这里的 spark 并非是大数据相关的 apache-spark,而是一个创建Web应用程序的微框架。

1. Spark简介

Spark —— 用于Kotlin和Java 8以最低消耗创建Web应用程序的微框架。

快速开始:

(1)Java

import static spark.Spark.*;

public class HelloWorld {

public static void main(String[] args) {

get("/hello", (req, res) -> "Hello World");

}

}

(2)Kotlin

import spark.kotlin.*

fun main(args: Array<String>) {

val http: Http = ignite()

http.get("/hello") {

"Hello Spark Kotlin!"

}

}

运行查看: http://localhost:4567/hello

(3)为生产效率而生

Spark Framework是一个简单而富有表现力的Java/Kotlin Web框架,是为快速开发而构建的DSL(领域专用语言,domain specific language / DSL)。Spark的目的是为Kotlin/Java开发人员提供一种替代方案,以便开发他们的web应用程序时,尽可能有表达更多的内容和使用最少的样板。 凭借明确的理念,Spark的设计不仅让你的工作更富有成效,而且可以在Spark的流畅性,声明性以及丰富表达式的影响下,让你的代码更好。

(4)你可以充分利用JVM

JVM提供了世界上最大的编程生态系统之一。虽然它有很多Java的web框架,但是纯Java的web开发传统意义上都是非常麻烦的。若你热爱JVM,但是憎恨累赘的代码和框架,那么Spark就是你专属的web框架。它可以几分钟内启动并运行,而且你可以在Groovy或者Kotlin或者其他任何你使用的语言中使用。 Spark是一个有着丰富表达的,轻量级且开放的纯Java(和Kotlin)web框架,与其他框架不同,你可以按你所想构建应用程序。

(5)微服务,到处都是微服务

2015年是微服务爆火的一年,现在你若开始研究微服务,你会意识到Spark对于微服务非常棒。微服务在微框架下运行得最好,而且Spark可以用少于十行代码构建你的REST API服务于JSON。 虽说Spark主要用于创建REST API,但它也支持多种模板引擎。为何不为你的后端创建一个Spark应用程序,并且为你的前端创建一个呢?

(6)NodeJS开发者?用TypeScript?试试Spark替代吧!

后来,很多服务端的web开发已被NodeJS接管,但越来越多的NodeJS开发人员正使用TypeScript以及其他编译为JavaScript的静态类型语言。为什么不完全一致呢,去使用实际上是用类型设计的,且打算在服务器端运行的语言? 你还可以获得在JVM上运行应用程序的所有好处,其中类库亦不会天天被弃用。 如果你转自ExpressJS,那么对于Spark的语法将会非常熟悉,并且与许多JavaScript web框架不同,Spark在未来并不会过时。

(7)典型用途

2015年调查告诉我们,超过50%的Spark用户使用Spark创建REST API,而大约25%使用Spark创建网站。大约15%的Spark应用程序每天服务于超过10,000个用户。

点击链接阅读完整调查:http://sparkjava.com/news#sparksurvey

2. 代码示例

Getting started

当前版本为2.9.0,更多版本可以参考releases【https://github.com/perwendel/spark/releases】

compile group: 'com.sparkjava', name: 'spark-core', version: '2.9.0'

publicclasscom.SparkJavaApplication{

public staticvoidmain(String[] args) { 

get("/hello", (req, res) ->"Hello World");

 }

}

更多例子

publicclasscom.SparkJavaApplication{publicstaticvoidmain(String[] args){

port(4567);

get("/hello", (req, res) ->"Hello World");

get("/users/:name", (request, response) ->"Selected user: "+ request.params(":name"));

get("/news/:section", (request, response) -> {

 response.type("text/xml");

return"<?xml version=\"1.0\" encoding=\"UTF-8\"?><news>"+ request.params("section") +"</news>";

 });

get("/protected", (request, response) -> { 

halt(403,"I don't think so!!!");returnnull; 

});

get("/redirect", (request, response) -> { 

response.redirect("/news/world");returnnull; 

});

get("/", (request, response) ->"root");

get("/hello2","application/json", (request, response) -> {

return"{\"message\": \"Hello World\"}"; });

 }}

你可以使用port()函数定义开启的端口。 同时Spark参数的传递是以:param的形式传递的,获取方式同样是常用的request.params("paramName")。 在定义接口的时候还可以定义接口接收的类型,比如"application/json"。

此外,除了get方法,其他比如post、put等方法如下例所示:

publicclassBooks{/**

* Map holding the books

*/publicstaticMap books = newHashMap<>();

// Creates a new book resource, will return the ID to the created resource

// author and title are sent as query parameters e.g. /books?author=Foo&title=Barpublicstaticvoid main(String[] args) { 

post("/books", (request, response) -> {

Stringauthor = request.queryParams("author");

Stringtitle = request.queryParams("title"); 

Book book = newBook(author, title);

 Random random = newRandom(); 

int id = random.nextInt(Integer.MAX_VALUE);

 books.put(String.valueOf(id), book);

 response.status(201);

// 201 Createdreturnid; });

// Gets the book resource for the provided idget("/books/:id", (request, response) -> { 

Book book = books.get(request.params(":id"));if(book !=null) {

return"Title: "+ book.getTitle() +", Author: "+ book.getAuthor();

 }else

response.status(404);

// 404 Not foundreturn"Book not found";

 } 

});

// Updates the book resource for the provided id with new information

// author and title are sent as query parameters e.g. /books/<id>?author=Foo&title=Barput("/books/:id", (request, response) -> {

Stringid = request.params(":id"); 

Book book = books.get(id);if(book !=null) {

StringnewAuthor= request.queryParams("author");

StringnewTitle= request.queryParams("title");

if(newAuthor!=null) { book.setAuthor(newAuthor); 

}

if(newTitle!=null) {

 book.setTitle(newTitle);

 }

return"Book with id '"+ id +"' updated";

}else

response.status(404);

// 404 Not foundreturn"Book not found"; 

});

// Deletes the book resource for the provided iddelete("/books/:id", (request, response) -> {

Stringid = request.params(":id");

 Book book = books.remove(id);if(book !=null) {

return"Book with id '"+ id +"' deleted"; }else{ response.status(404);

// 404 Not foundreturn"Book not found";

 } 

});

// Gets all available book resources (id's)get("/books", (request, response) -> { 

StringBuilder ids = newStringBuilder();for(Stringid :books.keySet()) { 

ids.append(id).append(" ");

 }

returnids.toString();

 });

 }}

更多例子可以参考github项目【https://github.com/perwendel/spark/】

3. 总结

Spark 是一个非常轻量级的web框架,若你不需要那么多的功能,只是提供简单的web接口,那么Spark是个非常适合的选择。另外,Spark同样适用于微服务的架构,它的功能不止于此,若是有兴趣,可以自行探索。 本文只是一篇引子,为的是我不用再引用所占内存较大Spring的web的框架,项目启动速度飞升。

相关文章

  • 骚年,你可听说过 spark-java?

    本篇文章,我想向大家推荐一下 spark-java 这个框架,这里的 spark 并非是大数据相关的 apache...

  • 骚年

    骚年,骚年 有多少鲜肉萝莉都来把你敬仰 骚年,骚年 有多少段子视频到处把你传扬 精湛的演技 举世无双 骚年是当代元...

  • 创建私有Pods,从小白到老铁

    前言 骚年,你听说过组件化吗?没有?但你一定玩过乐高玩具,乐高玩具本身一个庞大的模型却是依靠无数个各自分工的基础模...

  • 2016-05-04 Laravist群友杂谈 --- 不咸不淡

    骚年,你渴望奶子么、哦不,是骚年,你渴望力量么! [一堆网站分享] http://themeforest.net/...

  • 骚年,这两类人,才有未来

    骚年们,开始找工作了,兴奋激动还是忧心忡忡?骚年们,工作一段时间了,是工作激发了你的本能还是你被工作磨去了棱角?骚...

  • 你的骚年

    之前一个朋友说的, 你知道的越多,你不知道的就越多, 你知道的越少,你不知道的就越少。 奋起吧, 骚年!

  • 你赢了,骚年!

    黄昏,街边,银杏树下。 人,男人,两个男人,一位落魄少年,一位富家公子,两人面对面伫立着。 “是你?” “是我。”...

  • 骚年,请勇敢的向前冲吧!

    骚年,你的生活,现在是否乱踢八糟呢!不想去上班,心情时好时坏。骚年啊,骚年,请勇敢的向前冲吧!这个世上,哪有什么安...

  • 哈弗H9-2020款正式上市!实力碾压奔驰大G,路虎也just

    作为最近几年新兴的运动,越野几乎是每个骚年心中的梦想!而无论你是初入门者还是老炮儿,几乎都听说过奔驰大G、路虎的大...

  • 你不努力,你终将孤独

    加油吧,骚年,你不努力,没人看得起你

网友评论

    本文标题:骚年,你可听说过 spark-java?

    本文链接:https://www.haomeiwen.com/subject/ansfqctx.html