Get和Post方式 对于多个请求的阻塞方式的探讨
最近测试多线程编程,发现一个特别奇怪的地方。
先看一段简单的代码,用的jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
System.out.println("进入");
Thread.sleep(1000000);
%>
首先直接在浏览器输入该jsp页面的地址,即Get方式访问,并打开多个浏览器页多个请求:第一个请求输出“进入”
第二个请求什么都没有,浏览器直接被阻塞住(根本就没有进入)
(换成ajax的get方式同样)
然后换成使用ajax的post方式:第一个请求输出“进入”
第二个请求输出“进入”
....
然后添加一个request监听器来做测试:
@WebListener
public class RequestListener implements ServletRequestListener{
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("进入请求,线程:"+Thread.currentThread().getName());
}
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("结束请求,线程:"+Thread.currentThread().getName());
}
}
预料之中的结果:第二个get请求根本没有进入!最后得出结论:GET方式,对于同一url的页面访问,第一个请求线程被阻塞,后面所有线程直接阻塞,直到第一个get请求完成得到response
POST方式,多个请求线程间互不干扰。
这是tomcat的原因还是get和post协议本质上的不同点?------解决思路----------------------