今天发现tomcat7发布bate版了,对Servlet3的支持令值得期待,尤其是异步这个特性,
之前bate版都没有,只有拉它主干自己编译tomcat跑的。赶紧来尝试下吧~
在我们项目中,应用异步最典型场景就是订购后等待开通这个等待过程了,
在之前Servlet版本,一个请求必须要完全处理完后才能返回,这样等待开通后跳转到产品
就必须要去轮询有没有权限了,如果可以异步,那一个请求就能搞定。
模拟如下
首先要把tomcat7中的servlet-api.jar 和tomcat-api.jar 加到eclipse引用中,这样可以开发而打包的时候不会包含这两个jar,直接在tomcat7上跑
@WebServlet(name="Servlet3", urlPatterns={"/demo", "/servlet"},asyncSupported=true)//此为Servlet3新增的注解支持,asyncSupported=true表示支持异步
//也可在web.xml中添加<async-supported>true</async-supported>
public class Servlet3 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("下订单开始: " + new Date() + "<br/>");
out.flush();
AsyncContext ctx = req.startAsync();
//异步去执行开通订单
new Thread(new CheckOrder(ctx)).start();
out.println("订购成功: " + new Date()+ "<br/>");
out.flush();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
public class CheckOrder implements Runnable{
private AsyncContext ctx = null;
public CheckOrder(AsyncContext ctx) {
this.ctx = ctx;
}
public void run() {
try {
//模拟开通等待
Thread.sleep(3000);
PrintWriter out = ctx.getResponse().getWriter();
out.println("已经有权限了,let's go! : " + new Date() );
out.flush();
ctx.complete();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果
下订单开始: Thu Jul 08 15:49:30 CST 2010
订购成功: Thu Jul 08 15:49:30 CST 2010
没有等待那个模拟开通就直接返回了,过了三秒在打印出
已经有权限了,let's go! : Thu Jul 08 15:49:33 CST 2010
这样好处是一个请求就能解决原来多次请求,减少了请求数,但也可以看到,在打印出前面的结果后,这个请求连接一直
保持的,这就考验了服务器了,因为个人感觉适合于立刻返回处理结果,但后续异步操作也能快速返回的情景,如果说异步操
作的时间很长就不适合了,还是原来那种再发起请求的好。
大家讨论拍砖,Servlet3其他新特性,还是值得研究。
分享到:
相关推荐
3-6Tomcat处理源码实现与异步Servlet源码实现(1).mp4
1. **Java EE 7支持**:Tomcat 8增加了对Java EE 7规范的支持,包括Servlet 3.1、JSP 2.3和EL 3.0等。这些更新提供了更多的API和功能,如WebSocket、异步处理等。 2. **改进的NIO2**:Tomcat 8引入了对Java NIO 2 ...
基于Java 7的NIO 2 API,Tomcat 7实现了异步处理和文件通道功能,提升了I/O性能。这使得服务器能够同时处理更多的并发请求,显著提高了高负载场景下的性能。 3. **更好的集群和负载均衡**: 通过`cluster_load...
要开始使用Servlet3的异步请求,首先你需要一个支持Servlet 3.0及以上版本的容器,如Tomcat 7+、Jetty 9+等。然后,你需要在`web.xml`配置文件或者通过Java注解声明一个支持异步的Servlet。使用`@AsyncSupported`...
Tomcat8于2013年发布,主要支持Java EE 7规范,包括Servlet 3.1、JSP 2.3和EL 3.0等,相比Tomcat7有以下改进: 1. **Servlet 3.1**:增加了HTTP/2协议支持,提高了数据传输效率,降低了延迟。 2. **WebSocket支持**...
2. **Jasper增强**:Tomcat 7的Jasper引擎对JSP编译进行了优化,支持JSP 2.2标准,提供了更多的错误检查和改进的开发体验。 3. **更好的安全管理**:增加了基于角色的安全管理(RBAC),可以更精细地控制用户的访问...
3. **API更新**:Servlet、JSP和EL的版本升级带来了新的特性和更好的开发体验。 4. **管理界面**:Tomcat 8的管理控制台提供了更多功能,便于日常运维。 总结: 选择Tomcat 7还是Tomcat 8,取决于项目需求和兼容性...
Tomcat 7还加强了错误处理,提高了性能,并且对Servlet、JSP和EL(Expression Language)等核心技术进行了更新。 Tomcat 8是在Tomcat 7的基础上进一步升级,于2013年发布,它支持Java EE 7规范。此版本引入了更多的...
1. 支持新规范:支持Java Servlet 3.0和JSP 2.2规范,引入了更多的API和特性。 2. 异步处理:增加了异步Servlet API,允许在不阻塞线程的情况下处理长时间运行的任务。 3. 组件改进:增强了过滤器、监听器和上下文...
Tomcat 8.5是其一个稳定版本,支持Java EE 7规范,包括Servlet 3.1、JSP 2.3和EL 3.0。在API文档中,开发者可以找到关于如何配置和管理Tomcat服务器,以及如何部署和运行Web应用的信息。 2. **JSP (JavaServer ...
从书籍的版权和出版信息来看,Apache Tomcat 7的出版代表着当时对Web应用程序开发的关注和重视,它致力于提供一本深入、全面的指南,帮助开发者们理解和掌握Tomcat 7的使用方法及其带来的新特性。对于学习和使用...
Servlet异步处理流程图.png 接收到request请求之后,由tomcat工作线程从HttpServletRequest中获得一个异步上下文AsyncContext对象,然后由tomcat工作线程把AsyncContext对象传递给业务处理线程,同时tomcat工作线程...
Tomcat 7是Apache Tomcat的一个重要版本,它支持Java EE 6规范,包括Servlet 3.0、JSP 2.2和EL 2.2。这个版本引入了改进的部署功能,增强了安全管理,并且对性能进行了优化。在Eclipse中,开发者可以方便地配置...
总结来说,虽然Tomcat6和Tomcat7的配置大体相似,但在JSP和Servlet版本上有所升级,因此Tomcat7提供了更多新功能和优化。理解这些配置步骤对于开发者来说至关重要,有助于快速搭建和调试Java Web应用。
1. **Servlet 3.0支持**:Tomcat 7全面支持Servlet 3.0规范,这引入了诸如异步处理、注解配置、动态部署等功能,提高了Web应用的开发效率和性能。 2. **JSP 2.2支持**:它包含对JSP 2.2的实现,提供了更多的EL...
综上所述,Tomcat 7和8都是Java Web开发中的重要工具,它们的差异主要体现在对Java EE规范的支持程度、性能优化以及新特性的引入。选择哪个版本取决于项目需求和对最新技术的支持。如果项目需要Java EE 7规范的支持...
7. **Pluggable Servlet上下文**:开发者可以通过实现`javax.servlet.ServletContextListener`来创建自定义的Servlet上下文,从而更灵活地控制Web应用程序的启动和停止过程。 8. **过滤器链的改进**:Servlet 3.0...
【标题】"how tomcat works和jetty-src和tomcat7-src" 提及了三个关键概念:Tomcat的工作原理、Jetty源代码以及Tomcat 7的源代码。这些是Java Web服务器领域的核心元素,主要涉及到如何处理HTTP请求、部署Web应用...