odata初探01

servlet

servlet 结构如下图
servlet 如何处理多个请求

在olingo中,我们需要添加在xml文件中添加如下代码

<servlet>
    <servlet-name>ODataServiceServlet</servlet-name>
    <servlet-class>org.apache.olingo.odata2.core.servlet.ODataServlet</servlet-class>
    <init-param>
      <param-name>org.apache.olingo.odata2.service.factory</param-name>
      <param-value>myFactory</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ODataServiceServlet</servlet-name>
    <url-pattern>/ODataSrv/*</url-pattern>
  </servlet-mapping>

这里myFactory是继承了ODataServiceFactory的一个子类,需要我们来实现,里面包含了我们想要对外提供的一些数据返回的方法,servlet-mapping则映射到我们url中的位置。

在servlet中,先获得一个factory的实例

ODataServiceFactory serviceFactory = getServiceFactory(req);

然后对于每一个request请求,每次都从factory中拿到一个新的service

 ODataService service = serviceFactory.createService(context);

最后通过handler处理并返回response

ODataRequestHandler requestHandler = new ODataRequestHandler(serviceFactory, service, context);
final ODataResponse odataResponse = requestHandler.handle(odataRequest);

至于handler怎么处理,实际上还是调用了serviceFactory里面的函数,这一部分就是我们需要实现的啦。

handle方法里面调用了dispatch

odataResponse =
          dispatcher.dispatch(method, uriInfo, request.getBody(), request.getContentType(), acceptContentType.toContentTypeString());
 public ODataResponse dispatch(final ODataHttpMethod method, final UriInfoImpl uriInfo, final InputStream content,
      final String requestContentType, final String contentType) throws ODataException {
    switch (uriInfo.getUriType()){
    case URI0:
      if (method == ODataHttpMethod.GET) {
        return service.getServiceDocumentProcessor().readServiceDocument(uriInfo, contentType);
      } else {
         ...
      }
      ...

相当于分配一个URL到哪一个部分去实现,根据CRUD的种类等等,并返回一个response

最后讲讲serviceFactory 生成了什么东西,其实最后只返回两个东西给service:

return createODataSingleProcessorService(edmProvider, singleProcessor);
  1. edmProvider:用于提供metadata
  2. singleProcessor:用于处理CRUD操作

这两个是我们要去是实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值