從瀏覽器輸入參數,到後臺處理的vertx程序

vertx因爲性能較高,逐漸變得流行。下面將一個vertx的入門案例。java

添加依賴web

        <!-- vertx -->
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-core</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-web</artifactId>
            <version>3.5.0</version>
        </dependency>

 

1:建立一個vertical,可以對url進行攔截sql

   

package payItem.main;

import java.util.HashMap;
import java.util.Map;

import com.yiji.openapi.tool.fastjson.JSON;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.BodyHandler;


public class AutoAccountVerticle extends AbstractVerticle{
    
    public void start(){
        Router router=Router.router(vertx);//建立路由
        router.route().handler(BodyHandler.create());  //處理請求體body
        router.route("/autoAccount").handler(          //攔截url
                ctx -> {  //上下文
                    String username=ctx.request().getParam("username");  //得到請求中的參數
                    String password=ctx.request().getParam("password");
                    JsonObject jo=new JsonObject();
                    jo.put("username", username).put("password", password);  //將參數轉化爲json數據,添加到JsonObject
                    
                    vertx.eventBus().<JsonObject> send(   //事件總線,交由處理程序處理,此次請求
                            AutoAccountService.AUTO_ACCOUNT_SERVICE_URL,   //處理程序的url
                            jo,             //傳遞給處理程序的消息體,只能是基本數據類型或者JsonObject類型
                            result -> {     //返回結果
                                if(result.succeeded()){   
                                    System.out.println(""+result.result().replyAddress());
                                     ctx.response()  //對前臺的響應。
                                    .putHeader("content-type", "application/json")
                                    .end("JSON_CB(Json.encodePrettily(result.result().body()))");  //返回jsonP數據。
//                                     .end(Json.encodePrettily(result.result().body()));  //返回json數據。
                                }else{
                                    ctx.response().setStatusCode(400)
                                    .end(result.cause().toString());
                                }
                                }
                            );
                            
                });
        vertx.createHttpServer().requestHandler(router::accept).listen(8080);
    }


}

2:建立處理事件json

   

package payItem.main;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;


/**
 * 處理程序
 * @author admin
 *
 */
public class AutoAccountService extends AbstractVerticle {

  private SQLClient sqlClient;
  public static String AUTO_ACCOUNT_SERVICE_URL="AUTO_ACCOUNT_SERVICE_URL";

  public void start(){
      
        vertx.eventBus().consumer(AUTO_ACCOUNT_SERVICE_URL,  //處理的URL
                msg -> {//接收的消息
                    JsonObject jo=(JsonObject) msg.body();
                    System.out.println(jo); //處理請求消息
                    msg.reply(jo);  //返回的消息,給result。
                  }
                );
}
}

3:在主函數中發佈verticle,每一個verticle,都能成爲一個服務,只需添加vertx.createHttpServer().requestHandler(router::accept).listen(8080)便可,這樣裏面就能夠設置路由功能。api

     可是帶有主函數的verticle只能有一個瀏覽器

    

package payItem.main;

import io.vertx.core.Vertx;

public class AutoAccountMain {

    public static void main(String[] args) {
        Vertx vertx=Vertx.vertx(); 
        vertx.deployVerticle(new AutoAccountService());
        vertx.deployVerticle(new AutoAccountVerticle());
    }
}

4:訪問:http://localhost:8080/autoAccount?username=1&passward=2app

   瀏覽器顯示:函數

JSON_CB(Json.encodePrettily(result.result().body()))
相關文章
相關標籤/搜索