微型的Java Web框架 Spark
2011-05-25 14:24
337 查看
Spark是一个可以让你以最小的代价快速创建Web应用的轻量级Java web框架,它的灵感来自于Sinatra。
开始使用Spark
Routes
Request
Response
终止一个请求
Filters
请求重定向
指定端口
[/code]
打开下面的链接查看效果:
动词 (get, post, put, delete, head, trace, connect, options)
路径 (/hello, /users/:name)
回调函数 ( handle(Request request, Response response) )
注意!Spark是根据Routes定义的顺序来匹配的。Spark会调用第一个和请求匹配的Routes。
可以在Route的路径中指定参数,然后通过调用request对象的params方法来获得:
当然在halt的时候你也可以指定返回的状态:
或者是返回的信息:
或者都指定:
After filter在每一个request之后执行,它们可以读取request,也可以读取/修改response:
你可以为filter指定pattern,这样它们就只过滤符合pattern的请求:
开始使用Spark
Routes
Request
Response
终止一个请求
Filters
请求重定向
指定端口
开始使用Spark
下载spark和spark依赖的类库(或者让maven来为你做这些事情),把它们放在工程classpath下,开始动手:import static spark.Spark.*; import spark.*; public class HelloWorld { public static void main(String[] args) { get(new Route("/hello") { @Override public Object handle(Request request, Response response) { return "Hello World!"; } }); } }
[/code]
打开下面的链接查看效果:
http://localhost:4567/hello
Routes
Spark程序主要是由一组routes构成。一个route由三个部分组成:动词 (get, post, put, delete, head, trace, connect, options)
路径 (/hello, /users/:name)
回调函数 ( handle(Request request, Response response) )
注意!Spark是根据Routes定义的顺序来匹配的。Spark会调用第一个和请求匹配的Routes。
.... get(new Route("/") { @Override public Object handle(Request request, Response response) { // .. Show something .. } }); post(new Route("/") { @Override public Object handle(Request request, Response response) { // .. Create something .. } }); put(new Route("/") { @Override public Object handle(Request request, Response response) { // .. Update something .. } }); delete(new Route("/") { @Override public Object handle(Request request, Response response) { // .. annihilate something .. } }); options(new Route("/") { @Override public Object handle(Request request, Response response) { // .. appease something .. } }); ....
可以在Route的路径中指定参数,然后通过调用request对象的params方法来获得:
// matches "GET /hello/foo" and "GET /hello/bar" // request.params(":name") is 'foo' or 'bar' get(new Route("/hello/:name") { @Override public Object handle(Request request, Response response) { return "Hello: " + request.params(":name"); } });
Request
handle方法的request参数提供了和请求相关的信息和功能:.... request.body(); // request body sent by the client request.contentLength(); // length of request body request.contentType(); // content type of request.body request.headers(); // the HTTP header list request.headers("BAR"); // value of BAR header request.host(); // "example.com" request.ip(); // client IP address request.pathInfo(); // the path info request.port(); // the server port request.queryParams("FOO"); // value of FOO query param request.queryParams(); // the query param list request.raw(); // raw request handed in by Jetty request.requestMethod(); // The HTTP method (GET, ..etc) request.scheme(); // "http" request.url(); // "http://example.com/foo" request.userAgent(); // user agent ....
Response
handle方法的response参数提供了和响应相关的信息和功能:.... response.body("Hello"); // sets content to Hello response.header("FOO", "bar"); // sets header FOO with value bar response.raw(); // raw response handed in by Jetty response.redirect("/example"); // browser redirect to /example response.status(401); // set status code to 401 response.type("text/xml"); // set content type to text/xml ....
终止一个请求
如果想要在一个filter或者route中马上终止一个请求,那么就使用:halt();
当然在halt的时候你也可以指定返回的状态:
halt(401);
或者是返回的信息:
halt("This is the body");
或者都指定:
halt(401, "Go Away!");
Filters
Before filter在request之前执行,它们可以读取request,也可以读取/修改response。 如果想要停止执行filter,那么就调用halt方法:before(new Filter() { // matches all routes @Override public void handle(Request request, Response response) { boolean authenticated; // ... check if authenticated if (!authenticated) { halt(401, "You are not welcome here"); } } });
After filter在每一个request之后执行,它们可以读取request,也可以读取/修改response:
after(new Filter() { @Override public void handle(Request request, Response response) { response.header("foo", "set by after filter"); } });
你可以为filter指定pattern,这样它们就只过滤符合pattern的请求:
before(new Filter("/protected/*") {
@Override
public void handle(Request request, Response response) {
// ... check if authenticatedhalt(401, "Go Away!");}
});
请求重定向
你可以通过redirect方法使一个请求重定向:response.redirect("/bar");
指定端口
默认情况下,Spark监听的端口是4567。如果你想要指定别的端口,那么就在routes或者filters里面调用下面的方法:setPort(9090); // Spark will run on port 9090
相关文章推荐
- Spark 简易入门教程(Java的微型Web框架)
- Spark——最简单明了的Java Web框架(1)
- Spark——最简单明了的Java Web框架(2)
- javaweb框架之Hibernate3.6.0增删查该基本操作与Junit测试类
- 初学JavaWeb-SSM框架实现增删改查——改
- Java Web 框架 Tapestry
- JAVA 开发平台的技术和框架(一)Web前端
- JX8NET 小游戏网 java web框架发展,大致经历以下几个
- 技术收集 rose – java web 开发框架 来自人人网的开源贡献
- Portal-Basic Java Web 应用开发框架:应用篇(十) —— 新 DAO 访问接口
- Portal-Basic Java Web 应用开发框架:应用篇(十二) —— Action Convention
- Java Web开发框架专家谈
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
- WebObjects:苹果的Java web框架将开放源码
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
- 在Java Web开发框架中创建VoiceXML页面-扩展 Java 驱动的 VoiceXML 应用程序
- JavaWeb之JDBC&自定义框架/DBUtil(十五)
- 集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery
- Java web 三大框架异常学习总结
- java web框架的小段子