如何使用GWT读取远程文件

时间:2010-03-27 16:14:01

标签: java gwt

我需要读取位于服务器上的文件,但我发现在GWT中不可能使用一些java库。 我该怎么做?

3 个答案:

答案 0 :(得分:3)

尝试 requestBuilder !!这段代码可以帮忙吗?

        RequestBuilder requestBuilder = new RequestBuilder( RequestBuilder.GET, "yourfile.txt" );
        try {
            requestBuilder.sendRequest( null, new RequestCallback(){
                public void onError(Request request, Throwable exception) {
                    GWT.log( "failed file reading", exception );
                }

                public void onResponseReceived(Request request, Response response) {
                    String result=response.getText();

                }} );
        } catch (RequestException e) {
            GWT.log( "failed file reading", e );
        }

答案 1 :(得分:1)

规则:JavaScript无法从没有与运行JavaScript的页面匹配的主机名和端口的URL中读取数据。

换句话说:如果它位于不同的站点上 - 你不能直接用JS读取它,因此不能直接用GWT读取它,它只是编译后的Javascript。

它适用于来自XMLHttpRequest,框架以及您需要注意的任何其他内容的数据。

This may change in the future, but for now the rule stands.

考虑到这一点,有几个解决方法。

1)使用RPC或任何机制调用服务器,让服务器执行请求,然后将其发送回客户端。 Here is a sample

2)There are several hacks on allowing JavaScript to access cross-domain sites just do a google search on how to get this. Some browsers will flag this as being dangerous.

3)如果你只使用Firefox和Firefox,看起来Firefox有能力这样做,但你需要手动启用它。

答案 2 :(得分:0)

首先只需编写一个servlet,将位于服务器上的文件发送给用户。

然后,当用户点击某个按钮时,您可以使用正确的参数调用该servlet。

以下是我们的servlet实现的摘录

            response.reset();

            response.setContentType("application/octet-stream");
            response.setContentLength(contentLength);
            response.setHeader("Content-disposition", "attachment;
filename=\"" + filename + "\"");
            output = new
BufferedOutputStream(response.getOutputStream());
            int data = input.read();
            while (data != -1)
            {
                output.write(data);
                data = input.read();
            }
            output.flush();