五、Web-路由
现在,我们要真正的开发一个 Web 服务了.首先我们从一个路由的开发作为起点,路由的开发设计上的目的是通过在配置文件中配置好路由,来告诉服务器哪些路由用哪个后台的 Java 类来处理,这样对于路由的管理更加清晰,很容易从 URL 地址就直接对应到后台的处理类.使代码编的简单且易维护.
通过路由配置来实现 Web 服务的步骤:
- 1.做好路由规划.
- 2.编写路由.
- 3.在 web.json 中注册路由.
- 4.启动路由(
java -jar ./bin/voovan-framework.jar
).
1.找到路由的注册入口
路由的入口在 conf/web.json
文件中.下面我们截取一段路由配置:
.......
"Routers": [
{
"name": "配置路由测试", //路由名称
"Route": "/configRouter", //Http请求路径
"Method": "GET", //Http请求方法
"ClassName": "org.voovan.test.http.router.HttpTestRouter" //Http 路由处理器
}
]
.......
2.做好路由规划,并配置路由
首先我们需要先对路由进行一个规划,例如:
- 订单访问的路由:
/order/…..
- 客户信息访问的路由:
/cust/…..
- 商品访问的路由:
/item/…..
那么我们就可以根据以上的路由规划,做相应的路由配置:
.......
"Routers": [
{
"name": "订单访问路由", //路由名称
"Route": "/order/*", //Http请求路径
"Method": "GET", //Http请求方法
"ClassName": "org.test.OrderRouter" //Http 路由处理器
},{
"name": "客户信息访问路由", //路由名称
"Route": "/cust/*", //Http请求路径
"Method": "GET", //Http请求方法
"ClassName": "org.test.CustRouter" //Http 路由处理器
},{
"name": "商品访问的路由", //路由名称
"Route": "/item/*", //Http请求路径
"Method": "GET", //Http请求方法
"ClassName": "org.test.ItemRouter" //Http 路由处理器
}
]
.......
其中路由中的是通配符, 用来匹配任意个数的任意字符,但会终止于/,如:/item/则可以匹配/item/3342 和 /item/user3438458
3.编写一个路由
编写一个路由的第一步就是需要继承org.voovan.http.server.HttpRouter
接口.下面我们来看看这个路由接口的定义:
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);
package org.test;
import org.voovan.http.server.HttpRequest;
import org.voovan.http.server.HttpResponse;
import org.voovan.http.server.HttpRouter;
public class OrderRouter implements HttpRouter {
@Override
public void process(HttpRequest request, HttpResponse response) throws Exception {
response.write("{OrderId:\"45234789\",OrderCode:\"KJD2016081900022\",CustId:\"45568991\"}");
}
}
通过上面例子我们会发现这个类实现了一个HttpRouter
接口,并且实现了process
方法.
通过操作request
和 response
对象来对请求进行处理.
接下来我们启动 Web 服务,访问 http://xxx.xxx.xxx.xxx/order
就可以看到浏览器里展示了:
{
"OrderId": "45234789",
"OrderCode": "KJD2016081900022",
"CustId": "45568991"
}
3.关于路径参数的说明
什么是路径参数? 路径参数是一个记录的路由路径,如: /item/getPrice 用于获取价格,但是需要指定商品类型,通常我们都会采用:/item/getPrice?id=443
,但是这种方式并不优雅,也不利于 SEO,所以有了路径参数的概念,将以上路由转换成/item/getPrice/443
的形式,即有利于 SEO 优化,也有效的减少了 Http 请求报文的大小.
Voovan 是支持路径参数的,对于使用 Voovan 的开发的小伙伴来说我们所要做的很简单.
1.声明一个带有路径参数的路由模板
如: /item/getPrice/:itemid
,这个路由中:itemid
通过:
引导,/
结尾标识出一个带路径参数的路由.
2.使用路径参数中的参数
在使用中我们仅仅需要使用:request.getParameter("itemid")
即可获得这个参数。