GWT客户端可以读取调用它的httpservlet响应吗?

时间:2014-04-10 13:34:50

标签: java servlets gwt cookies httpresponse

我有一个Greasemonkey脚本,它从一个站点读取文件的内容,并通过HTTP POST方法将其发送到我的GWT应用程序中的servlet。一旦内容在我的servlet中可用,我想将文件内容传递给GWT客户端(即触发器打开带有文件内容的应用程序)。

为了触发应用程序,我在我的servlet代码中使用它:

response.sendRedirect("/path/to/my/application");

有没有办法读取我的GWT入口点类的onModuleLoad()中的文件内容?因为我将响应从servlet重定向到客户端,所以响应是否包含从其他站点读取的字符串文件?

目前我所做的是,

  • 从网站上读取文件并通过HTTP-POST发送到我的服务器。

  • 将String内容存储在会话

  • 向客户端发送cookie以指示服务器会话中的文件是否可用

  • 客户端在读取cookie时,向服务器发送请求以获取该文件。

我发现这种方法似乎有点过分。有没有更简单的方法,通过阅读客户端的响应内容直接访问文件内容?

2 个答案:

答案 0 :(得分:0)

使用Timer,它将使用GWT RPC调用持续查看用户会话。如果在会话中找到文件内容,则只需将内容发送到客户端。

将以下代码放入入口点类。

    Timer timer = new com.google.gwt.user.client.Timer() {

        @Override
        public void run() {
             //GWT RPC call to check the user session
             // if you want then cancel the timer
             //timer.cancel();
        }

    };
    timer.scheduleRepeating(5000); // 5 seconds

或者你也可以试试这个

如果/path/to/my/application重定向到JSP文件,那么您可以在JSP文件中读取会话属性。

服务器端:

session.setAttribute("keyname",fileContent);

JSP:

<div id="myHiddenDiv" style="visibility: hidden;"><%=session.getAttribute("keyname")%></div>

切入点:

System.out.println(getElementById("myHiddenDiv").getInnerHTML());
...

public static final native Element getElementById(String id) /*-{
    return $wnd.document.getElementById(id);
}-*/;

答案 1 :(得分:0)

您可能希望在load-on-startup文件中使用web.xml,然后覆盖servlet中的init()方法以执行所需的任务。

<servlet>
    <servlet-name>startupTasks</servlet-name>
    <servlet-class>xxx.xxxxxx.server.StartupTasksServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>

可以找到其他信息here