HttpServlet与GWT应用程序客户端之间的通信
我有一个简单的GWT应用程序,它由一个FormPanel组成,其中包含一个FileUpload字段。此表单上的操作是将其发送到GWT.getModuleBaseURL()+“process”,web.xml反过来告诉GWT是FileProcessServlet FileProcessServlet是我创建的一个类,它扩展了HttpServlet并覆盖doPost(HttpServletRequest-req,HttpServletResponse-resp)来解析上传的文件,并使用Base64Utils将其转换为Base64字符串。现在,我想向客户端传递一个字符串,它是刚刚发送的文件的Base64编码 就我个人而言,我就是不知道该怎么做。上的GWT文档没有说明如何从FormPanel.submit()接收信息。没有与此类请求相关联的回调函数,GWT RPC就是这样。同时,我需要使用servlet,因为我想要解析一个文件,而这是客户端无法完成的。有什么建议吗 ~~~~ PS:一种选择是,我可以使用java.io的PrintWriter(如建议的那样)从servlet直接写入html页面。这可能会提供一种解决方案,其中我将Base64字符串存储在具有特殊ID的div中,然后使用DOM在客户端获取该内容。然而,我还没有得到PrintWriter与我合作。每当我使用它时,随着内容类型和字符编码的变化,我仍然看不到任何打印在页面上的内容。我目前正试图打印出以下内容:HttpServlet与GWT应用程序客户端之间的通信,gwt,servlets,Gwt,Servlets,我有一个简单的GWT应用程序,它由一个FormPanel组成,其中包含一个FileUpload字段。此表单上的操作是将其发送到GWT.getModuleBaseURL()+“process”,web.xml反过来告诉GWT是FileProcessServlet FileProcessServlet是我创建的一个类,它扩展了HttpServlet并覆盖doPost(HttpServletRequest-req,HttpServletResponse-resp)来解析上传的文件,并使用Base64U
String base64 = Base64Utils.toBase64(file);
resp.setContentType("text/html; charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
PrintWriter out = resp.getWriter();
out.print(base64);
out.flush(); out.close();
但是什么也没有出来。调试器已确认倒数第二行上的字符串base64既不是null也不是空的。在这方面的任何帮助也将不胜感激。尽管如此,我真诚地希望有更好的办法
form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
// When the form submission is successfully completed, this event is
// fired. Assuming the service returned a response of type text/html,
// we can get the result text here (see the FormPanel documentation for
// further explanation).
Window.alert(event.getResults());
}
});
无论您从servlet中写出什么,都将出现在event.getResults()中,在您的例子中是base64字符串
无论您从servlet中写出什么,都将出现在event.getResults()中,在您的例子中是base64字符串,我不能100%确定您的问题是在客户端还是服务器端 对于客户:
formPanel.setAction("/[urlMappingOfYourServlet]");
formPanel.setEncoding(FormPanel.[CORRECT_ENCODING]);
formPanel.setMethod(FormPanel.METHOD_POST);
并开始提交:
formPanel.submit()代码>
不要忘记web.xml中servlet的映射。例如:
<servlet>
<servlet-name>nameOfYourServlet</servlet-name>
<servlet-class>your.package.server.YourServletClass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>nameOfYourServlet</servlet-name>
<url-pattern>/urlMappingOfYourServlet</url-pattern>
</servlet-mapping>
您可以使用javax.servlet.ServletOutputStream
而不是PrintWriter
ServletOutputStream out = resp.getOutputStream();
out.write(base64);
out.flush();
另一种可能是在客户端使用RequestBuilder
:
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, "/urlMappingOfYourServlet");
requestBuilder.sendRequest(someData, new RequestCallback() {
@Override
public void onResponseReceived(Request request,
Response response) {
// ToDo: Get your String here
response.getText();
}
@Override
public void onError(Request request, Throwable exception) {
// ToDo
}
});
我不能100%确定您的问题是在客户端还是服务器端
对于客户:
formPanel.setAction("/[urlMappingOfYourServlet]");
formPanel.setEncoding(FormPanel.[CORRECT_ENCODING]);
formPanel.setMethod(FormPanel.METHOD_POST);
并开始提交:
formPanel.submit()代码>
不要忘记web.xml中servlet的映射。例如:
<servlet>
<servlet-name>nameOfYourServlet</servlet-name>
<servlet-class>your.package.server.YourServletClass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>nameOfYourServlet</servlet-name>
<url-pattern>/urlMappingOfYourServlet</url-pattern>
</servlet-mapping>
您可以使用javax.servlet.ServletOutputStream
而不是PrintWriter
ServletOutputStream out = resp.getOutputStream();
out.write(base64);
out.flush();
另一种可能是在客户端使用RequestBuilder
:
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, "/urlMappingOfYourServlet");
requestBuilder.sendRequest(someData, new RequestCallback() {
@Override
public void onResponseReceived(Request request,
Response response) {
// ToDo: Get your String here
response.getText();
}
@Override
public void onError(Request request, Throwable exception) {
// ToDo
}
});
你如何将servlet集成到你的页面中?我不确定我是否理解你的问题。你如何将servlet集成到你的页面中?我不确定我是否理解你的问题。完美!这正是我想要的。它就在FormPanel文档中!完美的这正是我想要的。它就在FormPanel文档中!