【100分】请教关于Servlet3.0 + Tomcat7.0.x 异步调用的问题

-droidcoffee- 2011-01-27 12:30:49

@WebServlet(urlPatterns="/test",asyncSupported=true)
public class ModuleAsyncServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
response.setCharacterEncoding("UTF-8");
Writer out = response.getWriter();
// request.startAsync(); //报异常
AsyncContext ctx = request.getAsyncContext();//null
System.out.println(request.isAsyncSupported()); //false



异常信息如下

java.lang.IllegalStateException: Not supported.
at org.apache.catalina.connector.Request.startAsync(Request.java:1594)
at org.apache.catalina.connector.Request.startAsync(Request.java:1587)
at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:1024)
at org.async.servlet.ModuleAsyncServlet.doGet(ModuleAsyncServlet.java:35)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)



=======================


当我提交一个 test请求的时候 , 可以进入到 get 方法中
并执行,当执行到request.startAsync()的时候, 会报如上异常

环境 jdk.1.6.0_22 apache7.0.6 正式版


=======================================

这个问题解决一上午了, 郁闷 不知道咋办



完整代码如下


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;

@WebServlet(urlPatterns="/test",asyncSupported=true)
public class ModuleAsyncServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
response.setCharacterEncoding("UTF-8");
Writer out = response.getWriter();
request.startAsync();
AsyncContext ctx = request.getAsyncContext();
System.out.println(request.isAsyncSupported());
//AsyncContext ctx = request.startAsync();
new Thread(new Executor(ctx)).start();
out.write("结束Servlet的时间:" + new Date() + ".");
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
}

}

class Executor implements Runnable {
private AsyncContext ctx = null;

public Executor(AsyncContext ctx) {
this.ctx = ctx;
}

public void run() {
try {
// 等待十秒钟,以模拟业务方法的执行
Thread.sleep(10000);
PrintWriter out = ctx.getResponse().getWriter();
out.println("业务处理完毕的时间:" + new Date() + ".");
out.flush();
ctx.complete();
} catch (Exception e) {
e.printStackTrace();
}
}
}




...全文
925 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
泥瓦匠1024 2012-07-02
  • 打赏
  • 举报
回复
我遇到类似问题,求解答!!
[Quote=引用 12 楼 的回复:]

引用 11 楼 id19870510 的回复:
引用 6 楼 pl3121605999 的回复:
= = 。。经过我刚才测试了下``应该和代码无关。。是服务器的问题``tom7我没试。因为我用的tom6.。用jboss测试了你的代码可以通过``没问题


能不能帮我测试下 tomcat7 中 咋不行?
还有tomcat7 该如何配置?
谢谢了



问题解决了, 一言难尽。……
[/Quote]
yy6060 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 justanobody 的回复:]
使用servlet3.0的前提条件:
1.使用servlet3.0新标准jar包;
2.JDK必须在1.6以上版本;
3.编译器的编译级别为6.0
4.在web.xml文件中,使用3.0规范
5.使用支持servlet3.0特性的web容器,比如tomcat7

你满足以上条件之后,就没有问题了
[/Quote]这个对
我用了,可以的,
-droidcoffee- 2011-09-23
  • 打赏
  • 举报
回复
好多人问我是如何解决的
, 这个问题是我当时整合spring3.x的时候遇到的

http://blog.csdn.net/id19870510/article/details/6180113

昨晚我回家又做了一回 。 按照我帖子中的代码写了一个demo
一下子就成功了。 我也表示很纳闷
测试环境 myeclipse9.0 + java ee6.0 + tomcat7.x
新一° 2011-07-13
  • 打赏
  • 举报
回复
使用servlet3.0的前提条件:
1.使用servlet3.0新标准jar包;
2.JDK必须在1.6以上版本;
3.编译器的编译级别为6.0
4.在web.xml文件中,使用3.0规范
5.使用支持servlet3.0特性的web容器,比如tomcat7

你满足以上条件之后,就没有问题了
chengjf0526 2011-07-12
  • 打赏
  • 举报
回复
这个问题,是因为你没有在web.xml中配置指定的servlet对异步的支持,查看servlet3的dtd,你就明白了.
-droidcoffee- 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pl3121605999 的回复:]
= = 。。经过我刚才测试了下``应该和代码无关。。是服务器的问题``tom7我没试。因为我用的tom6.。用jboss测试了你的代码可以通过``没问题
[/Quote]

能不能帮我测试下 tomcat7 中 咋不行?
还有tomcat7 该如何配置?
谢谢了
lyon_z 2011-02-12
  • 打赏
  • 举报
回复
tomcat 7.0.6下测试通过
结束Servlet的时间:Sat Feb 12 16:54:33 CST 2011.
-droidcoffee- 2011-02-12
  • 打赏
  • 举报
回复
明天结贴, 谢谢各位了,睡觉ing

安!
-droidcoffee- 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 id19870510 的回复:]
引用 6 楼 pl3121605999 的回复:
= = 。。经过我刚才测试了下``应该和代码无关。。是服务器的问题``tom7我没试。因为我用的tom6.。用jboss测试了你的代码可以通过``没问题


能不能帮我测试下 tomcat7 中 咋不行?
还有tomcat7 该如何配置?
谢谢了
[/Quote]


问题解决了, 一言难尽。。。。。。。。。。。。

有谁没解决的, 跟我发信息给我吧。。。。。。。


另外推荐一网友博客

http://www.nieyong.net/2011/01/servlet-30tomcat706.html
pl3121605999 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 maydie1989 的回复:]

新jar包没放?
not support?
[/Quote]
= = 。。哥们。。有点常识好不。。没加jar包一般是ClassNotFoundException
卡比兽的球 2011-02-11
  • 打赏
  • 举报
回复
新jar包没放?
not support?
pl3121605999 2011-02-11
  • 打赏
  • 举报
回复
= = 。。经过我刚才测试了下``应该和代码无关。。是服务器的问题``tom7我没试。因为我用的tom6.。用jboss测试了你的代码可以通过``没问题
-droidcoffee- 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenlong150 的回复:]

帮忙顶一下,我最近也在搞这个,除了类似问题。楼主要是解决了,别忘也告知我一声……
[/Quote]

哥们 你的问题解决了没??
Chenlong150 2011-02-10
  • 打赏
  • 举报
回复
帮忙顶一下,我最近也在搞这个,除了类似问题。楼主要是解决了,别忘也告知我一声……
-droidcoffee- 2011-01-28
  • 打赏
  • 举报
回复
我想知道我那个程序问题出在哪了?

难道群里就没人玩 servlet3.0 了吗
  • 打赏
  • 举报
回复
java.lang.IllegalStateException: Not supported. 不被支持

给你例子看看
tomcat7和Servlet3之异步特性体验
http://sunqi.javaeye.com/blog/708823
http://www.360doc.com/content/10/0920/08/1720440_55016710.shtml



希望对你有帮助

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧