我的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一個空指針( )線。我環顧四周,每個人似乎都在向線索指出問題。現在語境更多一點點的將是每次該servlet在
doPost(request, response)
進入我分配在全局變量聲明,像這樣一個ThreadLocal變量
private static ThreadLocal<HttpServletResponse> response = new ThreadLocal<>();
,我爲它分配響應
Home.response.set(response);
在doPost()方法中。
我該如何去做getWriter()線程安全嗎?
我非常確定它有id,「registro」不爲null,因爲它在第1次嘗試時起作用,然後引發NullPointerException 2nd時間周圍。 – alexhg11