【发布时间】:2014-02-20 16:17:33
【问题描述】:
我的 servlet 上有一个 ajax 方法,可以同时为同一个用户运行。抱歉,如果我用错误的词来描述问题,但到目前为止我是这样理解的(对线程了解不多)。
方法如下
private void ajaxPartidas() throws ServletException, IOException {
//Variables necesarias
DataSource pool = (DataSource) session.get().getAttribute("pool");
Recibo registro = null;
int id = -1;
try{ id = Integer.parseInt(request.get().getParameter("id"));}catch(NumberFormatException e){}
if(id > 0){
registro = new Recibo(id);
if(!registro.obtener(pool))
registro = null;
registro.setPartidas(Partida.obtenerRegistros(pool, registro.getId()));
}
response.get().setContentType("application/json");
response.get().setHeader("Content-Type", "application/json; charset=utf-8");
response.get().getWriter().print((new Gson()).toJson(registro.getPartidas()));
}
这个方法是通过 ajax 调用的,它在第一次被调用时工作正常,但第二次(在相同的 id 上)它在 getWriter() 行上返回一个 NullPointer。我环顾四周,每个人似乎都将问题归咎于线程。现在更多的上下文将是每次 servlet 进入
doPost(request, response)
我在全局变量中分配了一个这样声明的线程局部变量
private static ThreadLocal<HttpServletResponse> response = new ThreadLocal<>();
我给它分配响应
Home.response.set(response);
在 doPost() 方法中。
如何让 getWriter() 线程安全?
【问题讨论】:
标签: java ajax multithreading servlets