【问题标题】:Java Servlet Async SupportJava Servlet 异步支持
【发布时间】:2015-05-16 21:48:57
【问题描述】:

最近我开始研究 Java Servlet Async 功能。我编写了如下所示的示例代码来检查 aysnc 功能。我在单核处理器上运行它。我正在从 jsp 提交 100 个请求(图像请求)。我在代码中添加了“请求提交:::” SOP。它显示前 0 到 6 个请求的 SOP,然后在一段时间后显示 6 到 11 的 SOP....为什么它没有显示所有 100 个请求的 SOP。

package com.test;
import java.io.FileInputStream;
import java.io.IOException;

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;

@WebServlet(urlPatterns={"/Test"}, asyncSupported = true)
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;

public Test() {
    super();
}

int counter = 0;
@Override
protected void doGet(final HttpServletRequest request,
        final HttpServletResponse response) throws ServletException,
        IOException {
    System.out.println("Request Submmited:::" + counter++);
    final AsyncContext ctx = request.startAsync();
    ctx.start(new Runnable() {
        public void run() {
            try {
                String count = request.getParameter("test");
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                FileInputStream fin = new FileInputStream(
                        "D:/TESTImages/8_0_0_NUCLEI" + count + ".jpg");
                byte[] data = new byte[fin.available()];
                fin.read(data);
                response.getWriter().print(new String(data));
                response.flushBuffer();

            } catch (Exception e) {
                e.printStackTrace();
            }
            ctx.complete();
        }
    });
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
}

}

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    似乎默认线程池大小为 5,用于处理 servlet 容器中的异步请求的池。尝试提供如下初始化参数:

    @javax.servlet.annotation.WebServlet(urlPatterns={"/Test"}, asyncSupported = true, 
    initParams = { @WebInitParam(name = "threadpoolsize", value = "100") })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2011-05-05
      • 1970-01-01
      • 2012-06-03
      • 2018-01-20
      • 2022-01-19
      • 2015-11-04
      相关资源
      最近更新 更多