zoukankan      html  css  js  c++  java
  • springmvc 配置异步请求

    最开始按照网上配置了一个servlet class 没有继承Filter .结果报错.网上有文章说是tomcat 启动加载的servlet-3.0- api 加载了 tomcat 安装目录下lib里边的自带的 servlet api 与 环境中api冲突 改成

    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>  

    问题是配置文件里配置就是这样的

    严重: Exception starting filter AsyncFilter
    java.lang.ClassCastException: com.AsynDemo.AsynServ cannot be cast to javax.servlet.Filter
    这个错误其实是没有继承Filter,重写一个过滤导致的

    环境:

    pom.xml

    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>

    web.xml 配置

    这个是把你重写的过滤类写入
    <filter> <filter-name>pageResponse</filter-name> <filter-class>com.AsynDemo.AsynServlet</filter-class> <async-supported>true</async-supported> </filter> <filter-mapping> <filter-name>pageResponse</filter-name> <!-- 需要注意的是url-parttern 下面的这个路径项目名称是不需要写的直接以 "/" 代替 --> <url-pattern>/*</url-pattern> </filter-mapping>

    <servlet>
    <servlet-name>applicationContext</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-common.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>  //
    </servlet>

    
    

    @Controller
    @RequestMapping("/asyncServlet")
    public class AsynServlet implements Filter
    {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    // TODO Auto-generated method stub

    }


    @RequestMapping(value="/testAsyn")
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    //request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
    System.out.println("start");
    PrintWriter out = response.getWriter();
    AsyncContext asyncContext = request.startAsync();
    asyncContext.setTimeout(5000);
    asyncContext.addListener(new MyAsyncListener());
    new Thread(new Work(asyncContext,request)).start();
    out.print("异步执行中");

    }
    @Override
    public void destroy() {
    // TODO Auto-generated method stub

    }

    }

     

    就这么样了 还会报错

    A filter or servlet of the current chain does not support asynchronous opera
    
    request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);

    查了查资料,

    所有的解决办法都在说可能是参数配置未配置正确,或者是需要在server.xml上配置。最后,在StackOverflow上找到了如下答案
    
    request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);

    尝试这个改了改,问题解决

    总结一下,这种配置文件的方式 .坑不少,但最终解决了. 

    还有一种写法有空再测试

    https://blog.csdn.net/zxaini2010/article/details/50358763

  • 相关阅读:
    [BZOJ1620][Usaco2008 Nov]Time Management 时间管理
    [BZOJ1634][Usaco2007 Jan]Protecting the Flowers 护花
    [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排
    [BZOJ1708][Usaco2007 Oct]Money奶牛的硬币
    [BZOJ1690][Usaco2007 Dec]奶牛的旅行
    fzu 2132 LQX的作业
    fzu 2139 久违的月赛之二
    poj 1849 Two 树形dp
    师范大学 e: skyscrapers
    O(∩_∩)O~~
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/9611088.html
Copyright © 2011-2022 走看看