五、Web-路由

现在,我们要真正的开发一个 Web 服务了.首先我们从一个路由的开发作为起点,路由的开发设计上的目的是通过在配置文件中配置好路由,来告诉服务器哪些路由用哪个后台的 Java 类来处理,这样对于路由的管理更加清晰,很容易从 URL 地址就直接对应到后台的处理类.使代码编的简单且易维护.

通过路由配置来实现 Web 服务的步骤:

  • 1.做好路由规划.
  • 2.编写路由.
  • 3.在 web.json 中注册路由.
  • 4.启动路由(java -jar ./bin/voovan-framework.jar).

1.找到路由的注册入口

路由的入口在 conf/web.json 文件中.下面我们截取一段路由配置:

  1. .......
  2. "Routers": [
  3. {
  4. "name": "配置路由测试", //路由名称
  5. "Route": "/configRouter", //Http请求路径
  6. "Method": "GET", //Http请求方法
  7. "ClassName": "org.voovan.test.http.router.HttpTestRouter" //Http 路由处理器
  8. }
  9. ]
  10. .......

2.做好路由规划,并配置路由

首先我们需要先对路由进行一个规划,例如:

  • 订单访问的路由: /order/…..
  • 客户信息访问的路由: /cust/…..
  • 商品访问的路由: /item/…..那么我们就可以根据以上的路由规划,做相应的路由配置:
  1. .......
  2. "Routers": [
  3. {
  4. "name": "订单访问路由", //路由名称
  5. "Route": "/order/*", //Http请求路径
  6. "Method": "GET", //Http请求方法
  7. "ClassName": "org.test.OrderRouter" //Http 路由处理器
  8. },{
  9. "name": "客户信息访问路由", //路由名称
  10. "Route": "/cust/*", //Http请求路径
  11. "Method": "GET", //Http请求方法
  12. "ClassName": "org.test.CustRouter" //Http 路由处理器
  13. },{
  14. "name": "商品访问的路由", //路由名称
  15. "Route": "/item/*", //Http请求路径
  16. "Method": "GET", //Http请求方法
  17. "ClassName": "org.test.ItemRouter" //Http 路由处理器
  18. }
  19. ]
  20. .......

其中路由中的是通配符, 用来匹配任意个数的任意字符,但会终止于/,如:/item/则可以匹配/item/3342 和 /item/user3438458

3.编写一个路由

编写一个路由的第一步就是需要继承org.voovan.http.server.HttpRouter接口.下面我们来看看这个路由接口的定义:

  1. public void Process(HttpRequest request,HttpResponse response) throws Exception
  • 业务请求会调用用户实现的这个类
  • request: WebServer 请求对象,对应的类org.voovan.http.server.HttpRequest
  • response: WebServer 响应对象,对应的类org.voovan.http.server.HttpResponse。下面我来举一个简单例子,定义一个路由,根据上面路由规划,我们模拟实现一个订单的路由[org.test.OrderRouter],并让他返回给浏览器订单的信息(JSON);
  1. package org.test;
  2. import org.voovan.http.server.HttpRequest;
  3. import org.voovan.http.server.HttpResponse;
  4. import org.voovan.http.server.HttpRouter;
  5. public class OrderRouter implements HttpRouter {
  6. @Override
  7. public void process(HttpRequest request, HttpResponse response) throws Exception {
  8. response.write("{OrderId:\"45234789\",OrderCode:\"KJD2016081900022\",CustId:\"45568991\"}");
  9. }
  10. }

通过上面例子我们会发现这个类实现了一个HttpRouter接口,并且实现了process方法.

通过操作requestresponse 对象来对请求进行处理.

接下来我们启动 Web 服务,访问 http://xxx.xxx.xxx.xxx/order 就可以看到浏览器里展示了:

  1. {
  2. "OrderId": "45234789",
  3. "OrderCode": "KJD2016081900022",
  4. "CustId": "45568991"
  5. }

3.关于路径参数的说明

什么是路径参数? 路径参数是一个记录的路由路径,如: /item/getPrice 用于获取价格,但是需要指定商品类型,通常我们都会采用:/item/getPrice?id=443,但是这种方式并不优雅,也不利于 SEO,所以有了路径参数的概念,将以上路由转换成/item/getPrice/443的形式,即有利于 SEO 优化,也有效的减少了 Http 请求报文的大小.

Voovan 是支持路径参数的,对于使用 Voovan 的开发的小伙伴来说我们所要做的很简单.

1.声明一个带有路径参数的路由模板

如: /item/getPrice/:itemid,这个路由中:itemid通过:引导,/结尾标识出一个带路径参数的路由.

2.使用路径参数中的参数

在使用中我们仅仅需要使用:request.getParameter("itemid")即可获得这个参数。