Servlet的service方法阻塞疑问

Y292450104 发布于 2016/01/05 16:10
阅读 378
收藏 0
package com.my.framework.servlet;


import java.io.IOException;


import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;


import com.my.framework.init.InitFactory;
import com.my.test.controller.UserController;


/**
 * servlet
 * @author ynj
 *
 */
public class DispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
System.out.println("DispatcherServlet.init()");
//InitFactory.init();
}

@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
//FrameworkContextUtils.put(request, response);
doService(request, response);
//FrameworkContextUtils.remove();
}

protected void doService(ServletRequest request, ServletResponse response) throws IOException {
System.out.println("DispatcherServlet service");
HttpServletRequest httpServletRequest = (HttpServletRequest)request; //FrameworkContext.getReqeust();

try {

// 本应当两个线程同时执行到这个地方等待,现出现一个线程结束后另个一线程

//才会开始service方法(同时输入两个完全的链接时)

Thread.sleep(5000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(httpServletRequest.getRequestURI());
System.out.println(httpServletRequest.getMethod());

}

}


当同时输入两个相同的链接是。第二个的打印会等到第一个service方法执行结束后才会。

而当链接不同时则不会阻塞。。



加载中
0
k
kuraishi
試著用同時用兩種不同的browser(e.g.,  firefox, chrome) 去測試。
0
Y
Y292450104

引用来自“kuraishi”的评论

試著用同時用兩種不同的browser(e.g.,  firefox, chrome) 去測試。
恩,使用两种不同的浏览器时不会阻塞,可能是服务器判断是同一个session中的同一个url做多次请求时服务器会使用同步的方式去执行。
Y
Y292450104
其实是浏览器做的限制!!!
0
你是错的我恒对
你是错的我恒对
servlet规范及并发多线程基础会帮助你
0
zhaoyou
zhaoyou
http://stackoverflow.com/questions/8011138/servlet-seems-to-handle-multiple-concurrent-requests-synchronously/
返回顶部
顶部