GWT在Tomcat中时无法从文件系统加载图形

GWT在Tomcat中时无法从文件系统加载图形,gwt,tomcat,servlets,gwt2,Gwt,Tomcat,Servlets,Gwt2,我使用以下Servlet映射文件系统文件夹中的图像 public class ImageServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { // Get the base path for graphics root folder String basePat

我使用以下Servlet映射文件系统文件夹中的图像

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();
    }
}
然后,通过使用以下AppServiceImpl类,我使用GWT-RPC获取图像:

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;
    }
...
公共类AppServiceImpl扩展RemoteServiceServlet实现AppService{
//获取图形根文件夹的基本路径
字符串basePath=System.getenv(Constants.ENV_VAR);
@凌驾
公共ArrayList getImageFiles(字符串文件夹){
ArrayList=新建ArrayList();
文件父项=新文件(**basePath+文件夹**);
如果(!parent.isDirectory()){
退货清单;
}
File[]files=parent.listFiles();
对于(int i=0;i
为了在GWT代码中获取图像,我使用:final image lgImg=new image(Constants.URL\u PREFIX+imgPath);

其中:

  • URL\u前缀=”http://localhost:8888/images?“+参数+”=“

  • ENV\u VAR=“APP\u GFX\u HOME”

  • PARAMETER=“path”

在开发模式下,所有这些都可以正常工作,但是当我部署到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>

theImageServlet
com.app.server.ImageServlet
theImageServlet
/图像
应用服务
com.app.server.AppServiceImpl
应用服务
/应用程序/服务

我不会硬编码URL,因为上下文部分在开发模式下不存在。 只需使用:

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

我在类似的情况下使用它从报表servlet下载Excel文件,它在所有情况下都可以正常工作。

我将URL_PREFIX常量更改为String URL_PREFIX=GWT.getModuleBaseURL()+“images?”+参数+“=”;但我仍然无法获取图像。虽然tomcat中的servlet能够正确获取环境变量吗?