- 浏览: 3506483 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
J2EE 6和Glassfish 3V正式发布了,J2EE 6正式发布了Servlet3.0, 为了能更好的对WEB2.0提供支持, 3 .0添加了异步处理的机制.
HTTP1.1相对于HTTP1.0的影响 .
HTTP1.1最大的一个改变就是提供了长连接,这样HTTP不再是一次请求,一次连接的协议了,只要HTTP的connection不关闭,一次 HTTP连接可以支持任意多次request/reponse处理. 当WEB Client与WEB Server建立连接时,客户端可以采用长连接,也就是说Client会一直保持对WEB Server的连接(例如:Browser对一个网站保持当连接,知道Browser关闭或最终退出该网站). 旧的WEB Server会为每一个Http连接分配一个active的Thread,这样当Client的数量增大时,Server端Thread Pool的最大容量也需要相应增大,但Thread是相当耗内存的,一个不小心就会导致Server端NotEnoughMemory...
基于HTTP1.1,大部分支持Servlet2.X的WEB容器都采用的NIO去接收和处理请求. 当Client和Server端建立连接时,Server端并不分配一个Thread给HTTP连接.直到Server端收到Client端发送的 Request时, Server才开始为该Request分配Thread(注意:这里不是为HTTP连接分配Thread ).
这样当大量的Client建立长连接与Server进行交互时,Server无需维持一个Thread给inactive的HTTP长连接, 每个Servlet 在doReceived()时其实对应的是一个active Request,而不是HTTPConnection本身. 这样Server端所需的最大Thread数大大地减少了.
AJAX的影响
1. Request的数量爆炸性增加增加
过去WEB Browser打开一个Web page,只需要和Web Server端建立一个HTTP连接.但AJAX技术出现以后,一个Web page上可能有多个与Web Server的连接,而且Ajax request通常是十分频繁的,Server接收到的Request数量大大增长了, 这样原先NIO的技术已经不能很好的支持基于Ajax的服务了.
Servlet 3 .0的异步处理就能够解决上面的问题.
Servlet3.0的solution:
当request发送到Server端时,servlet 的doReceived() 将request放进一个queue里,然后doReceived结束.这个时候server并没有关闭response,Client端一直在等 server端response的内容. Server端维护自己的ThreadPool,当ThreadPool里有idle的Thread,就从queue里取出一个request,分配 idle的Thread给request,并进行处理.
- @WebServlet ( "/test" asyncSupported= true )
- public class MyServlet extends HttpServlet {
- ScheduledThreadPoolExecutor executor = null ;
- public void init(ServletConfig arg0) throws ServletException {
- executor = new ThreadPoolExecutor( 10 ); //独立的线程池处理请求
- }
- public void doGet(HttpServletRequest req, HttpServletResponse res) {
- ...
- AsyncContext aCtx = request.startAsync(req, res);
- executor.execute(new AsyncWebService(aCtx)); //异步处理
- }
- }
- public class AsyncWebService implements Runnable {
- AsyncContext ctx;
- public AsyncWebService(AsyncContext ctx) {
- this .ctx = ctx;
- }
- public void run() { //处理请求
- //Do something here ...
- // Dispatch the request to render the result to a JSP.
- ctx.dispatch("/render.jsp" );
- }
- }
@WebServlet("/test" asyncSupported=true) public class MyServlet extends HttpServlet { ScheduledThreadPoolExecutor executor = null; public void init(ServletConfig arg0) throws ServletException { executor = new ThreadPoolExecutor(10);//独立的线程池处理请求 } public void doGet(HttpServletRequest req, HttpServletResponse res) { ... AsyncContext aCtx = request.startAsync(req, res); executor.execute(new AsyncWebService(aCtx));//异步处理 } } public class AsyncWebService implements Runnable { AsyncContext ctx; public AsyncWebService(AsyncContext ctx) { this.ctx = ctx; } public void run() {//处理请求 //Do something here ... // Dispatch the request to render the result to a JSP. ctx.dispatch("/render.jsp"); }}
以上的例子可以用于处理对Ajax的请求,因为通常Ajax的请求多,但对响应速度的要求并不太高. 对于正常的页面请求,要求一定的响应速度,可以沿用以前Servlet 同步的实现.
2. Server端推送信息
在Web2.0的应用中, Ajax可用通过不断的发送Request来获取Server端某种信息的变化,但这种实现会产生大量的Client请求. 当前推荐的方法是,让Server端自己推送信息变化给Client.
因为Servlet3.0提供了异步处理的方式, Request提交给Server以后, Server可以为Request注册一个Listener,由Listener去monitor信息的变化,当信息发生变化时,由Listener负责 把信息变化发送给Cient(Listener关闭HTTP response).
发表评论
-
说明SOA监管(SOA Governance)实例(收录备查)
2012-12-19 11:35 1756SOA 已经不是单纯技术问 ... -
Injecting Spring Beans into Java Servlets
2012-11-01 10:21 1942If you are working in a Java ... -
用 HttpServletResponseWrapper 实现 Etag 过滤器
2012-07-09 16:58 3764原文出处:http://blog.chenlb.com/200 ... -
Eclipse Indigo - Cannot install Android ADT Plugin
2012-02-29 01:17 3888When I try to install the And ... -
Eclipse Indigo - Cannot install Android ADT Plugin
2012-02-29 01:13 1994When I try to install the And ... -
[转]mybatis下的分页,支持所有的数据库
2011-07-21 13:21 14844大 家都知道,mybatis的自带分页方法只是逻 ... -
Java framework for text- & console-based forms?
2011-07-21 01:06 1714charva jcurses JNA , ... -
JNA(Java Native Access)学习入门
2011-07-21 01:04 22655Java Native Access 项目 在 ... -
使用IntrospectorCleanupListener 解决quartz引起的内存泄漏
2011-04-20 11:59 13378"在服务器运行过程中,Spring不停的运行的计划任 ... -
DBCP代码研读以及就数据库连接失效的解决
2011-03-31 11:03 3771问题 网上很多评论说DBCP有很多BUG,但是都没有指明是什 ... -
ContextLoaderListener
2010-12-06 15:58 8473(1) org.springframework.web.c ... -
Servlet3.0引入的新特性
2010-12-06 15:20 3063Servlet3.0规范的新特性主要是为了3个目的: ... -
100個節點上運行群集亞馬遜EC2上Hazelcast
2010-12-03 23:59 3321本文的目的,適是给妳湮示的細節集群的100個節點。此湮示記錄, ... -
Spring Properties Reloaded
2010-12-02 14:54 4377Spring Properties Reloaded Som ... -
为spring2.5中的jpetstore增加perf4j监控
2010-09-02 13:51 2653perf4j是一款类似于log4j的性能检测工具. 它 ... -
语义网的学习资源大汇集(备忘)
2010-06-23 22:48 1761网上资源 http:/ ... -
使用 JOLAP 实现复杂分析查询
2010-06-06 13:42 1971Shashank Tiwari 在本文中对 ... -
HTML5 Canvas for Internet Explorer
2010-06-04 21:16 1859Canvascape http://www.benjoff ... -
大型网站架构演变和知识体系
2010-06-01 23:47 1982架构演变第一步:物 ... -
Ejb Con Spring
2010-05-20 17:46 2213Contenido [ocultar] 1 ...
相关推荐
本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性支持等方面。 #### 异步处理支持 异步处理是 Servlet 3.0 中最为显著的新特性之一。这一特性解决了传统 Servlet 在处理长时间...
2. **异步处理**:Servlet 3.0引入了异步Servlet的概念,允许Servlet在处理请求时返回控制权给容器,然后在准备好响应时再重新获取控制权。这提高了性能,因为线程可以在等待I/O操作完成时被重用,而不是阻塞等待。 ...
这个压缩包“servlet3.0.zip”包含两个核心的JAR文件:“javax.servlet-javadoc.jar”和“javax.servlet.jar”,它们分别提供了Servlet API的文档和实现。 1. **Servlet API**: - `javax.servlet`包是Servlet API...
2. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在处理请求时启动一个后台线程,从而提高服务器性能。通过实现`AsyncContext`接口,开发者可以控制请求的生命周期,直到准备好返回响应。 3. **...
下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...
Servlet 3.0作为Servlet规范的一个重要版本,引入了许多新特性,其中最引人注目的就是异步处理和支持Web插座(WebSocket),这使得实时通信如聊天室的实现变得更加便捷。本文将深入探讨如何利用Servlet 3.0的异步...
而Servlet 3.0是Java EE 6的一部分,引入了许多新功能,如注解配置、异步处理和过滤器链的增强。 **Maven配置** 1. **安装Maven**: 首先,你需要下载并安装Apache Maven到你的系统中,确保将其路径添加到系统环境...
总结起来,"servlet3.0-demo"项目展示了Servlet 3.0的关键特性,包括使用注解声明Servlet、处理文件上传以及异步处理。这些改进极大地提升了开发效率,使得Servlet API更加现代化和易于使用。通过学习这个示例,...
Servlet3.0是Java EE平台中的一个重要更新,它引入了许多新特性,其中一项重大改进就是对异步处理的支持。这项特性使得服务器可以处理长时间运行的任务,而不会阻塞其他请求,提高了系统的响应能力和效率。本实例...
Servlet3.0是Java EE平台中的一个重要组成部分,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。以下是对Servlet3.0主要特性的详细解释: 1. **注解配置**: 在Servlet3.0中,我们可以...
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。在这个"Servlet3.0相关的包"中,包含了以下几个关键组件: 1. **Servlet**: 这是Java ...
Servlet3.0提供了异步处理能力,允许Servlet在处理请求时启动一个独立的线程,从而避免阻塞容器线程。通过`AsyncContext`接口,可以实现非阻塞I/O和长时间运行的任务。 3. **监听器的注解注册**: 类似于Servlet...
一、Servlet 3.0新特性 1. 注解支持:Servlet 3.0引入了注解(Annotation)来声明Servlet、Filter和Listener,避免了XML配置文件的繁琐。例如,`@WebServlet`、`@WebFilter`和`@WebListener`可以直接在类上声明,...
Servlet 3.0是Java Servlet规范的一个重要版本,它在原有的Servlet 2.x基础上引入了多项新特性,极大地提升了Web应用程序的开发效率和灵活性。在这个版本中,servlet-api.jar作为核心库,包含了运行Servlet应用所...
- **异步处理**:Servlet 3.0允许开发者实现异步Servlet,通过`AsyncContext`接口,可以将请求处理从主线程分离开来,提高并发性能。 - **WebSocket支持**:Servlet 3.0引入了对WebSocket协议的支持,通过`javax....
Servlet 3.0引入了一种全新的特性,即异步处理能力,这极大地提高了Web应用程序的性能和响应性,尤其是在处理长时间运行的任务时。在传统的Servlet中,请求处理线程会一直占用,直到整个请求生命周期结束,这可能...
5. **异步处理**:Servlet 3.0引入了异步处理能力,可以用于文件上传场景。当文件较大时,可以启动一个新的线程或使用ExecutorService来处理上传,从而避免阻塞主线程,提升响应速度。 6. **安全性增强**:Servlet ...
4. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在处理请求时释放线程,提高服务器性能。通过调用`HttpServletRequest.startAsync()`方法,开发者可以启动一个异步上下文,然后在后台执行长时间运行的...
本文将深入探讨Servlet3.0的新特性,重点解析异步处理支持、新增注解支持以及可插性支持,这些特性极大地提升了Web应用的性能和开发者的便利性。 ### 异步处理支持 异步处理是Servlet3.0最令人瞩目的新特性之一。...
开发人员可以将此库添加到他们的项目中,以利用Servlet 3.0提供的新功能。它包含Servlet API的接口和类,如`HttpServlet`、`ServletConfig`、`HttpServletRequest`、`HttpServletResponse`等,以及用于注册Servlet和...