Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 异步控制器springmvc中的请求流_Spring Mvc_Asynchronous - Fatal编程技术网

Spring mvc 异步控制器springmvc中的请求流

Spring mvc 异步控制器springmvc中的请求流,spring-mvc,asynchronous,Spring Mvc,Asynchronous,我试图从以下链接之一了解异步控制器的实现: 我对控制器线程收到请求并存在这一点感到困惑。然后服务方法接收到进一步处理的请求 @RequestMapping("/helloAsync") public Callable<String> sayHelloAsync() { logger.info("Entering controller"); Callable<String> asyncTask = new Callable<String>

我试图从以下链接之一了解异步控制器的实现:

我对控制器线程收到请求并存在这一点感到困惑。然后服务方法接收到进一步处理的请求

@RequestMapping("/helloAsync")
  public Callable<String> sayHelloAsync() {
    logger.info("Entering controller");

    Callable<String> asyncTask = new Callable<String>() {

      @Override
      public String call() throws Exception {
        return helloService.doSlowWork();
      }
    };

    logger.info("Leaving  controller");
    return asyncTask;
  }
@RequestMapping(“/helloAsync”)
公共可调用sayHelloAsync(){
logger.info(“进入控制器”);
Callable asyncTask=new Callable(){
@凌驾
公共字符串调用()引发异常{
返回helloService.doSlowWork();
}
};
logger.info(“离开控制器”);
返回异步任务;
}

因为,控制器存在它,并将控件传递给适当的处理程序mapping/jsp。用户将在浏览器上看到什么?

浏览器等待响应处理它

异步进程只在服务器端发生,与浏览器无关。浏览器发送请求并等待服务器写回响应

因为返回Callable并不意味着控制器存在于流中。Spring的响应处理程序将等待异步任务执行,以写回响应

请检查AsyncHandlerMethodReturnValueHandler,它处理从控制器返回的异步响应

如果返回callable,则它将由CallableHandlerMethodReturnvaluehandler处理:

public void handleReturnValue(Object returnValue, MethodParameter returnType,
        ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {

    if (returnValue == null) {
        mavContainer.setRequestHandled(true);
        return;
    }

    Callable<?> callable = (Callable<?>) returnValue;
    WebAsyncUtils.getAsyncManager(webRequest).startCallableProcessing(callable, mavContainer);
}
public void handleReturnValue(对象返回值、方法参数返回类型、,
ModelAndViewContainer mavContainer,NativeWebRequest(webRequest)引发异常{
if(returnValue==null){
mavContainer.setRequestHandled(true);
返回;
}
Callable Callable=(Callable)returnValue;
getAsyncManager(webRequest).startCallableProcessing(可调用,mavContainer);
}

浏览器等待响应来处理它

异步进程只在服务器端发生,与浏览器无关。浏览器发送请求并等待服务器写回响应

因为返回Callable并不意味着控制器存在于流中。Spring的响应处理程序将等待异步任务执行,以写回响应

请检查AsyncHandlerMethodReturnValueHandler,它处理从控制器返回的异步响应

如果返回callable,则它将由CallableHandlerMethodReturnvaluehandler处理:

public void handleReturnValue(Object returnValue, MethodParameter returnType,
        ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {

    if (returnValue == null) {
        mavContainer.setRequestHandled(true);
        return;
    }

    Callable<?> callable = (Callable<?>) returnValue;
    WebAsyncUtils.getAsyncManager(webRequest).startCallableProcessing(callable, mavContainer);
}
public void handleReturnValue(对象返回值、方法参数返回类型、,
ModelAndViewContainer mavContainer,NativeWebRequest(webRequest)引发异常{
if(returnValue==null){
mavContainer.setRequestHandled(true);
返回;
}
Callable Callable=(Callable)returnValue;
getAsyncManager(webRequest).startCallableProcessing(可调用,mavContainer);
}

我已清除了此链接中的疑问:

然而,他们使用不同的方法来完成异步处理,但是每个方法的核心概念应该是相同的

文章的一些重要部分:

异步处理模型背后的思想是分离 连接接受和请求处理操作。从技术上讲 这意味着分配两个不同的线程,一个线程接受 客户端连接和其他连接需要处理繁重且耗时的数据 操作。在这个模型中,容器分派了一个线程来接受 客户端连接(接受者),将请求移交给处理 (工作者)线程并释放接受者。结果将被发回 通过工作线程发送到客户端。在这个机制中,客户端的 连接保持打开状态。可能对性能影响不大,例如 处理模型对服务器的吞吐量和可伸缩性影响很大


我已清除了此链接中的疑问:

然而,他们使用不同的方法来完成异步处理,但是每个方法的核心概念应该是相同的

文章的一些重要部分:

异步处理模型背后的思想是分离 连接接受和请求处理操作。从技术上讲 这意味着分配两个不同的线程,一个线程接受 客户端连接和其他连接需要处理繁重且耗时的数据 操作。在这个模型中,容器分派了一个线程来接受 客户端连接(接受者),将请求移交给处理 (工作者)线程并释放接受者。结果将被发回 通过工作线程发送到客户端。在这个机制中,客户端的 连接保持打开状态。可能对性能影响不大,例如 处理模型对服务器的吞吐量和可伸缩性影响很大


你能提供一些链接来证明你的答案吗?我在谷歌上搜索了一下,但找不到相关的答案。谢谢你的回答。你能通过这个方法CallableMethodReturnValueHandler并尝试调试和更新答案吗?你能提供一些链接来证明你的答案吗?我在谷歌上搜索了一下,但找不到相关的答案。谢谢你的回答。你能通过这个方法CallableMethodReturnValueHandler并尝试调试并更新答案吗