HTTP路由handlersjava
根据依赖URL模式和HTTP方法,startHttpServer的路由实例会指向不一样的handlers,每个handlers处理一个HTTP请求,执行一个数据库查询,渲染一个FreeMarker模板的HTML页面。数据库
页面目录handler浏览器
wiki的页面目录提供了连接的入口,或者建立一个新的:微信
这是直接将select * SQL查询返回的结果数据传递给FreeMarker模板来渲染到HTML响应。异步
indexHandler方法的代码以下:maven
1.SQL查询的结果会经过JsonArray和JsonObject的对象返回。编辑器
2.RoutingContext对象将使用key/value的数据,使之用于模板或者路由handlers链。ide
3.渲染一个模板,这是一个异步的操做,须要咱们使用AsyncResult。ui
4.AsyncResult包含一个模板渲染成功的String,咱们能够结束使用这个值。设计
5.在失败的状况下,RoutingContext提供一个方式来返回一个HTTP 500错误给HTTP客户端的。
FreeMarker模板须要放在src/main/resources/templates,其中的index.ftl模板代码以下:
Key / value的数据存在RoutingContext对象里,能够经过FreeMarker的context获取。
既然多数的模板有公用的header和footers,咱们提取了下面的代码到header.ftl
and footer.ftl
wiki页面渲染handler
这个handler处理HTTP的GET请求,渲染以下的页面:
页面上提供了一个编辑的按钮,而不是有一个单独的处理程序和模板,咱们仅仅依靠JavaScript和CSS切换编辑器,当按钮被点击:
pageRenderingHandler方法的代码以下:
1.获取URL请求中的参数(/wiki/:name)
2.经过使用JsonArray传递参数来取代SQL语句中的 ?。
3.来自txtmark Markdown中的Processor是咱们是会用的渲染类库。
page.ftl的模板代码以下:
Page建立handler:
在首页提供了一个属性来建立新的页面,设计的HTML和URL都会由这个handler管理,这个策略并非实际上在数据库中建立一条记录,而是重定向到一个Wiki页面来建立。既然这个Wiki页面并不存在,pageRenderingHandler方法将会使用一个默认的文本,最终用户能够来剪辑和保存这个页面。
这个方法是pageCreateHandler,它的重定向是经过HTTP的状态码303:
页面保存Handler
pageUpdateHandler方法用来处理保存页面的HTTP POST请求,当一个页面已经存在的时候也是这个(执行SQL的update操做)或者保存一个新的页面(使用SQl中的额insert操做)
1.RoutingContext能够获取HTTP POST请求中的表单参数,注意没有BodyHandler Router配置的,这些值将无效,须要手动解码HTTP POST的请求数据。
2.咱们在page.ftl使用了一个hidden值,用了知道是否事更新一个已经有的页面仍是建立一个。
3.Again,咱们须要把SQL的查询参数放到JsonArray中。
4.updateWithParams方法用于insert
/ update
/ delete
SQL操做。
5.成功后没咱们将重定向到那个编辑过的页面。
页面删除handler
pageDeletionHandler实现的方法事比较直接的。经过传递一个wiki记录的惟一标识,而后执行SQL的delete操做后重定向到首页:
终于要运行这个应用:
在这个阶段,咱们有了一个能够运行的独立应用。
在运行以前咱们须要使用maven构建一下:
mvn clean package
在构建完成后会生成一个Jar包(包含了全部的依赖,Vert.x 和 a JDBC ),运行是比较简单的:
java -jar target/wiki-step-1-1.1.0-fat.jar
而后咱们能够选择本身喜欢的浏览器访问 http://localhost:8080/ ,enjoy!
原文连接:http://vertx.io/docs/guide-for-java-devs/
个人微信公众号: