最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解spring mvc對(duì)異步請(qǐng)求的處理

 更新時(shí)間:2017年01月03日 10:41:27   作者:自行車上的程序員  
spring mvc3.2及以上版本增加了對(duì)請(qǐng)求的異步處理,是在servlet3的基礎(chǔ)上進(jìn)行封裝的,有興趣的可以了解一下。

在spring mvc3.2及以上版本增加了對(duì)請(qǐng)求的異步處理,是在servlet3的基礎(chǔ)上進(jìn)行封裝的。

1、修改web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
...
</web-app>

1.1、聲明version="3.0",聲明web-app_3_0.xsd

1.2、為servlet或者filter設(shè)置啟用異步支持: <async-supported>true</async-supported> ,修改WEB應(yīng)用的web.xml

<!-- spring mvc -->
<servlet>
<servlet-name>SpringMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>...</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>

2、使controller類支持async

2.1、返回java.util.concurrent.Callable來(lái)完成異步處理

package org.springframework.samples.mvc.async;
 
import java.util.concurrent.Callable;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.async.WebAsyncTask;
 
@Controller
@RequestMapping("/async/callable")
public class CallableController {
  @RequestMapping("/response-body")
  public @ResponseBody Callable<String> callable() {
 
    return new Callable<String>() {
      @Override
      public String call() throws Exception {
        Thread.sleep(2000);
        return "Callable result";
      }
    };
  }
 
  @RequestMapping("/view")
  public Callable<String> callableWithView(final Model model) {
 
    return new Callable<String>() {
      @Override
      public String call() throws Exception {
        Thread.sleep(2000);
        model.addAttribute("foo", "bar");
        model.addAttribute("fruit", "apple");
        return "views/html";
      }
    };
  }
 
  @RequestMapping("/exception")
  public @ResponseBody Callable<String> callableWithException(
      final @RequestParam(required=false, defaultValue="true") boolean handled) {
 
    return new Callable<String>() {
      @Override
      public String call() throws Exception {
        Thread.sleep(2000);
        if (handled) {
          // see handleException method further below
          throw new IllegalStateException("Callable error");
        }
        else {
          throw new IllegalArgumentException("Callable error");
        }
      }
    };
  }
 
  @RequestMapping("/custom-timeout-handling")
  public @ResponseBody WebAsyncTask<String> callableWithCustomTimeoutHandling() {
 
    Callable<String> callable = new Callable<String>() {
      @Override
      public String call() throws Exception {
        Thread.sleep(2000);
        return "Callable result";
      }
    };
 
    return new WebAsyncTask<String>(1000, callable);
  }
 
  @ExceptionHandler
  @ResponseBody
  public String handleException(IllegalStateException ex) {
    return "Handled exception: " + ex.getMessage();
  }
 
}

2.2、在異步處理完成時(shí)返回org.springframework.web.context.request.async.DeferredResult其他線程,例如一個(gè)JMS或一個(gè)AMQP消息,Redis通知等等:

@RequestMapping("/quotes")
@ResponseBody
public DeferredResult<String> quotes() {
 DeferredResult<String> deferredResult = new DeferredResult<String>();
 // Add deferredResult to a Queue or a Map...
 return deferredResult;
}
  
// In some other thread...
deferredResult.setResult(data);
// Remove deferredResult from the Queue or Map

3、spring配置文件的修改

spring mvc的dtd的聲明必須大于等于3.2

<mvc:annotation-driven>
<!-- 可不設(shè)置,使用默認(rèn)的超時(shí)時(shí)間 -->
  <mvc:async-support default-timeout="3000"/>
</mvc:annotation-driven>

 實(shí)際使用示例:

function deferred(){
  $.get('quotes.htm',function(data){
    console.log(data);
    deferred();//每次請(qǐng)求完成,再發(fā)一次請(qǐng)求,避免客戶端定時(shí)刷新來(lái)獲取數(shù)據(jù)
  });
}

這么做的好處避免web server的連接池被長(zhǎng)期占用而引起性能問(wèn)題,調(diào)用后生成一個(gè)非web的服務(wù)線程來(lái)處理,增加web服務(wù)器的吞吐量~~

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java類動(dòng)態(tài)加載和熱替換

    詳解Java類動(dòng)態(tài)加載和熱替換

    本文主要介紹類加載器、自定義類加載器及類的加載和卸載等內(nèi)容,并舉例介紹了Java類的熱替換。
    2021-05-05
  • Eclipse中引入com.sun.image.codec.jpeg包報(bào)錯(cuò)的完美解決辦法

    Eclipse中引入com.sun.image.codec.jpeg包報(bào)錯(cuò)的完美解決辦法

    Java開(kāi)發(fā)中對(duì)圖片的操作需要引入 com.sun.image.codec.jpeg,但有時(shí)引入這個(gè)包會(huì)報(bào)錯(cuò),利用下面的操作可以完成解決這個(gè)問(wèn)題
    2018-02-02
  • Java實(shí)現(xiàn)Kruskal算法的示例代碼

    Java實(shí)現(xiàn)Kruskal算法的示例代碼

    Kruskal算法是一種用來(lái)尋找最小生成樹(shù)的算法,由Joseph Kruskal在1956年發(fā)表。用來(lái)解決同樣問(wèn)題的還有Prim算法和Boruvka算法等。本文將介紹用Java語(yǔ)言實(shí)現(xiàn)Kruskal算法的示例代碼,需要的可以參考一下
    2022-07-07
  • 如何使用Java將word解析出來(lái)(包含格式和圖片)

    如何使用Java將word解析出來(lái)(包含格式和圖片)

    今天遇到一個(gè)讀取word模板內(nèi)容的需求,下面這篇文章主要給大家介紹了關(guān)于如何使用Java將word解析出來(lái),包含格式和圖片,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Java垃圾回收機(jī)制算法詳解

    Java垃圾回收機(jī)制算法詳解

    這篇文章主要介紹了Java垃圾回收機(jī)制算法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • feign name指定服務(wù)調(diào)用無(wú)效問(wèn)題及解決

    feign name指定服務(wù)調(diào)用無(wú)效問(wèn)題及解決

    文章主要介紹了FeignClient注解的常用屬性,并通過(guò)一個(gè)具體的例子說(shuō)明了為什么某個(gè)Feign調(diào)用需要使用url指定路徑才能訪問(wèn),最后,文章給出了解決辦法,即使用path屬性指定前綴
    2024-11-11
  • java中斷線程的正確姿勢(shì)完整示例

    java中斷線程的正確姿勢(shì)完整示例

    這篇文章主要為大家介紹了java中斷線程的正確姿勢(shì)完整示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java的Spring框架的三種連接池的基本用法示例

    Java的Spring框架的三種連接池的基本用法示例

    這篇文章主要介紹了Java的Spring框架的三種連接池的基本用法示例,Spring框架是Java下注明的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • Mybatis的Dao層實(shí)現(xiàn)原理分析

    Mybatis的Dao層實(shí)現(xiàn)原理分析

    這篇文章主要介紹了Mybatis的Dao層實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn)

    ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn)

    這篇文章主要介紹了ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

皋兰县| 安西县| 宝坻区| 易门县| 广昌县| 页游| 潢川县| 雅安市| 喜德县| 河池市| 宣武区| 南开区| 宣武区| 台江县| 前郭尔| 独山县| 普宁市| 宁国市| 陵川县| 商南县| 北海市| 莲花县| 新干县| 霍州市| 青川县| 靖宇县| 葵青区| 临安市| 永昌县| 南和县| 察哈| 开原市| 麻城市| 武城县| 醴陵市| 东台市| 巴塘县| 泌阳县| 普陀区| 探索| 犍为县|