JAVA异步Web服务实现

本文介绍了如何使用Spring框架的CompletableFuture在处理HttpServletRequest时实现异步任务提交,并展示了如何设置超时、监听器和响应处理。通过CompletableFuture处理HTTP请求,提高了并发性能并确保了及时响应。
摘要由CSDN通过智能技术生成
public void submitFuture(final HttpServletRequest req,final Callable<CompletableFuture> task) throwsException{
  final String uri = req.getRequestURI();
  final Map<String,String[]> params = req.getParameterMap();
  final AsyncContext asyncContext = req.startAsync();
  asyncContext.getRequest().setAttribute("uri",uri);
asyncContext.getRequest().setAttribute("params",params);
asyncContext.setTimeout(asyncTimeoutInSeconds*1000);

if(asyncListener != null){
  asyncContext.addListener(asyncListener);
}
CompletableFuture future = task.call();
future.thenAccept(result->{
  HttpServletResponse resp = (HttpServletResponse)asyncContext.getResponse();
 try{
   if(result instanceof String){
     byte[] butes = result.getBytes("GBK");
     resp.setContentType("text/html;charset=gbk");
     resp.setContentLength(bytes.length);
     resp.getOutputStream().write(bytes);
   }else{
     write(resp,JSONUtils.toJSON(result));
   }
 }catch(Throwable e){
 resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
 try{
   LOG.error("get infoerror,uri:{},params:{}",uri,JSONUtils.toJSON(params),e);
 }catch(Exception ex){}
 }
}).exceptionally(e->{
  asyncContext.complete();
  return null;
});

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值