`
liyixing1
  • 浏览: 961432 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

servlet3.0 异步servlet

 
阅读更多
假设一种情况,你的一个servlet会处理比较长的时间,而且这个servlet请求数量也挺多的,那么久会造成tomcat线程池被占用满了,造成其他用户的请求等待队列过多,时间过长。

用例子实现
首先需要开启
<servlet>
    <servlet-name>webProxyMain</servlet-name>
    <servlet-class>com.lsiding.nat.server.web.WebProxyMain</servlet-class>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
  </servlet>


或者


@WebServlet(value = "/asyncTest", asyncSupported=true)



package com.lsiding.admin4j.act;

import java.io.IOException;

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;

/**
 * Servlet implementation class AsyncTest
 */
@WebServlet(value = "/asyncTest.html", asyncSupported = true)
public class AsyncTest extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public AsyncTest() {
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		// 必须
		// 否则可能会 A filter or servlet of the current chain does not support
		// asynchronous operations.
		request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
		AsyncContext asyncCtx = request.startAsync();
		asyncCtx.addListener(new AppAsyncListener());
		asyncCtx.setTimeout(9000);
		asyncCtx.start(
		new Thread() {
			public void run() {
				try {
					try {
						asyncCtx.getResponse().getOutputStream()
								.println("thread");
						asyncCtx.getResponse().getOutputStream().flush();
					} catch (IOException e) {
					}
					Thread.sleep(8000);
					asyncCtx.complete();
				} catch (InterruptedException e) {
				}
				;
			}
		});
		response.getOutputStream()
				.write("请求方法返回了,但是response是否结束了呢?".getBytes());
		response.getOutputStream().flush();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}




package com.lsiding.admin4j.act;

import java.io.IOException;

import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;

public class AppAsyncListener implements AsyncListener {
	@Override
	public void onComplete(AsyncEvent asyncEvent) throws IOException {
		asyncEvent.getAsyncContext().getResponse().getOutputStream().println("onComplete");
		asyncEvent.getAsyncContext().getResponse().getOutputStream().flush();
	}

	@Override
	public void onError(AsyncEvent asyncEvent) throws IOException {
		asyncEvent.getAsyncContext().getResponse().getOutputStream().println("onError");
		asyncEvent.getAsyncContext().getResponse().getOutputStream().flush();
	}

	@Override
	public void onStartAsync(AsyncEvent asyncEvent) throws IOException {
		asyncEvent.getAsyncContext().getResponse().getOutputStream().println("onStartAsync");
		asyncEvent.getAsyncContext().getResponse().getOutputStream().flush();
	}

	@Override
	public void onTimeout(AsyncEvent asyncEvent) throws IOException {
		asyncEvent.getAsyncContext().getResponse().getOutputStream().println("asyncEvent");
		asyncEvent.getAsyncContext().getResponse().getOutputStream().flush();
	}
}
分享到:
评论

相关推荐

    servlet 3.0 异步 推送 聊天室

    综上所述,这个"Servlet 3.0异步推送聊天室"项目展示了如何利用Servlet 3.0的异步处理和推送技术构建一个实时交互的应用。通过理解和实践这些技术,开发者可以构建出更加高效、响应迅速的Web应用程序。

    Servlet3.0参考手册

    总的来说,Servlet3.0通过增强的注解配置、异步处理、过滤器改进、上下文参数和监听器的注解支持,以及微容器概念,极大地提升了Java Web开发的效率和便利性。这份参考手册无疑是深入理解和掌握Servlet3.0技术的关键...

    Servlet3.0 异步处理 页面推送 Comet 实例

    在压缩包文件`CometTest`中,可能包含了一个简单的Comet实现示例,你可以通过学习和运行这个例子来深入理解Servlet3.0异步处理和Comet页面推送的工作原理。通过实践,你可以更好地掌握如何在实际项目中利用这些技术...

    servlet3.0.jar下载

    2. **异步处理**:Servlet 3.0引入了异步Servlet的概念,允许Servlet在处理请求时返回控制权给容器,然后在准备好响应时再重新获取控制权。这提高了性能,因为线程可以在等待I/O操作完成时被重用,而不是阻塞等待。 ...

    servlet3.0推送聊天室

    Servlet 3.0作为Servlet规范的一个重要版本,引入了许多新特性,其中最引人注目的就是异步处理和支持Web插座(WebSocket),这使得实时通信如聊天室的实现变得更加便捷。本文将深入探讨如何利用Servlet 3.0的异步...

    servlet 3.0 jar 包综合下载

    下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...

    servlet3.0.zip

    这个压缩包“servlet3.0.zip”包含两个核心的JAR文件:“javax.servlet-javadoc.jar”和“javax.servlet.jar”,它们分别提供了Servlet API的文档和实现。 1. **Servlet API**: - `javax.servlet`包是Servlet API...

    Servlet 3.0jar包和source包

    2. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在处理请求时启动一个后台线程,从而提高服务器性能。通过实现`AsyncContext`接口,开发者可以控制请求的生命周期,直到准备好返回响应。 3. **...

    servlet3.0 jar包和doc

    2. **异步处理**:Servlet3.0支持异步处理,允许Servlet在接收到请求后启动一个后台线程进行处理,而主线程可以立即返回,提高了服务器对高并发请求的响应能力。通过`HttpServletRequest.startAsync()`方法,开发者...

    Java Servlet3.0异步处理问题

    Java Servlet 3.0 异步处理问题 Java Servlet 3.0 异步处理问题主要介绍了 Java 中 Servlet 3.0 异步处理的原理以及遇到的问题分析。Servlet 3.0 开始提供了 AsyncContext 用来支持异步处理请求,那么异步处理请求...

    Jsp/Servlet3.0 ppt和代码

    【标题】"Jsp/Servlet3.0 ppt和代码"涉及的是Java服务器页面(JSP)和Servlet 3.0版本的关键技术。JSP是一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,从而实现服务器端的动态内容生成。而Servlet是...

    maven servlet 3.0 eclipse config video

    2. **异步处理**: Servlet 3.0允许开发者编写异步Servlet,通过`AsyncContext`对象实现非阻塞I/O,提高应用性能。 3. **监听器和过滤器**: 可以使用注解`@WebListener`和`@WebFilter`声明监听器和过滤器,简化了配置...

    Servlet3.0特性详解

    Servlet3.0引入了异步处理能力,允许Servlet在处理请求时返回控制权给容器,然后在后台继续执行任务。通过实现`AsyncContext`,开发者可以创建非阻塞的应用,提高应用性能和响应速度。 3. **Pluggable Contexts**...

    servlet3.0-demo

    总结起来,"servlet3.0-demo"项目展示了Servlet 3.0的关键特性,包括使用注解声明Servlet、处理文件上传以及异步处理。这些改进极大地提升了开发效率,使得Servlet API更加现代化和易于使用。通过学习这个示例,...

    idea创建maven Servlet3.0工具

    最后,关于"链接.txt"、"创建MavenWeb项目Servlet3.0的模板"和"Idea安装插件"这三个文件,它们可能是教程的补充资料。"链接.txt"可能包含其他相关资源的URL;"创建MavenWeb项目Servlet3.0的模板"可能是一个详细的...

    servlet3.0相关的包

    在实际开发中,将这些库导入到项目中,开发者可以利用Servlet3.0的异步处理能力,处理高并发场景下的请求;使用JSTL简化页面逻辑,提升开发效率。同时,由于不再依赖web.xml进行所有配置,项目的部署和扩展也变得...

    servlet3.0 规范pdf 包含javadoc

    1. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在请求处理过程中挂起并稍后恢复,而不是阻塞线程,这极大地提高了应用的并发性能。通过`AsyncContext`接口,开发者可以实现非阻塞I/O,以更高效地处理...

    servlet 3.0新增功能详解

    本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性支持等方面。 #### 异步处理支持 异步处理是 Servlet 3.0 中最为显著的新特性之一。这一特性解决了传统 Servlet 在处理长时间...

    Servlet3.0 Demo

    Servlet3.0提供了异步处理能力,允许Servlet在处理请求时启动一个独立的线程,从而避免阻塞容器线程。通过`AsyncContext`接口,可以实现非阻塞I/O和长时间运行的任务。 3. **监听器的注解注册**: 类似于Servlet...

Global site tag (gtag.js) - Google Analytics