Servlet 3.0+tomcat 7.0+jdk1.7 异步

在做项目的时候,碰到一个问题。项目运行一段时间就会出现lientAbortException:  java.io.IOException: Broken pipe错误。该项目是每个0.5或1s发一个http请求,每个http请求大概要4、5s的处理时间。刚开始以为是并发能力的问题,根据网上说的进行优化,但是不起作用,问题依旧。经初步查看,估计是每个http请求时间比较长,造成线程阻塞。后来在网上查到servlet3.0多了个异步处理的功能,好像能解决我们目前出现的问题。

但是在配置servlet3.0的时候,出现了一些问题,现一一说明:


首先servlet3.0的tomcat要7.0,jdk要1.7的版本。在各自的官网上下载

tomcat7.0: http://tomcat.apache.org/download-70.cgi

jdk1.7:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

1. 在maven上引入servlet3.0。之前以为只要在原来的基础上把version改为3.0即可。结果发现不行。


   javax.servlet
   servlet-api
   2.5
   provided
  

查maven repository得知,正确的应该如下:


     org.apache.geronimo.specs
     geronimo-servlet_3.0_spec
     1.0
    

2. web.xml的配置。之前的配置

 version="2.4"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

但是3.0的配置应该是:

 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">
 异步功能是默认关闭(false)的,如果要使用的话就配置为true。之前没有改还是用的2.4的,但2.4没有async-supported


  receiveServlet
  com.tvunetworks.center.tpds.web.servlet.online.ReceiveServlet
  true
 


3. 在ReceiverServlet的doGet方法中:

AsyncContext ctx=request.startAsync();
  process1(request,response);
  ctx.complete();


但是结果怎么样还没有测试。。。



你可能感兴趣的:(Servlet 3.0+tomcat 7.0+jdk1.7 异步)