2014-01-13 49 views
0

我從客戶端應用程序接收doPost方法中的圖像。我不應該將此圖像存儲在任何文件夾路徑中,因此我使用以下代碼將此圖像作爲數據字節存儲在會話屬性中。Servlet:doGet not returns

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    String fileName = null; 
    fileName = request.getParameter("filename"); 
    System.out.println("filename: " + fileName); 

    DataInputStream din = new DataInputStream(request.getInputStream()); 
    byte[] data = new byte[0]; 
    byte[] buffer = new byte[512]; 
    int bytesRead; 
    while ((bytesRead = din.read(buffer)) > 0) { 
    // construct an array large enough to hold the data we currently have 
    byte[] newData = new byte[data.length + bytesRead]; 
    // copy data that was previously read into newData 
    System.arraycopy(data, 0, newData, 0, data.length); 
    // append new data from buffer into newData 
    System.arraycopy(buffer, 0, newData, data.length, bytesRead); 
    // set data equal to newData in prep for next block of data 
    data = newData; 
    }  

    request.getSession().setAttribute("imageData", data); 
} 

我想從doGet方法獲取它後收到它。所以,我想用下面的doGet代碼來檢索它。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    byte[] data = (byte[]) request.getSession().getAttribute("imageData"); 
    int len = data.length; 
    byte[] imageData = new byte[len]; 

    for(int i=0; i < len; i++) { 
     imageData[i] = data[i]; 
    } 
    response.setContentType("image/jpg"); 
    response.getOutputStream().write(imageData); 
    response.getOutputStream().flush(); 
    response.getOutputStream().close(); 
} 

但是,它不會在doGet中返回這個圖像,當我在一段時間後從另一個客戶端調用這個servlet時。

有人請告訴我,我在做什麼錯在這裏沒有得到圖像在doGet?

回答

1

我不應該來此圖像存儲在任意文件夾的路徑,所以我用下面的代碼到該圖像存儲在數據字節會話屬性

...

但是,它不是在返回的doGet這一形象,當我經過一段時間後,從的其他客戶端調用這個servlet。

會話屬性恰好與一個客戶相關聯,因此一個客戶端無法獲取會話從其他客戶屬性

您可以將圖像存儲在servlet上下文,如:

ServletContext context = request.getSession().getServletContext(); 
context.setAttribute("imageData", data); 

稍後,您可以從servlet上下文中讀取屬性。或者,另一種可能性是將圖像存儲在靜態變量中。

但是,圖像將被存儲,儘管它在內存中。也許一些Servlet容器也將Servlet上下文屬性存儲在硬盤上。

+0

你能舉一個例子嗎請 – Stella

+0

我的要求是,每個客戶端都應該發送特定的圖片,並不是所有的客戶端都會收到相同的圖片。 – Stella

+0

我不明白你的要求是什麼。你知道servlet規範的[範圍](http://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html)嗎? – Uooo