Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT客户端能否读取调用它的httpservletresponse?_Java_Servlets_Gwt_Cookies_Httpresponse - Fatal编程技术网

Java GWT客户端能否读取调用它的httpservletresponse?

Java GWT客户端能否读取调用它的httpservletresponse?,java,servlets,gwt,cookies,httpresponse,Java,Servlets,Gwt,Cookies,Httpresponse,我有一个Greasemonkey脚本,它从一个站点读取文件的内容,并通过HTTPPOST方法将其发送到GWT应用程序中的servlet。一旦内容在我的servlet中可用,我希望将文件内容传递给GWT客户端(即,使用文件内容触发打开应用程序) 为了触发应用程序,我在servlet代码中使用了以下内容: response.sendRedirect("/path/to/my/application"); 有没有办法读取GWT入口点类的onModuleLoad()中的文件内容?因为我正在将响应从se

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

为了触发应用程序,我在servlet代码中使用了以下内容:

response.sendRedirect("/path/to/my/application");
有没有办法读取GWT入口点类的onModuleLoad()中的文件内容?因为我正在将响应从servlet重定向到客户端,所以响应是否会包含从其他站点读取的字符串文件

我现在做的是,

  • 从站点读取文件并通过HTTP-POST将其发送到我的服务器

  • 在会话中存储字符串内容

  • 向客户端发送cookie,以指示服务器会话中有可读取的文件

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


我发现这种方法似乎有点迂回。有没有一种更简单的方法可以做到这一点,通过读取客户端的响应内容直接访问文件内容?

使用
计时器
,它将使用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:


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

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

创业任务
xxx.xxxxxx.server.StartupTasksServlet
0

可以找到其他信息

计时器正常。但是它会不会增加开销,因为它会持续在后台运行?此外,我还研究了是否有方法访问onModuleLoad部分中的HttpResponse对象(response.sendRedirect调用就是通过该对象进行的)?只需在获取内容后取消计时器。使用计时器没有开销,因为它就像在特定时间后调用的
JavaScript
函数。第二个选项呢?我的应用程序中没有使用JSP。看起来是个不错的主意。这是用来指定启动顺序的,对吗?我的查询类似于通过重定向访问内容的一种更简单的方法。这是用于指定在应用程序启动时要执行的操作。i、 e.在onModuleLoad()之前。它将在服务器启动时运行。如果应用程序在没有文件内容的情况下无法运行,您可以尝试使用它。
System.out.println(getElementById("myHiddenDiv").getInnerHTML());
...

public static final native Element getElementById(String id) /*-{
    return $wnd.document.getElementById(id);
}-*/;
<servlet>
    <servlet-name>startupTasks</servlet-name>
    <servlet-class>xxx.xxxxxx.server.StartupTasksServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>