前言
本次 Cicada 已经更新到了
v1.0.3。
主要是解决了两个 issue,#9(Boss线程数好像设置有误 )#8(怎么返回纯字符串内容不要JSON格式?)。
所以本次的主要更新为:
- Cicada 采用合理的线程分配来处理接入请求线程以及 IO 线程。
- 支持多种响应方式(以前只有 json,现在支持 text)。
- 为了满足上者引入了
context。 - 优雅停机。
其中我觉得最核心也最有用的就是这个 Context,并为此重构了大部分代码。
多种响应方式
在起初 Cicada 默认只能响应 json,这一点确实不够灵活。加上后续也打算支持模板解析,所以不如直接在 API 中加入可让用户自行选择不同的响应方式。
因此调整后的 API 如下。
想要输出
text/plain时。
@CicadaAction("textAction") public class TextAction implements WorkAction { @Override public void execute(CicadaContext context, Param param) throws Exception { String url = context.request().getUrl(); String method = context.request().getMethod(); context.text("hello world url=" + url + " method=" + method); } }而响应输出
application/json时只需要把需要响应的对象写入到json()方法中.

因此原有的业务 action 中也加入了一个上下文的参数:
/** * abstract execute method * @param context current context * @param param request params * @throws Exception throw exception */ void execute(CicadaContext context ,Param param) throws Exception;下面就来看看这个 Context 是如何完成的。
Cicada Context
先看看有了这个上下文之后可以做什么。
比如有些场景下我们需要拿到本次请求中的头信息,这时就可以通过这个 Context 对象直接获取。
当然不止是头信息:
- 获取请求头。
- 设置响应头。
- 设置
cookie。 - 获取请求
URL。 - 获取请求的
method(get/post)等。
其实通过这些特点可以看出这些信息其实都和一次 请求、响应 密切相关,并且各个请求之间的信息应互不影响。
这样的特性是不是非常熟悉,没错那就是 ThreadLocal,它可以将每个线程的信息存储起来互不影响。
ThreadLocal 的原理本次不做过多分析,只谈它在 Cicada 中的应用。
CicadaContext.class
先来看看
