我有一个Greasemonkey脚本,它从一个站点读取文件的内容,并通过HTTP POST方法将其发送到我的GWT应用程序中的servlet。一旦内容在我的servlet中可用,我想将文件内容传递给GWT客户端(即触发器打开带有文件内容的应用程序)。
为了触发应用程序,我在我的servlet代码中使用它:
response.sendRedirect("/path/to/my/application");
有没有办法读取我的GWT入口点类的onModuleLoad()中的文件内容?因为我将响应从servlet重定向到客户端,所以响应是否包含从其他站点读取的字符串文件?
目前我所做的是,
从网站上读取文件并通过HTTP-POST发送到我的服务器。
将String内容存储在会话
向客户端发送cookie以指示服务器会话中的文件是否可用
客户端在读取cookie时,向服务器发送请求以获取该文件。
我发现这种方法似乎有点过分。有没有更简单的方法,通过阅读客户端的响应内容直接访问文件内容?
答案 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