Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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
HttpServlet与GWT应用程序客户端之间的通信_Gwt_Servlets - Fatal编程技术网

HttpServlet与GWT应用程序客户端之间的通信

HttpServlet与GWT应用程序客户端之间的通信,gwt,servlets,Gwt,Servlets,我有一个简单的GWT应用程序,它由一个FormPanel组成,其中包含一个FileUpload字段。此表单上的操作是将其发送到GWT.getModuleBaseURL()+“process”,web.xml反过来告诉GWT是FileProcessServlet FileProcessServlet是我创建的一个类,它扩展了HttpServlet并覆盖doPost(HttpServletRequest-req,HttpServletResponse-resp)来解析上传的文件,并使用Base64U

我有一个简单的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与我合作。每当我使用它时,随着内容类型和字符编码的变化,我仍然看不到任何打印在页面上的内容。我目前正试图打印出以下内容:

        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文档中!