Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

chcong143231/cicada

Repository files navigation


δΈ­ζ–‡ζ–‡ζ‘£


Introduction

Fast, lightweight Web framework based on Netty; without too much dependency, and the core jar package is only 30KB.

If you are interested, please click Star.

Features

  • Clean code, without too much dependency.
  • One line of code to start the HTTP service.
  • Custom interceptor.
  • Flexible parameters way.
  • Response json.
  • Start with jar.
  • Custom configuration.
  • Multiple routing ways.
  • Support HTTPS.
  • Support Cookie.
  • File Upload.

Quick Start

Create a project with Maven, import core dependency.

<dependency>
 <groupId>top.crossoverjie.opensource</groupId>
 <artifactId>cicada-core</artifactId>
 <version>1.0.1</version>
</dependency>

start class:

public class MainStart {
 public static void main(String[] args) throws InterruptedException {
 CicadaServer.start(MainStart.class,"/cicada-example") ;
 }
}

Configuring business Action

Create business Action implement top.crossoverjie.cicada.server.action.WorkAction interface:

@CicadaAction(value = "demoAction")
public class DemoAction implements WorkAction {
 private static final Logger LOGGER = LoggerBuilder.getLogger(DemoAction.class) ;
 private static AtomicLong index = new AtomicLong() ;
 @Override
 public WorkRes<DemoResVO> execute(Param paramMap) throws Exception {
 String name = paramMap.getString("name");
 Integer id = paramMap.getInteger("id");
 LOGGER.info("name=[{}],id=[{}]" , name,id);
 DemoResVO demoResVO = new DemoResVO() ;
 demoResVO.setIndex(index.incrementAndGet());
 WorkRes<DemoResVO> res = new WorkRes();
 res.setCode(StatusEnum.SUCCESS.getCode());
 res.setMessage(StatusEnum.SUCCESS.getMessage());
 res.setDataBody(demoResVO) ;
 return res;
 }
}

Launch and apply access: http://127.0.0.1:7317/cicada-example/demoAction?name=12345&id=10

{
 "code": "9000",
 "dataBody": {
 "index": 1
 },
 "message": "成功"
}

Custom interceptor

Implement top.crossoverjie.cicada.example.intercept.CicadaInterceptor interface.

@Interceptor(value = "executeTimeInterceptor")
public class ExecuteTimeInterceptor implements CicadaInterceptor {
 private static final Logger LOGGER = LoggerBuilder.getLogger(ExecuteTimeInterceptor.class);
 private Long start;
 private Long end;
 @Override
 public void before(Param param) {
 start = System.currentTimeMillis();
 }
 @Override
 public void after(Param param) {
 end = System.currentTimeMillis();
 LOGGER.info("cast [{}] times", end - start);
 }
}

Interceptor Adapter

If you only want to implement one of the methods ,only extends top.crossoverjie.cicada.server.intercept.AbstractCicadaInterceptorAdapter abstract class.

@Interceptor(value = "loggerInterceptor")
public class LoggerInterceptorAbstract extends AbstractCicadaInterceptorAdapter {
 private static final Logger LOGGER = LoggerBuilder.getLogger(LoggerInterceptorAbstract.class) ;
 @Override
 public void before(Param param) {
 LOGGER.info("logger param=[{}]",param.toString());
 }
}

Performance Test

Test Conditions: 300 concurrency for twice ;1G RAM/one CPU/1Mbps.

Contact author

crossoverJie#gmail.com

About

πŸš€ Fast lightweight HTTP service framework.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 99.1%
  • Shell 0.9%

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /