`
darrendu
  • 浏览: 195748 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Servlet3.0新特性---异步支持

    博客分类:
  • J2EE
 
阅读更多

1.servlet2.5中,页面发送一次请求,是顺序执行,即使在servlet里的service中开启一个线程,线程处理后的结果是无法返回给页面的,servlet执行完毕后,response就关闭了,无法将后台更新数据即时更新到页面端

2.现在后台“推”是怎么实现的
   2.1定时发送请求,页面有刷新,不好友
   
   2.2Ajax 轮询,然后通过js更新页面数据
    相比前者虽然友好,访问量太大时,服务器会增加压力,小型应用可以考虑用

   2.3反向Ajax(Comnet)
      利用Http1.1长连接的特性,也是通过轮询,但是每次发送请求不会立即返回,而是等待服务器有数据时才返回或者没有等到数据而连接超时返回,相比于ajax轮询,减少了服务端压力,但一个缺点,不是所有浏览器都支持。

3.servlet3.0中提供了异步支持,当数据返回页面后,request并没有关闭,当服务器端有数据更新时,就可以推送了

4.更多关于web异步,请参考这边文章
http://blog.csdn.net/cenwenchu79/article/details/5703430 

5.测试servlet3.0异步
  SecondServlet.java

package com.darren.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.AsyncContext;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * servlet3.0默认是不支持异步的通过asyncSupported=true,打开
 * 
 */
@WebServlet(name="SecondServlet",urlPatterns={"/secondServlet"},asyncSupported=true)
public class SecondServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		PrintWriter out = null;
		
		resp.setContentType("text/html");
		try {
			out = resp.getWriter();
			out.print("servlets starts:"+new Date()+"<br>");
			out.flush();
			
			AsyncContext asyncContext = req.startAsync();
			
			
		
			/**
			 * AsyncListener为什么没有适配器呢?需要各个厂家实现?
			 */
			asyncContext.addListener(new AsyncListener(){

				public void onComplete(AsyncEvent asyncEvent) throws IOException {
					//将流在这里关闭
					asyncEvent.getSuppliedResponse().getWriter().close();
					System.out.println("asynContext finished....");
				}

				public void onError(AsyncEvent arg0) throws IOException {
					// TODO Auto-generated method stub
					
				}

				public void onStartAsync(AsyncEvent arg0) throws IOException {
					// TODO Auto-generated method stub
					
				}

				public void onTimeout(AsyncEvent arg0) throws IOException {
					// TODO Auto-generated method stub
					
				}
				
			});
			
			
			
			new Thread(new MyThread(asyncContext)).start();
			
			out.print("servlets ends:"+new Date()+"<br>");
			out.flush();
			
		} finally {
			
			/**
			 * 一开是在这里关闭了,关了,后面就用不成了 :)
			 * 
			 */
			
			/*if(null != out){
				out.close();
				out = null;
			}*/
		}
		
	}
}

 

  MyThread.java

package com.darren.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.AsyncContext;

public class MyThread implements Runnable {

	private AsyncContext asyncContext;
	
	
	public MyThread(AsyncContext asyncContext) {
		this.asyncContext = asyncContext;
	}


	public void run() {
		
		PrintWriter out = null;
		
		try {
			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			out = asyncContext.getResponse().getWriter();
			out.println("myTask starts:"+new Date()+"<br>");
			out.flush();
			
			
			out.print("myTask ends:"+new Date()+"<br>");
			out.flush();
			asyncContext.complete();
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			
			/*if(null != out){
				out.close();
				out = null;
			}*/
		}
	}

}

 

主要是这个对象AsyncContext,参考J2EE6 API吧http://docs.oracle.com/javaee/6/api/

 

分享到:
评论
1 楼 string2020 2014-05-03  
楼主,能否写一个例子说说:
AsyncContext 类的 dispatch、dispatch(String path)
两个方法是干啥的

谢谢。

相关推荐

    servlet-api-3.0-alpha-1.jar

    总之,Servlet API 3.0-alpha-1.jar为Web开发带来了许多增强功能和改进,包括更好的依赖管理、异步处理、更简洁的配置方式以及对新特性的支持,这些都极大地提升了开发效率和应用性能。对于Java Web开发者来说,理解...

    servlet-api-3.0.jar包

    Servlet-api-3.0.jar是Java Servlet API的第三版实现,它是开发Web应用程序的重要组成部分,特别是在...Servlet 3.0引入的新特性和改进大大简化了开发流程,提高了效率,并为现代Web技术(如WebSocket)提供了支持。

    Servlet3.0 新特性

    Servlet3.0是Java Servlet API的一个重要版本更新,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。以下将详细讲解Servlet3.0的关键特性。 1. **注解驱动的配置**: 在Servlet3.0之前,...

    servlet 3.0 jar 包综合下载

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

    servlet-api-3.0.zip

    1. **Servlet 3.0引入的新特性**: - **注解驱动的配置**:Servlet 3.0引入了注解来替代传统的web.xml部署描述符,使得开发者可以直接在类或方法上使用注解进行配置,如`@WebServlet`,`@WebFilter`,`@WebListener...

    servlet 3.0新增功能详解

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

    Servlet 3.0 API - Apache Tomcat 7.0.41

    Servlet 3.0是Java Servlet规范的第四个主要版本,引入了许多新特性和改进。 2. **Servlet容器**:Tomcat作为Servlet容器,负责加载、初始化、执行以及管理Servlet。它解析HTTP请求,并将这些请求传递给相应的...

    Servlet3.0参考手册

    Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。这份"Servlet3.0参考手册"无疑为开发者提供了全面的API参考和实用指南。 首先,Servlet3.0...

    servlet3.0.jar下载

    Servlet 3.0是Java Servlet规范的一个重要版本,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。这个"javax.servlet-api-3.0.1.jar"文件是Servlet 3.0规范的API实现,包含了开发人员编写...

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

    在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及模块化部署等。 首先,Servlet3.0最显著的特征之一是广泛使用注解(Annotation)。传统的Servlet配置通常需要在web....

    Servlet 3.0新特性——文件上传接口

    Servlet 3.0是Java EE 6规范的一部分,它引入了许多新特性,极大地提升了Web开发的效率和灵活性。其中,文件上传接口的改进是开发者们非常关注的一个亮点。在这个更新中,Servlet API提供了更简单、更高效的方式来...

    servlet3.0-demo

    在这个名为“servlet3.0-demo”的项目中,我们重点探讨的是如何利用Servlet 3.0的新特性进行文件上传操作,并且采用注解的方式来简化代码。 在Servlet 3.0之前,我们需要在web.xml中配置Servlet,然后通过继承...

    Servlet3.0 新特性之模块化实践

    总结,Servlet 3.0的新特性显著提升了Web应用的开发效率和性能,通过模块化、注解、异步处理、可插拔容器、依赖注入和过滤器链改进等手段,提供了更加现代、灵活和高效的开发体验。对于开发者来说,理解和掌握这些...

    Servlet3.0特性详解

    Servlet3.0是Java EE平台中的一个重要组成部分,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。以下是对Servlet3.0主要特性的详细解释: 1. **注解配置**: 在Servlet3.0中,我们可以...

    Servlet3.0新特性解析01

    总结来说,Servlet3.0的新特性带来了更简洁的配置、更高效的异步处理、更灵活的过滤器和监听器注册,以及对文件上传的内置支持。这些改进都极大地推动了Java Web应用的开发效率和性能,使得开发人员能够更加专注于...

    Servlet 3.0 - Apache Tomcat 7.0.61

    Servlet 3.0是Java Web开发中的一个重要里程碑,它带来了许多新特性和改进,使得开发者在构建Web应用程序时更加高效和灵活。Apache Tomcat 7.0.61是广泛使用的开源Servlet容器,它实现了Servlet 3.0规范,提供了稳定...

    Servlet 3.0jar包和source包

    首先,Servlet 3.0作为Servlet API的一个版本,引入了许多新特性以提高开发效率和灵活性: 1. **注解配置**:在Servlet 3.0之前,开发者需要在web.xml文件中手动配置Servlet和过滤器。而Servlet 3.0允许使用注解...

    Servlet3.0_新特性

    本文将深入探讨Servlet3.0的新特性,重点解析异步处理支持、新增注解支持以及可插性支持,这些特性极大地提升了Web应用的性能和开发者的便利性。 ### 异步处理支持 异步处理是Servlet3.0最令人瞩目的新特性之一。...

    servlet3.0 jar \ doc \pdf 相关文档资料

    - `servlet-3_0-final-spec.pdf`:这是Servlet 3.0规范的官方文档,详细介绍了Servlet 3.0的所有特性和API,是理解Servlet 3.0的核心参考资料。 - `servlet-3_0-final-javadoc.zip`:包含了Servlet 3.0 API的Java...

    servlet3.0.zip

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

Global site tag (gtag.js) - Google Analytics