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/
分享到:
相关推荐
总之,Servlet API 3.0-alpha-1.jar为Web开发带来了许多增强功能和改进,包括更好的依赖管理、异步处理、更简洁的配置方式以及对新特性的支持,这些都极大地提升了开发效率和应用性能。对于Java Web开发者来说,理解...
下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...
Servlet3.0是Java Servlet API的一个重要版本更新,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。以下将详细讲解Servlet3.0的关键特性。 1. **注解驱动的配置**: 在Servlet3.0之前,...
Servlet-api-3.0.jar是Java Servlet API的第三版实现,它是开发Web应用程序的重要组成部分,特别是在...Servlet 3.0引入的新特性和改进大大简化了开发流程,提高了效率,并为现代Web技术(如WebSocket)提供了支持。
Servlet 3.0是Java Servlet规范的一个重要版本,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。这个"javax.servlet-api-3.0.1.jar"文件是Servlet 3.0规范的API实现,包含了开发人员编写...
1. **Servlet 3.0引入的新特性**: - **注解驱动的配置**:Servlet 3.0引入了注解来替代传统的web.xml部署描述符,使得开发者可以直接在类或方法上使用注解进行配置,如`@WebServlet`,`@WebFilter`,`@WebListener...
本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性支持等方面。 #### 异步处理支持 异步处理是 Servlet 3.0 中最为显著的新特性之一。这一特性解决了传统 Servlet 在处理长时间...
Servlet 3.0是Java Servlet规范的第四个主要版本,引入了许多新特性和改进。 2. **Servlet容器**:Tomcat作为Servlet容器,负责加载、初始化、执行以及管理Servlet。它解析HTTP请求,并将这些请求传递给相应的...
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。这份"Servlet3.0参考手册"无疑为开发者提供了全面的API参考和实用指南。 首先,Servlet3.0...
在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及模块化部署等。 首先,Servlet3.0最显著的特征之一是广泛使用注解(Annotation)。传统的Servlet配置通常需要在web....
Servlet 3.0是Java EE 6规范的一部分,它引入了许多新特性,极大地提升了Web开发的效率和灵活性。其中,文件上传接口的改进是开发者们非常关注的一个亮点。在这个更新中,Servlet API提供了更简单、更高效的方式来...
在这个名为“servlet3.0-demo”的项目中,我们重点探讨的是如何利用Servlet 3.0的新特性进行文件上传操作,并且采用注解的方式来简化代码。 在Servlet 3.0之前,我们需要在web.xml中配置Servlet,然后通过继承...
总结,Servlet 3.0的新特性显著提升了Web应用的开发效率和性能,通过模块化、注解、异步处理、可插拔容器、依赖注入和过滤器链改进等手段,提供了更加现代、灵活和高效的开发体验。对于开发者来说,理解和掌握这些...
Servlet3.0是Java EE平台中的一个重要组成部分,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。以下是对Servlet3.0主要特性的详细解释: 1. **注解配置**: 在Servlet3.0中,我们可以...
总结来说,Servlet3.0的新特性带来了更简洁的配置、更高效的异步处理、更灵活的过滤器和监听器注册,以及对文件上传的内置支持。这些改进都极大地推动了Java Web应用的开发效率和性能,使得开发人员能够更加专注于...
Servlet 3.0是Java Web开发中的一个重要里程碑,它带来了许多新特性和改进,使得开发者在构建Web应用程序时更加高效和灵活。Apache Tomcat 7.0.61是广泛使用的开源Servlet容器,它实现了Servlet 3.0规范,提供了稳定...
首先,Servlet 3.0作为Servlet API的一个版本,引入了许多新特性以提高开发效率和灵活性: 1. **注解配置**:在Servlet 3.0之前,开发者需要在web.xml文件中手动配置Servlet和过滤器。而Servlet 3.0允许使用注解...
本文将深入探讨Servlet3.0的新特性,重点解析异步处理支持、新增注解支持以及可插性支持,这些特性极大地提升了Web应用的性能和开发者的便利性。 ### 异步处理支持 异步处理是Servlet3.0最令人瞩目的新特性之一。...
- `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”包含两个核心的JAR文件:“javax.servlet-javadoc.jar”和“javax.servlet.jar”,它们分别提供了Servlet API的文档和实现。 1. **Servlet API**: - `javax.servlet`包是Servlet API...