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即可。结果发现不行。

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

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

<dependency>
     <groupId>org.apache.geronimo.specs</groupId>
     <artifactId>geronimo-servlet_3.0_spec</artifactId>
     <version>1.0</version>
    </dependency>

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

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 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的配置应该是:

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

<servlet>
  <servlet-name>receiveServlet</servlet-name>
  <servlet-class>com.tvunetworks.center.tpds.web.servlet.online.ReceiveServlet</servlet-class>
  <async-supported>true</async-supported>
 </servlet>


3. 在ReceiverServlet的doGet方法中:

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


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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值