开发

软件开发相关知识

在JSP页面中使用Servlet启动多线程

在JSP页面中使用Servlet启动多线程,因为JSP页面本身就是一个单线程模型,并且在Servlet容器内部处理请求时已经有内置的多线程机制。如果需要在JSP页面中启动多线程,需要在Servlet中进行,然后将逻辑委托给JSP页面。

// Servlet.java
@WebServlet("/startThread")
public class Servlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        final HttpSession session = request.getSession();
        Runnable task = () -> {
            // 在这里执行你的任务
            session.setAttribute("taskResult", "Task completed");
        };
        Thread thread = new Thread(task);
        thread.start();
 
        // 可以选择将线程的引用放入session,以便在JSP页面中检查其状态
        session.setAttribute("myThread", thread);
 
        // 转发到JSP页面
        request.getRequestDispatcher("/WEB-INF/task.jsp").forward(request, response);
    }
}

JSP访问

<!-- task.jsp -->
<%
    Thread myThread = (Thread) session.getAttribute("myThread");
    if (myThread != null) {
        if (myThread.getState() == Thread.State.TERMINATED) {
            // 任务已完成
            out.println("Task is completed.");
        } else {
            // 任务正在进行中
            out.println("Task is running.");
        }
    }
%>