「造个轮子」——设计 HTTP 请求全局上下文

  • 时间:
  • 浏览:2
  • 来源:uu快3官网app_uu快3豹子赚钱

这里改的较大的可是 一3个红框处,第一要素是做上下文初始化及赋值。

public class TextAction implements WorkAction {

@CicadaAction("textAction")

而你这些 函数本质使用的则是 ThreadLocal 来存放 CicadaContext

Cicada 采用合理的应用程序分配来外理接入请求应用程序以及 IO 应用程序。

成员变量是一3个接口 CicadaRequestCicadaResponse,名称就能看出肯定是存放请求和响应数据的。

先看初始化。

CicadaRequestcicadaRequest=CicadaHttpRequest.init(defaultHttpRequest);

将会后续新增了自身的应用程序等资源,那可不还还可以没法 删改装下 这里来进行释放。

接着将当前请求的上下文保存到了 CicadaContext 中。

*/

而响应输出 application/json 时只还要把还要响应的对象写入到 json() 辦法 中.

void execute(CicadaContext context ,Param param) throws Exception;

获取请求的 method(get/post)等。

可是 本次的主要更新为:

       ThreadLocalHolder.setCicadaContext(context) ;

   }

    * @param context current context

* @throws Exception throw exception

可是 调整后的 API 如下。

* @param param request params

先看看有了你这些 上下文之能没法 没法 做哪些。

设置 cookie

获取请求头。

我应该 存放本次请求的上下文自然是在真正请求下发的地方 HttpDispatcher

觉得通过哪些特点能没法 看出哪些信息觉得都和一次 请求、响应 密切相关,可是 各个请求之间的信息应互不影响。

可是 CicadaContext.removeContext() 可是 为了及时删除当前上下文。

responseContent(ctx,CicadaContext.getResponse().getHttpContent());

context.text() 来说:

   @Override

   }

从前的社会形态是总要 非常熟悉,没错那可是 ThreadLocal,它能没法 将每个应用程序的信息存储起来互不影响。

第二要素自然可是 卸载上下文。

最后还新增了一3个停机的辦法 。

接着可是 外理业务,调用不同的 API 做不同响应。

将会这里不做外理,后后随着请求的增多, ThreadLocal 里存放的数据也太久,最终肯定会原因内存溢出。

       context.text("hello world url=" + url + " method=" + method);

Response 也是同理的。

设置响应头。

       CICADA_CONTEXT.set(context) ;

这里只保存了请求的 URL、method 等信息,后续要加的请求头也存装下 此处即可。

CicadaContext.setContext(new CicadaContext(cicadaRequest,cicadaResponse));

你这些 个具体的实现类都私有化了构造函数,外理内部人员破坏了整体性。

   public void execute(CicadaContext context, Param param) throws Exception {

本次 Cicada 将会更新到了  v1.0.3

首先是将 request 初始化:

在起初 Cicada 默认没法 响应 json,你这些 点觉得缺陷灵活。换成后续也打算支持模板解析,可是 不如直接在 API 中加入可让用户自行选用不同的响应辦法 。

觉得也可是 利用 Hook 函数实现的。

    */

   public static void setCicadaContext(CicadaContext context){

可是 原有的业务 action 中也加入了一3个上下文的参数:

支持多种响应辦法 (后后没法 json,现在支持 text)。

觉得可是 设置了对应的响应辦法 、以及把响应内容写入了 CicadaResponsehttpContent中。

后续会重点实现模板解析和注解请求路由完成,把 MVC 中的 view 完成就差太久了。

业务外理后后调用 responseContent() 进行响应:

   /**

   private static final ThreadLocal<CicadaContext> CICADA_CONTEXT= new ThreadLocal() ;

* @param context current context

    * set cicada context

将会目前 Cicada 开的应用程序,占用的资源都总要 不得劲多,可是 可是 关闭了 Netty 所使用的应用程序。

觉得可是 在上下文中拿到的响应辦法 及响应内容返回给客户端。

ThreadLocal 的原理本次不做太久分析,只谈它在 Cicada 中的应用。

       String method = context.request().getMethod();

* abstract execute method

最后不得劲非常重要,那可是 卸载上下文

   public static void setContext(CicadaContext context){

先来看看 CicadaContext 你这些 类的主要成员变量以及辦法 。

获取请求 URL

其中觉得最核心也最有用的可是 你这些 Context,并为此重构了大要素代码。

       String url = context.request().getUrl();

/**

   }

我应该 输出 text/plain 时。

主可是 外理了一3个 issue,#9(Boss应用程序数好像设置有误 ) #8(为什么我么我会么会返回纯字符串内容时会说JSON格式?)。

Cicada 将会更新了 4 个版本,雏形总要 了。

比如或多或少场景下亲们 还要拿到本次请求中的头信息,这时就能没法 通过你这些 Context 对象直接获取。

为了满足上者引入了 context

当然不止是头信息:

CicadaHttpRequest 自然是实现了 CicadaRequest 接口:

优雅停机。

下面就来看看你这些 Context 是怎么完成的。

}