- 浏览: 1975255 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
蕃薯耀:
Java获取weblogic当前服务器名称Java weblo ...
Java获取weblogic当前服务器名称,Java weblogic 集群节点名称 -
蕃薯耀:
Eclipse创建Maven项目web.xml文件版本问题解决 ...
Eclipse创建Maven项目web.xml文件、JDK版本问题解决 -
蕃薯耀:
shiro ehcache缺少配置报错shiro ehcach ...
shiro ehcache缺少配置报错 -
蕃薯耀:
Apache Shiro1.4.1报错Object named ...
Apache Shiro1.4.1报错Object named 'filterChainResolver' -
蕃薯耀:
Eclipse优化Eclipse调优Eclipse 卡解决方案 ...
Eclipse优化,Eclipse调优,Eclipse 卡解决方案
Servlet3.0新特性,Servlet3新特性,Servlet3注解,Servlet3异步处理【蕃薯耀】
Servlet3.0新特性:
异步处理支持:有了该特性,Servlet线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该Servlet线程。在接收到请求 之后,Servlet线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器 资源的占用,并且提高并发处理速度。
新增的注解支持:该版本新增了若干注解,用于简化Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml部署描述文件从该版本开始不再是必选的了。可插性支持:熟悉Struts2的开发者一定会对其通过插件的方式与包括Spring在内的各种 常用框架的整合特性记忆犹新。
将相应的插件封装成JAR包并放在类路径下,Struts2运行时便能自动加载这些插件。现在Servlet 3.0提供了类似的特性,开发者可以通过插件的方式很方便的扩充已有Web应用的功能,而不需要修改原有的应用。下面我们将逐一讲解这些新特性,通过下面 的学习,读者将能够明晰了解Servlet 3.0的变化,并能够顺利使用它进行日常的开发工作。
异步处理支持
Servlet 3.0之前,一个普通Servlet的主要工作流程大致如下:首先,Servlet接收到请求之后,可能需要对请求携带的数据进行一些预处理;接着,调用业务接口的某些方法,以完成业务处理;最后,根据处理的结果提交响应,Servlet线程结束。
其中第二步的业务处理通常是最耗时的,这主要体现在数据库操作,以及其它的跨网络调用等,在此过程中,Servlet线程一直处于阻塞状态,直到业 务方法执行完毕。在处理业务的过程中,Servlet资源一直被占用而得不到释放,对于并发较大的应用,这有可能造成性能的瓶颈。对此,在以前通常是采用 私有解决方案来提前结束Servlet线程,并及时释放资源。
Servlet 3.0针对这个问题做了开创性的工作,现在通过使用Servlet 3.0的异步处理支持,之前的Servlet处理流程可以调整为如下的过程:首先,Servlet接收到请求之后,可能首先需要对请求携带的数据进行一些 预处理;接着,Servlet线程将请求转交给一个异步线程来执行业务处理,线程本身返回至容器,此时Servlet还没有生成响应数据,异步线程处理完 业务以后,可以直接生成响应数据(异步线程拥有ServletRequest和ServletResponse对象的引用),或者将请求继续转发给其它 Servlet。如此一来,Servlet线程不再是一直处于阻塞状态以等待业务逻辑的处理,而是启动异步线程之后可以立即返回。
异步处理特性可以应用于Servlet和过滤器两种组件,由于异步处理的工作模式和普通工作模式在实现上有着本质的区别,因此默认情况下,Servlet和过滤器并没有开启异步处理特性,如果希望使用该特性,则必须按照如下的方式启用:
对于使用传统的部署描述文件(web.xml)配置Servlet和过滤器的情况,Servlet 3.0为<servlet>和<filter>标签增加了<async-supported>子标签,该标签的默认 取值为false,要启用异步处理支持,则将其设为true即可。
异步处理案例:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <div> <span> <input type="button" value="提交" onclick="request();"/> </span> </div> <div id="result"> </div> </body> <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script> <script type="text/javascript"> function request(){ $.post("toDo", function(data){ $("#result").append("<div>"+data+"</div>"); }); }; </script> </html>
Servlet3.java
package com.lqy.servlet3; import java.io.IOException; import java.io.PrintWriter; 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; import com.lqy.thread.MyThread; @WebServlet(name="testServlet",urlPatterns="/toDo",asyncSupported=true) public class Servlet3 extends HttpServlet { private static final long serialVersionUID = 3678767769884185779L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("begin"); AsyncContext asyncContext = request.startAsync(); asyncContext.setTimeout(10000); MyThread myThread = new MyThread(asyncContext); myThread.start(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } out.println("end"); out.flush(); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
MyThread.java
package com.lqy.thread; import java.io.PrintWriter; import javax.servlet.AsyncContext; import javax.servlet.ServletResponse; public class MyThread extends Thread { private AsyncContext asyncContext = null; public MyThread(AsyncContext asyncContext) { this.asyncContext = asyncContext; } @Override public void run() { try { ServletResponse response = asyncContext.getResponse(); PrintWriter printWriter = response.getWriter(); printWriter.println("threadBegin"); Thread.sleep(1000); printWriter.println("threadEnd"); asyncContext.complete(); } catch (Exception e) { e.printStackTrace(); } } public AsyncContext getAsyncContext() { return asyncContext; } public void setAsyncContext(AsyncContext asyncContext) { this.asyncContext = asyncContext; } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
执行结果:(附件为完整项目)
POST http://localhost:8090/servlet3/toDo
|
200 OK
|
3.04s |
jquery....min.js (第 4 行)
|
begin
threadBegin
threadEnd
end
有错误的话,请参考以下的文章:
http://fanshuyao.iteye.com/blog/1688315
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
http://fanshuyao.iteye.com/blog/1688314
org.apache.jasper.JasperException: java.lang.ClassCastException: org.apache.catalina.core.DefaultInstanceManager cannot be cast to org.apache.tomcat.InstanceManager
http://fanshuyao.iteye.com/blog/1688305
java.lang.IllegalArgumentException: Invalid <url-pattern> toDo in servlet mapping
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2012年9月29日 01:46:25 星期六
- servlet3.rar (38.9 KB)
- 下载次数: 13
发表评论
-
Linux Nacos 集群安装,springCloud Nacos Linux 安装和集群配置
2021-03-26 10:03 845Linux Nacos 集群安装,springCloud N ... -
SpringCloud Nacos使用和配置,SpringCloud Nacos 服务注册中心配置使用
2021-03-26 09:22 977SpringCloud Nacos使用 ... -
Nacos longPolling error,Nacos1.4.1服务配置文件更新一次后报错
2021-03-24 11:39 1308Nacos longPolling error,Nacos ... -
Windows Mysql5.7安装和配置,Windows 安装多个Mysql
2021-03-19 10:33 612Windows 安装Mysql5.7,Windows ... -
SpringCloud Gateway使用和配置,SpringCloud Gateway predicates详细配置
2021-03-18 11:29 914SpringCloud Gateway使用和配置, Sp ... -
Windows RabbitMQ_3.8 安装和配置,Windows erlang下载
2021-03-16 17:17 771Windows RabbitMQ_3.8 安装和配置,Wi ... -
SpringCloud Hystrix dashboard2.2.7使用和配置,SpringCloud Hystrix dashboard服务监控
2021-03-15 18:53 745SpringCloud Hystrix dashboard ... -
SpringCloud Hystrix使用和配置,SpringCloud Hystrix服务熔断降级
2021-03-15 18:51 464SpringCloud Hystrix使用和配置,Sprin ... -
SpringCloud OpenFeign使用和配置,Java OpenFeign 使用教程
2021-03-11 09:36 493SpringCloud OpenFeign使用和配置,Jav ... -
Iframe自适应高度,Iframe高度问题解决
2021-03-11 09:34 487Iframe自适应高度,Iframe高度问题解决 ... -
Iframe自适应高度,Iframe高度问题解决
2021-03-11 09:33 1Iframe自适应高度,Iframe高度问题解决 = ... -
SpringCloud Ribbon实现负载均衡,SpringCloud Ribbon自定义策略
2021-03-09 09:47 539SpringCloud Ribbon实现负载均衡,Spri ... -
springCloud zookeeper整合,Java Zookeeper微服务整合
2021-03-08 10:32 519springCloud zookeeper整合,Java ... -
SpringCloud Eureka安装和使用,SpringCloud使用Eureka作为服务注册中心
2021-03-08 10:05 512SpringCloud Eureka安装和使用,Sp ... -
Linux 安装Consul,Linux yum安装consul
2021-03-05 15:04 674Linux 安装Consul,Linux yum安装con ... -
SpringCloud consul安装和使用,Windows Consul安装和使用,Java consul服务中心安装和使用
2021-03-05 14:58 396============================= ... -
哔哩哔哩视频下载,哔哩哔哩动画下载,blibli视频下载电脑
2021-02-26 11:38 595哔哩哔哩视频下载,哔哩哔哩动画下载,blibli视频下载电 ... -
elasticsearch kibana安装和配置
2021-02-20 17:19 612elasticsearch kibana安装和配置 ... -
elasticsearch安装和配置,elasticsearch启动报错:can not run elasticsearch as root
2021-02-20 17:17 617elasticsearch安装和配置 elasticsea ... -
Mybatis Map保存到数据库,Mybatis Map动态同步表,Mybatis Map Foreach插入数据库
2021-01-29 10:30 647Mybatis Map保存到数据库 ...
相关推荐
Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础...本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障碍
Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。...下面我们将逐一讲解这些新特性,通过下面的学习,读者将能够明晰了解 Servlet 3.0 的变化,并能够顺利使用它 进行日常的开发工作
1.6.2 注解处理 .........................................................................................................................................14 Servlet 接口 ...................... 15 2.1 ...
公司要求的,只用servlet和jsp,不能...servlet使用注解方式,另外一个servlet可以处理多个请求,方式和spring mvc类似。这点和网上其他人写的servlet处理多方法加一个method参数不一样。其它也不算难的技术,一看就懂
Spring注解驱动开发实战-servlet ServletContainerInitializer的使用 ServletContext注册三大组件 异步请求
5. JSP 2.3支持:Tomcat 8 支持最新的JSP 2.3规范,包括对新特性和改进的支持,如EL 3.0、标签文件的静态引入等。 6. HTTP/2支持:Tomcat 8 支持HTTP/2协议,可以提供更快的页面加载速度和更高的性能。 7. NIO2支持...
文件包括了:项目工程(关键部分注解详细),以及sql文件。功能:选中第一个下拉框,局部刷新第二个下拉框的值,且...主要使用了MySQL,jdbc,servlet,jsp,而异步是使用了原生的JS和XMLHttpRequest异步对象实现的。
1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 ...............................................
本教程为授权出品教程 《Spring注解驱动开发》是一套帮助我们深入了解Spring原理... 3).web原理 1).Servlet3.0标准新增特性 2).异步请求相关 本视频使用了maven构建程序,需要同学们有对Spring.SpringMVC的基本
Servlet3.0+异步方法处理 Spring MVC的测试 MockMVC MockHttpServlerRequest MockHttpServletResponse MockHttpSession SpringBoot基础 SpringBoot概述 什么是SpringBoot SpringBoot核心...
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...
十一、 2.0版本新特性 45 以Java 8 为基准 45 内嵌容器包结构调整 45 Servlet-specific 的server properties调整 45 Actuator 默认映射 46 Spring Loaded不再支持 46 支持Quartz Scheduler 46 OAuth 2.0 支持...
8.1.4 异常处理 247 8.2 Spring Data JPA 248 8.2.1 点睛Spring Data JPA 248 8.2.2 Spring Boot 的支持 258 8.2.3 实战 260 8.3 Spring Data REST 284 8.3.1 点睛Spring Data REST 284 8.3.2 Spring Boot 的支持 ...
该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 ...
2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...
2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持...
首先是常规的spring mvc环境搭建,不用多说,需要注意的是,这里需要引入jackson相关jar包,然后在spring配置文件“springmvc-servlet.xml”中添加json解析相关配置,我这里的完整代码如下: <?xml version=1.0 ...
8.1.4 异常处理 247 8.2 Spring Data JPA 248 8.2.1 点睛Spring Data JPA 248 8.2.2 Spring Boot 的支持 258 8.2.3 实战 260 8.3 Spring Data REST 284 8.3.1 点睛Spring Data REST 284 8.3.2 Spring Boot 的支持 ...