http请求响应问题

隐语者 2019-03-14 04:39:15
现在出现了一个情况,别人发送http请求,我程序接收到http请求之后执行相对应的业务代码,
最后传回响应信息,但是中间执行相对应的业务代码会占用较长时间,
能不能先发送响应,然后我程序再执行业务代码。

总结如下:使用的是SSM框架,传回响应必须要程序结束的时候吗?
可以在一开始就传回响应,并且对方也收到响应,但是我程序还能接着执行业务代码吗?

@RequestMapping(value = "create", method = RequestMethod.POST, consumes = "application/xml", produces = "application/xml;charset=UTF-8")
@ResponseBody
public void addList(HttpServletRequest request, HttpServletResponse response){
//《业务代码...》
//发回响应
response.getWriter().write("success");
}
...全文
239 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-03-14
  • 打赏
  • 举报
回复
问题是你的业务逻辑跟你的响应有联系吗?
如果没有联系,先返回响应再处理逻辑没问题
如果有联系,你还要想想怎么回调,把你的业务逻辑结果返回
stacksoverflow 2019-03-14
  • 打赏
  • 举报
回复
后台: 函数调用只要没有遇到抛出异常或RETURN语句,都是顺序执行到最后 也就是你可以这么写,但最好flush一下把数据刷到前台 //发回响应 response.getWriter().write("success"); response.getWriter().flush(); // 这时前台可以读到"success"数据。 //《业务代码...》 前台: 对于这种ajax写法 xhr.onreadystatechange=function() { if(xhr.readyState==4){ if(xhr.status==200){ var data = xhr.responseText; alert(data); } } } xhr.readyState的含义如下: 0:请求没有发出 1:请求已经建立但还没有发出 2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。 3:请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。 4:响应已完成,可以访问服务器响应并使用它。 也就是你可以在xhr.readyState为3并且xhr.status==200的时候,拿到服务器正在发送的数据。
Realv5 2019-03-14
  • 打赏
  • 举报
回复
你可以通过ajax来异步请求先跳页面再 获取数据
maradona1984 2019-03-14
  • 打赏
  • 举报
回复
可以,但具体怎么做你得想想
正规军那自然是上mq了
其次就搞个线程池
再次新开线程直接撸
931828653 2019-03-14
  • 打赏
  • 举报
回复
你可以 写个异步请求,吧执行的业务逻辑 ,写在线程中, 这样他会先返回结果,在执行业务 public class MyExecutor {     private ExecutorService executor = Executors.newCachedThreadPool() ;     public void fun() throws Exception {         executor.submit(new Runnable(){             @override                 public void run() {                     try {                         //要执行的业务代码,我们这里没有写方法,可以让线程休息几秒进行测试                         Thread.sleep(10000);                         System.out.print("睡够啦~");                     }catch(Exception e) {                         throw new RuntimeException("报错啦!!");                     }                 }         });     } } public class Demo{          public static void main(String[] args) {                   MyExecutor  myExecutor = new MyExecutor();          try {             myExecutor.fun();             System.our.print("你先睡着,我先回家啦~");         }catch(Exception e) {              throw new RuntimeException("业务程序报错啦!!");         }     } } 好啦 代码到此结束 (ps:纯手打 若有错 请见谅)  运行主方法  会先打印(你先睡着,我先回家啦~) 然后(睡够啦~) 也就是说 在需要异步执行的方法未执行完毕时 主程序已经返回结果了  不需要继续等待 这样可以保证程序先返回结果 再继续执行不需要等待的繁琐的任务  当然也可以加一些方法去判断异步方法是否执行完毕。
akxj2022 2019-03-14
  • 打赏
  • 举报
回复
可以在主方法里加个返回void的业务方法,业务代码写在业务方法里,因为业务方法没有返回值,所以程序不会等待,会直接执行后面的

@RequestMapping(value = "create", method = RequestMethod.POST, consumes = "application/xml", produces = "application/xml;charset=UTF-8")
@ResponseBody
public void addList(HttpServletRequest request, HttpServletResponse response){
           //业务代码放方法里
          excuteYW();
          //发回响应
          response.getWriter().write("success");
}
// 方法返回void
private void excuteYW(){
         //《业务代码...》
}
Lee_SmallNorth 2019-03-14
  • 打赏
  • 举报
回复
什么样的需求,要做异步响应???

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧