В Spring MVC3.2 и выше добавляется асинхронная обработка запросов, которая инкапсулируется на основе сервлета3.
1. Изменить web.xml
<? xml version = "1.0" Encoding = "utf-8"?> <web-app arser = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema electsmance "/www.w3. 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. Declare version = "3.0", объявить Web-app_3_0.xsd
1.2. Включить асинхронную поддержку для настройки сервлета или фильтра: <async-поддерживаемое> true </async-поддерживаемое> для изменения web.xml веб-приложения
<!- Spring MVC -> <Servlet> <servlet-name> springmvc </servlet-name> <vervlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <init-param> <-mance-name> продолжение extconfiglocation </param-name> <param-value> ... </param-value> </init-param> <Load-on-startup> 1 </load-on-startup> <async-поддерживаемая> true </async-support> </servlet>
2. Сделайте поддержку класса контроллера асинхронностью
2.1. Return java.util.concurrent.callable для завершения асинхронной обработки
пакет org.springframework.samples.mvc.async; импортировать java.util.concurrent.callable; Import org.springframework.sterotype.controller; Импорт org.springframework.ui.model; Импорт org.springframework.web.bind.annotation.exceptionHandler; Импорт org.springframework.web.bind.annotation.requestmapping; Импорт org.springframework.web.bind.annotation.requestparam; Import org.springframework.web.bind.annotation.responsebody; импорт org.springframework.web.context.request.async.webasynctask; @Controller @requestmapping ("/async/callable") открытый класс callablecontroller {@requestmapping ("/response-body") public @responsebody callable <string> callable () {return new Callable <string> () {@Override public String Call () throws exception {thread.sleep (2000); вернуть "Callible Result"; }}}; } @RequestMapping ("/view") public callable <string> callableWithView (окончательная модель модели) {return new Callable <string> () {@Override public String call () Throws exception {thread.sleep (2000); model.addattribute ("foo", "bar"); model.addattribute ("Fruit", "Apple"); вернуть "представления/html"; }}; } @RequestMapping ("/exception") public @Responsebody callable <string> callablewithexception (final @RequestParam (обязательный = false, defaultValue = "true") boolean обрабатывается) {return new Collable <string> () {@Override public String Call () Throhs Exception {Think.sleep (2000); if (обработанное) {// См. Метод handlexception Далее ниже бросает new allodalstateexception («Callable ошибка»); } else {бросить new allogalargumentException ("Callible Erry"); }}}}}; } @RequestMapping ("/custom Timeout-Handling") public @Responsebody webasynctask <string> callableWithCustomTimeOuthAntling () {callable <string> callable = new Callable <string> () {@Override public String call () исключает исключение {think.sleep (2000); вернуть "Callible Result"; }}; вернуть новый webasynctask <string> (1000, Callible); } @ExceptionHandler @Responsebody public String handlexception (allodalStateException ex) {return "Обработанное исключение:" + ex.getMessage (); }}2.2. Вернуть org.springframework.web.context.request.async.deferredresult, когда асинхронная обработка завершена, например, JMS или сообщение AMQP, уведомление Redis и т. Д.:
@Requestmapping ("/Quotes")@responsebodypublic deferredresult <string> quotes () {deferredresult <string> deferredResult = new DeferredResult <string> (); // Добавить DeferredResult в очередь или карту ... return deferredResult;} // в каком -то другом потоке ... deferredResult.setResult (data); // Удалить DeferredResult из очереди или карты3. Модификация файла конфигурации пружины
Объявление DTD Spring MVC должно быть больше или равно 3,2
<MVC: направление аннотаций> <!-Вы можете использовать время-аут по умолчанию-> <MVC: Async-support Timeout = "3000"/> </mvc: направление аннотации>
Фактические примеры:
Функция deferred () {$ .get ('quotes.htm', function (data) {console.log (data); deferred (); // Каждый раз, когда запрос заполняется, отправляйте другой запрос, чтобы регулярно избегать клиента, чтобы регулярно получать данные});};};};};};};};}; Преимущество этого позволяет избежать долгосрочного использования пула соединений веб-сервера, что вызывает проблемы с производительностью. После вызова для его обработки генерируется поток сервисного обслуживания без WEB, увеличивая пропускную способность веб-сервера ~~
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.