2011-10-07 64 views
0

我使用以下Servlet來映射文件系統文件夾中的圖像。在Tomcat中,GWT無法從文件系統加載圖形

public class ImageServlet extends HttpServlet { 

    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException { 

     // Get the base path for graphics root folder 
     String basePath = System.getenv(Constants.ENV_VAR); 

     String specifier = req.getParameter(Constants.PARAMETER); 


     resp.setContentType(Constants.CONTENT_TYPE); 

     File file = new File(basePath+specifier+"."+Constants.IMG_TYPE); 
     resp.setContentLength((int)file.length()); 

     FileInputStream in = new FileInputStream(file); 
     OutputStream out = resp.getOutputStream(); 

     // Copy the contents of the file to the output stream 
     byte[] buf = new byte[Constants.INPUT_BUFFER_SIZE]; 
     int count = 0; 
     while ((count = in.read(buf)) >= 0) { 
      out.write(buf, 0, count); 
     } 
     in.close(); 
     out.close(); 
    } 
} 

然後,我使用GWT-RPC得到的圖像,通過使用以下AppServiceImpl類:

public class AppServiceImpl extends RemoteServiceServlet implements AppService { 

    //Get the base path for graphics root folder 
    String basePath = System.getenv(Constants.ENV_VAR); 

    @Override 
    public ArrayList<String> getImageFiles(String folder) { 
     ArrayList<String> list = new ArrayList<String>(); 
     File parent = new File(**basePath+folder**); 
     if (!parent.isDirectory()) { 
      return list; 
     } 
     File[] files = parent.listFiles(); 
     for (int i = 0; i < files.length; i++) { 
      if (files[i].isFile() && !files[i].isHidden()) { 
       // save image title 
       list.add(files[i].getName().substring(0, files[i].getName().indexOf("."))); 
      } 
     } 
     return list; 
    } 
... 

爲了得到在GWT代碼的圖像,我使用:最終圖像lgImg =新圖像(Constants.URL_PREFIX + imgPath);

其中:

  • URL_PREFIX = 「HTTP://本地主機:8888 /圖像」 +參數+ 「=」

  • ENV_VAR = 「APP_GFX_HOME」

  • 參數= 「路徑」

在開發模式下,所有的工作很好,但是當我部署到tomcat服務器,圖像不會出現,我需要一些幫助來找出問題。

P.S:這裏是web.xml文件的一部分

<!-- Services --> 
    <servlet> 
     <servlet-name>theImageServlet</servlet-name> 
     <servlet-class>com.app.server.ImageServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>theImageServlet</servlet-name> 
     <url-pattern>/images</url-pattern> 
    </servlet-mapping> 

    <servlet> 
     <servlet-name>appService</servlet-name> 
     <servlet-class>com.app.server.AppServiceImpl</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>appService</servlet-name> 
     <url-pattern>/app/services</url-pattern> 
    </servlet-mapping> 

回答

0

我不會硬編碼的URL,因爲上下文部分不存在於開發者模式。 只需使用:

String url = GWT.getModuleBaseURL() + "images?"; 

我用這種類似的情況,從報告的servlet下載Excel文件,並在所有情況下正常工作。

+0

我將URL_PREFIX常量更改爲** String URL_PREFIX = GWT.getModuleBaseURL()+「images?」 + PARAMETER +「=」; **,但我仍然沒有得到圖像。雖然tomcat中的servlet可以正確獲取環境變量嗎? –

相關問題