2013-10-30 30 views

回答

0

可以生成你爲你的服務器端BufferedImage的圖像,然後通過它與客戶端Remote Procedure Calls

您必須實現:

  • 服務器端

    1. ImageServiceImpl類在您的服務器端延伸RemoteServiceServlet。 該課程將會生成一張BufferedImage:
      File imagePath = new File(url); BufferedImage image = ImageIO.read(imagePath); 你會發送這個圖片到您的客戶端。
  • 客戶端

    1. 在你客戶端,你必須創建一個同步ImageService接口,它擴展RemoteService接口。

    2. 您還必須根據原始服務界面創建另一個客戶端界面異步界面(ImageServiceAsync)。正如在GWT項目

      描述異步方法調用的性質要求呼叫者可以異步調用完成時,被通知因爲根據定義,呼叫者不能被阻止,直到調用完成一個回調對象通過。出於同樣的原因,異步方法不具有返回類型;他們通常返回無效。如果您希望更多地控制未決請求的狀態,請返回Request。在進行異步調用之後,返回給調用者的所有通信都通過傳入的回調對象。

最後你的servlet添加到您的網頁。XML

<servlet> 
    <servlet-name>ImageServiceImpl</servlet-name> 
    <servlet-class> 
    com.example.image.server.ImageServiceImpl 
    </servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ImageServiceImpl</servlet-name> 
    <url-pattern>/com.example.image.Image/ImageService</url-pattern> 
</servlet-mapping> 

爲了從服務器發送圖像到你的客戶按照3個步驟:

  1. 實例化使用GWT.create服務接口()。

  2. 創建一個異步回調對象,以便在RPC完成時得到通知。

  3. 撥打電話。

這些都是遵循的通用規則,我建議這不是作爲問題的最終解決方案,而是作爲指導,以便了解RPC如何定義和工作。 RPC在開始時並不複雜,但只要您瞭解機制,就可以將各種數據從服務器傳遞到客戶端。

[編輯]

在圖片類型的情況下,具有記住,在GWT,HTML圖像經由在IMG元素SRC屬性加載。經由RPCT從服務器傳遞的圖像給客戶機不能直接進行,但通過使用一招:

  1. 有RPC調用在基地64.
  2. 返回到圖像的字符串中的onSuccess()方法,使用該結果String作爲參數setUrl()(其中 設置SRC屬性)。
+0

我知道如何做RPC,我只是認爲圖像類型不可serielizable,可以在那裏不通過RPC發送。無論如何,如果有可能我的問題解決了。謝謝。 – SirAndrew00

+0

我編輯了我的答案來回答你的問題。 – istovatis

1

你必須將圖像保存爲文件在「公​​共」位置,然後在客戶端生成圖像的URL。否則,您可以生成圖像作爲HttpServlet的servlet輸出。

您不能直接將圖像發送到客戶端。

0

我genearated我的形象的BufferedImage並將其轉變成ByteArrayOutputStream,並返回如下..

public void downloadImage(final HttpServletRequest req,final HttpServletResponse res) throws Exception { 
    File imagePathFile = new File(url); 
    if (imagePathFile.exists()) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    BufferedImage image = ImageIO.read(imagePathFile); 
    ImageIO.write(image, "jpg", baos); 
     StringBuffer sbFilename = new StringBuffer(); 
     sbFilename.append("Image_"); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 
     sbFilename.append(sdf.format(new Date())); 
     sbFilename.append(".jpg"); 

     StringBuffer sbContentDispValue = new StringBuffer(); 
     sbContentDispValue.append("inline"); 
     sbContentDispValue.append("; filename="); 
     sbContentDispValue.append(sbFilename); 

     res.setContentType("image/jpeg/jpg/png"); 
     res.addHeader("Cache-Control", "max-age=30"); 
     res.addHeader("Content-disposition", sbContentDispValue.toString()); 
     res.setContentLength(baos.size()); 
     ServletOutputStream os = res.getOutputStream(); 
     baos.writeTo(os); 
     os.flush(); 
     os.close(); 
} 
} 
相關問題