java servlet异步_厉害了,Servlet3的异步处理机制

Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下。

主要增加了以下特性:

1、异步处理支持

2、可插性支持

3、注解支持,零配置,可不用配置web.xml

...

异步处理是什么鬼?

直接操起键盘干。

@WebServlet(name = "index", urlPatterns = { "/" }, asyncSupported = true)

public class IndexServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

resp.setContentType("text/html");

try {

PrintWriter out = resp.getWriter();

out.println("servlet started.
");

out.flush();

AsyncContext asyncContext = req.startAsync();

asyncContext.addListener(getListener());

asyncContext.start(new IndexThread(asyncContext));

out.println("servlet end.
");

out.flush();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 异步线程结果监听

* @author javastack

* @return

*/

private AsyncListener getListener() {

return new AsyncListener() {

public void onComplete(AsyncEvent asyncEvent) throws IOException {

asyncEvent.getSuppliedResponse().getWriter().close();

System.out.println("thread completed.");

}

public void onError(AsyncEvent asyncEvent) throws IOException {

System.out.println("thread error.");

}

public void onStartAsync(AsyncEvent asyncEvent) throws IOException {

System.out.println("thread started.");

}

public void onTimeout(AsyncEvent asyncEvent) throws IOException {

System.out.println("thread timeout.");

}

};

}

}

public class IndexThread implements Runnable {

private AsyncContext asyncContext;

public IndexThread(AsyncContext asyncContext) {

this.asyncContext = asyncContext;

}

public void run() {

try {

Thread.sleep(5000);

PrintWriter out = asyncContext.getResponse().getWriter();

out.println("hello servlet3.
");

out.flush();

asyncContext.complete();

} catch (Exception e) {

e.printStackTrace();

}

}

}

访问localhost:8080/test

页面首先输出

servlet started.

servlet end.

过了5秒后再输出

hello servlet3.

可以看出servlet立马返回了,但没有关闭响应流,只是把response响应传给了线程,线程再继续输出,我们可以将比较费资源消耗时间的程序放到异步去做,这样很大程序上节省了servlet资源。

Springmvc3.2开始也加入了servlet3异步处理这个特性,有兴趣的同学可以去研究下。

从上面的servlet注解也可以看出来,servlet3完全解放了web.xml配置,通过注解可以完全代替web.xml配置。

推荐去我的博客:

觉得不错,别忘了点赞+转发哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列...

WordPress后台默认是不显示文章、分类等信息ID的&#xff0c;查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现&#xff1a; <?php /** *为WordPress后台的文章、分类等显示ID From wpdaxue.com …

进程调试--进程启动VS自动附加

程序启动VS自动附加到进程调试 1、 打开注册表regedit 2、 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image file execution options 3、 新建QQ.exe【需要调试的进程名】 4、 右键修改字符串值 5、 F2修改新生成的默认值----debugger 6、右键debugger…

[转]20年来我得到的20条编程经验

1、解决问题时估算你所需要的时间。Cmon,admit it! 我曾见过一些程序员为了解决一个特殊的问题而连续坐在显示器前面8小时&#xff0c;我会像下一个会成为这样的程序员一样感到内疚。为自己定一个时间表吧&#xff0c;每1小时&#xff0c;30分钟&#xff0c;甚至15分钟。如果在…

Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1->2->3->4->5->NULL and k 2,return 4->5->1->2->3->NULL. 注意下k>size的情况&#xff0c;即倒数的k%size个。 代码&#xff1a; c…

C#4.0和VS2010新特性(三)

VS2010之所以那么强大&#xff0c;究其原因是其背后有着强大的C#4.0作为后台支撑。和以往的所有版本相比&#xff0c;C#4.0的动态性大大增强——dynamic就是一个非常明显的例子&#xff1a;&#xff08;一&#xff09;dynamic初探&#xff1a; 以前因为某些特殊原因&#xff0c…

java spark环境配置文件_JAVA, SCALA, HADOOP, SPARK里的JAVA_HOME和环境变量设置

/etc/profile里添加的内容&#xff1a;export JAVA_HOME/jdkexport HADOOP_HOME/hadoopexport SCALA_HOME/scalaexport SPARK_HOME/sparkexport PATH$PATH:$JAVA_HOME/binexport PATH$PATH:$SPARK_HOME/binexport PATH$PATH:$HADOOP_HOME/binexport PATH$PATH:$SCALA_HOME/bine…

#20175201 实验五 网络编程与安全

一、实验五 网络编程与安全-1 1.实验要求&#xff1a; 两人一组结对编程&#xff1a; &#xff08;1&#xff09;参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA &#xff1b; &#xff08;2&#xff09;结对实现中缀表达式转后缀表达式的功能 MyBC.java&#xff1b…

轻轻松松,一键获取3000个外链

轻轻松松&#xff0c;一键获取3000个外链 http://report.loganrockmarketing.com/backlinker/idx.html 打开以上网址&#xff1a; 在方框里输入你要推广的网址&#xff08;不要加前面的http://) 然后点击start/continue backlinking按钮 接下来&#xff0c;坐享其成吧。转载于:…

Scala学习思维导图

转载于:https://blog.51cto.com/thunderkeg/1605365

使用git上传代码到github远程仓库

一、新建代码库注册好github登录后&#xff0c;首先先在网页上新建代码库。 点击右上角“&#xff0b;”→New repository 进入如下页面&#xff1a;按照要求填写完成后&#xff0c;点击按钮创建代码库创建成功。 接下来我们查看一下刚刚创建好的代码库&#xff0c;点击右上角的…

java web开发myeclipse_【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)...

首先&#xff0c;在开始搭建MyEclipse的开发环境之前&#xff0c;还有三步工具的安装需要完成&#xff0c;只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建。1、安装工具第一步&#xff0c;下载并安装JDK&#xff0c;到官网上下载安装即可&#xff0c;之后需…

对于大型公司项目平台选择j2ee的几层认识

对于大型公司项目平台选择j2ee的几层认识&#xff08;一&#xff09; 对于大型公司项目平台选择j2ee的几层认识&#xff08;二&#xff09; 对于大型公司项目平台选择j2ee的几层认识(三) 对于大型公司项目平台选择j2ee的几层认识(四)转载于:https://www.cnblogs.com/Wolves/arc…

当前项目规划

3.2、当前项目规划 完成项目最基本的用户权限管理&#xff0c;即添加用户&#xff0c;添加角色&#xff0c;用户登录后根据权限的不同获取不同的菜单。转载于:https://www.cnblogs.com/seem111111/p/10945125.html

java 常量池 和 堆 的关系_Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)...

博客分类&#xff1a; Java综合一&#xff1a;在JAVA中&#xff0c;有六个不同的地方可以存储数据&#xff1a;1. 寄存器(register)。 这是最快的存储区&#xff0c;因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限&#xff0c;所以寄存器由编译器根…

仿淘宝首页图片切换

资料来源:http://www.cnblogs.com/cloudgamer/archive/2008/07/06/SlideTrans.html?page2#pagedcomment 效果展示: 测试环境:IE8 (待续) 程序代码&#xff1a; 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR…

docker高级应用之动态扩展容器空间大小

docker容器默认的空间是10G,如果想指定默认容器的大小&#xff08;在启动容器的时候指定&#xff09;&#xff0c;可以在docker配置文件里通过dm.basesize参数指定&#xff0c;比如docker -d --storage-opt dm.basesize20G是指定默认的大小为20G&#xff0c;具体参数可以参考ht…

关于ICallbackEventHandler的疑问

近日&#xff0c;由于需要&#xff0c;我写了一个webcontrol,并在实现了ICallbackEventHandler,目的是根据传进来的参数进行逻辑处理&#xff0c;然后返回值。我下面的例子目的是从1到5调用异步函数&#xff0c;然后在回调函数将1到5这几个数值相加。但是&#xff0c;由于调用异…

NIO学习--缓冲区

Buffer其实就是是一个容器对象&#xff0c;它包含一些要写入或者刚读出的数据。在NIO中加入Buffer对象&#xff0c;体现了新库与原I/O的一个重要区别。在面向流的I/O中&#xff0c;您将数据直接写入或者将数据直接读到Stream对象中。在NIO库中&#xff0c;所有数据都是用缓冲区…

二分图匹配之匈牙利算法

二分图的基本概念&#xff1a; 二分图又称作二部图&#xff0c;是图论中的一种特殊模型。 设G(V,E)是一个无向图&#xff0c;如果顶点V可分割为两个互不相交的子集(A,B)&#xff0c;并且图中的每条边(i&#xff0c;j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j …

使用javascript打开模态对话框

1. 标准的方法 <script type"text/javascript"> function openWin(src, width, height, showScroll){ window.showModalDialog (src,"","location:No;status:No;help:No;dialogWidth:"width";dialogHeight:"height";sc…