spring3 x 整合 servlet3 0 之非同步調
阿新 • • 發佈:2018-11-15
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
首先需要定義一個攔截非同步請求的Filter,
該Filter需要設定asyncSupported=true以啟動對servlet非同步的支援
[java]- package org.async.filter;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.annotation.WebFilter;
- import javax.servlet.http.HttpServletRequest;
- /**
- * 非同步攔截器
- * 攔截所有async的請求
- * @author
- */
- @WebFilter(urlPatterns="/async/test",asyncSupported=true)
- public class AsyncFilter implements Filter {
- @Override
- public void init(FilterConfig cfg) throws ServletException {
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- String url = ((HttpServletRequest)request).getRequestURL().toString();
- System.out.println("非同步請求[ " + url +" ]被攔截");
- System.out.println(request.isAsyncSupported());
- chain.doFilter(request, response);
- }
- @Override
- public void destroy() {
- }
- }
然後定義一個 servlet
[java] view plain copy print ?
- package org.async.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.io.Writer;
- import java.util.Date;
- import javax.servlet.AsyncContext;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * 要啟用 asyncSupported 需要定義一個【攔截該請求】的WebFilter,
- * 否則將會在[request.startAsync(request,response);]時
- * 拋java.lang.IllegalStateException: Not supported.的異常;
- * 另外:
- * 如何web.xml或者程式中其他地方定義了Filter,且沒有指定asyncSupported=true
- * 同樣會跑出如上異常;
- * @author wangtao
- */
- @WebServlet(urlPatterns="/async/test",asyncSupported=true)
- public class ModuleAsyncServlet extends HttpServlet {
- //.....
- }
另外 web.xml 中若定義Filter需要開啟asyncSupported=true,
否則, 將會丟擲java.lang.IllegalStateException: Not supported.的異常;
[xhtml] view plain copy print ?
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- id="WebApp_ID" version="3.0">
- <servlet>
- <servlet-name>spring-mvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>spring-mvc</servlet-name>
- <url-pattern>*.form</url-pattern>
- </servlet-mapping>
- <!-- 過濾器處理中文編碼 -->
- <!--
- <filter>
- <filter-name>SetCharacterEncoding</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>utf8</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>SetCharacterEncoding</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- -->
- <welcome-file-list>
- <welcome-file>index.form</welcome-file>
- </welcome-file-list>
- </web-app>