GWT не может загружать графику из файловой системы в Tomcat - PullRequest
0 голосов
/ 08 октября 2011

Я использую следующий сервлет для отображения изображений из папки файловой системы.

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, я использую: final Image lgImg = new Image (Constants.URL_PREFIX + imgPath);

где:

  • URL_PREFIX = "http://localhost:8888/images?" + PARAMETER +" = "

  • ENV_VAR =" APP_GFX_HOME "

  • PARAMETER = "путь"

В режиме разработки все работает хорошо, но при развертывании на Tomcatсервер, изображения не появляются, и мне нужна помощь, чтобы выяснить проблему.

ps: Вот часть файла 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>

1 Ответ

0 голосов
/ 08 октября 2011

Я бы не стал жестко кодировать URL, потому что контекстная часть отсутствует в режиме разработки.Просто используйте:

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

Я использую это в аналогичной ситуации для загрузки файлов Excel из сервлета отчетов, и он отлично работает во всех ситуациях.

...