Использовать вложение для размещения контента в RemoteServiceServlet - PullRequest
0 голосов
/ 07 января 2012

У меня есть приложение, которое успешно получает входную строку от пользователя, обрабатывает ее на стороне сервера и отображает результат на веб-странице. Я реализовал его как RemoteServiceServlet, потому что таким образом я могу легко обрабатывать все гаджеты сайта.

Тем не менее, я решил вместо того, чтобы отображать результат на веб-странице, использовать возможности «вложения размещения содержимого», чтобы пользователь мог загрузить обработанную строку в текстовый файл.

Есть ли способ сделать это без изменения всего приложения с RemoteServiceServlet на HttpServlet?

Ниже моего кода. Спасибо миллион.

ProjectServiceImpl.java

public class ProjectServiceImpl extends RemoteServiceServlet implements ProjectService 
{
    public String project(String input) throws IllegalArgumentException 
    {
        String output = processString(input);
        // Below something I tried to do, but it does not work at all
        try {
            HttpServletResponse resp = getThreadLocalResponse();
        resp.reset();
        resp.setContentType("application/octet-stream");
        resp.setContentLength(10);
        resp.setHeader("Content-disposition", "attachment; filename=\"test.txt\"");
        ServletOutputStream op = resp.getOutputStream();
        op.write(convertToByteArray(output),0,10);
        op.flush();
        op.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return output;
    }
}

ProjectService.java

public interface ProjectService extends RemoteService {
    String project(String name) throws IllegalArgumentException;
}

ProjectServiceAsync.java

public interface ProjectServiceAsync {
    void project(String input, AsyncCallback<String> callback)
            throws IllegalArgumentException;
}

MyProject.java: Клиентская сторона

[...]
projectService.project(originalString, new AsyncCallback<String>() {
    [...]
    public void onSuccess(final String result) 
    {
        [...] // Or perhaps should I create here in client-side the txt file with "result"
    }
});

1 Ответ

1 голос
/ 07 января 2012

Вместо того, чтобы переходить на другой сервлет, рассмотрите возможность использования одного из них - XmlHttpRequest, который RPC использует в качестве транспорта, нельзя использовать для загрузки файла, но он все еще очень удобен для почти всех ваших запросов к серверу. XHR полезны только для связи с javascript на сервере и не могут использоваться для загрузки (или других вещей, таких как открытие новых окон с контентом).

Подумайте о создании другого сервлета, и чтобы вызов RPC возвращал строку, URL для этого другого сервлета (плюс, возможно, некоторые другие параметры, указывающие, что следует загрузить).

...