`
liyixing1
  • 浏览: 939793 次
  • 性别: 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();
	}
}
分享到:
评论

相关推荐

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

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

    servlet 3.0 异步 推送 聊天室

    servlet 3.0 异步 推送 聊天室,application.js里的上下文路径修改成当前上下文,就可以运行了。

    servlet3.0推送聊天室

    用servlet3.0异步技术,实现推送信息至客户端的聊天室

    Java Servlet3.0异步处理问题

    主要介绍了Java中Servlet3.0异步处理的原理以及遇到的问题分析,需要的朋友参考一下。

    Servlet3.0

    Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解

    servlet 3.0新增功能详解

    Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础...本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障碍

    Spring Boot实现异步请求(Servlet 3.0)

    在spring 3.2 及以后版本中增加了对请求的异步处理,这篇文章主要介绍了Spring Boot实现异步请求(Servlet 3.0),感兴趣的小伙伴们可以参考一下。

    JavaEE 6 Servlet 3.0 中的新特性

    • 异步Servlet • Servlet 3.0 — 易于开发 – 主要关注点 • 增强了API 以便使用SE 5 中新的语言特性 – 例如:批注、泛型(Generics) – 在上次JavaEE 5 中漏掉的Servlet • 部署描述批注 – 现在web.xml 为可选 ...

    详解Servlet 3.0/3.1 中的异步处理

    主要介绍了详解Servlet 3.0/3.1 中的异步处理,实例分析了servlet 3.0异步处理的技巧,非常具有实用价值,需要的朋友可以参考下

    Servlet3.0新特性,Servlet3新特性,Servlet3注解,Servlet3异步处理【蕃薯耀】

    NULL 博文链接:https://fanshuyao.iteye.com/blog/1688318

    浅谈servlet3异步原理与实践

    本篇文章主要介绍了servlet3异步原理与实践,详细的介绍了servlet和异步的流程使用,具有一定的参考价值,有兴趣的可以了解一下

    async-hessian:通过Servlet 3.0 AsyncContext导出Hessian服务的方法

    通过Servlet 3.0 AsyncContext导出服务的方法 如何获得? 您可以将其用作Maven依赖项: &lt; groupId&gt;org.jmmo &lt; artifactId&gt;async-hessian &lt; version&gt;1.1 或在以下位置下载最新版本: : 如何使用它? 创建...

    Apache服务器tomcat7.0.12最新版,加入probe线程监视

    TOMCAT 7新特性  1 使用随机数去防止跨站脚本攻击。  2 改变了安全认证中的jessionid... 根据Mark Thomas,Tomcat 7委员会的经理的说法,Tomcat 7最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性。

    基于CXF+servlet整合spring接口系统

    基于spring+serlvet+CXF+servlet异步实现等融合成的开发框架,可以实现多线程和异步并发操作,采用servlet3.0自带的异步实现方式,jdk1.6版本,javaee1.6

    apache-tomcat-7.0.28

     根据Mark Thomas,Tomcat 7委员会的经理的说法,Tomcat 7最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性。  Tomcat 7的例子程序中,包含了Eclipse的工程文件和Ant的构建文件,以方便去构建war文件...

    annotaction

    1. 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才 结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己 在不...

    Java™ Servlet 规范.

    1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................

    JSP+Servlet+EJB3.0+Oracle10g火车售票系统

    本系统主要实现火车查询售票功能,主要的功能如下: 客户端管理功能: (1)动车基本信息管理模块;...4.本设计采用JSP+Servlet+EJB3.0+Oracle10g工具进行开发,最后通过JDBC进行与数据库的相关的链接。

    基于 servlet 开发的学生管理系统(mvc+bootstrap+jquery3.0+mysql)

    项目描述:基于 servlet 开发的系统 1.学生可以查看自己的信息,管理员可以修改学生信息以及注册自己的信息、 2.前 HTMl+css+javascipt,框架是 Bootstrap4.0,Jquery3.2 表单验证,异步请求、 3.数据库 Mysql 以及 ...

Global site tag (gtag.js) - Google Analytics