我正在创建一个将被POST请求访问的GWT应用程序,其中包含我关心的参数(用户ID等)。通过servlet访问GWT POST参数?
到目前为止,我所做的所有阅读都让我相信我应该创建一个servlet(我使用tomcat)来处理POST参数,然后转发到我的GWT应用程序。我已经得到了这个工作,但我仍然无法将这些数据传递给我的应用程序。我见过3种建议的方法:
- 将数据保存到上下文:我现在有这个工作,但我对此并不满意。当访问servlet时,我解析参数并更新我的GWT Web应用程序的上下文,然后转发到应用程序,在该应用程序中进行RPC调用以读取上下文。这就是我想要的,但是当多个用户试图访问同一个应用程序并且环境正在迅速变化时,这会造成竞争状态。
- 将数据存储在会话中:我已经尝试将数据保存到我的servlet中的请求会话中,然后访问我的RPC中的会话,但我总是得到一个新的/不同的会话,所以我假设我正在使用这个某处。在RPC上的servlet
HttpSession session = request.getSession(); session.setAttribute("test", "testValue"); response.sendRedirect(response.encodeRedirectURL("/GWT_Application"));
访问会话
保存会话
HttpSession session = this.getThreadLocalRequest().getSession();
session.getAttribute("test");
这将返回不同的会话,这会导致 “测试” 属性被空。
- 在URL中传递数据:我的应用程序将在iframe中打开,这意味着
Window.location.getParameter()
将不可用。
任何帮助将不胜感激!我仍然在学习GWT和Web开发,所以不要害怕在任何明显或愚蠢的错误中给我打电话。
谢谢!
SOLUTION
我想通了什么问题是我会的做法:在我以前是想保存会话数据的servlet是从我的GWT应用程序单独的Tomcat Web应用程序。将它们移动到相同的Web应用程序解决了我的问题,现在它可以工作。我不确定,但我猜测这是一个问题,因为重定向到另一个Web应用程序切换上下文。我将概述我的整个做法,希望这样可以节省别人一段时间后:
把你的GWT项目的服务器文件夹你的servlet代码:
package GWTApplication.server;
public class myServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
session.setAttribute("myAttribute", request.getParameter("myParam");
// handle rest of POST parameters
response.sendRedirect(response.encodeRedirectURL("/GWTApplication");
}
}
地图的servlet在您的GWT应用程序的网站。 XML:
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>GWTApplication.myServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
这个servlet现在应该是在访问.../GWTApplication/myServlet
下使STANDAR RPC。在任何你会要求在ServiceImpl
类的服务器上:
HttpSession session = this.getThreadLocalRequest().getSession();
return session.getAttribute("myAttribute");
最后,请在你的onModuleLoad()
方法GWT应用程序的RPC调用。作为回顾:
- 将原始POST请求的servlet
- 保存POST参数,会话变量
- 重定向到
- 制作RPC调用
onModuleLoad()
- 读取会话变量
ServiceImpl
GWT应用程序class
不太确定我是否理解这里的问题。你能详细说明流程吗? – mithrandir
有一个现有的应用程序(Sakai - 一个学习管理系统),它向我的GWT应用程序发出一个POST请求,并将其显示在现有应用程序的iFrame中。我基本上只是试图找到获取POST参数到我的GWT应用程序的最佳方式。这有帮助吗? – quickity