如何在GWT中为RPC和上载文件使用相同的servlet。

如何在GWT中为RPC和上载文件使用相同的servlet。,gwt,servlets,gwt-rpc,gwt2,formpanel,Gwt,Servlets,Gwt Rpc,Gwt2,Formpanel,我创建了一个必须使用fileUpload的web应用程序 我必须将文件及其属性发送到服务器。对于发送文件,我使用FormPanel,对于属性,我使用RPC public void onModuleLoad() { final FileServiceEndPoint serviceEndPoint = new FileServiceEndPoint(); new AddDocument(); Button b = new Button("addDocument");

我创建了一个必须使用fileUpload的web应用程序

我必须将文件及其属性发送到服务器。对于发送文件,我使用FormPanel,对于属性,我使用RPC

public void onModuleLoad() {
    final FileServiceEndPoint serviceEndPoint = new FileServiceEndPoint();
    new AddDocument();
    Button b = new Button("addDocument");
    b.addClickHandler(new ClickHandler() {
        private Map<String, String> docProperty;
        public void onClick(ClickEvent event) {
            docProperty =getProperties();
            AsyncCallback<String> callback = new AsyncCallback<String>() {
                public void onSuccess(String result) {
                    System.out.println("he ha" +result);
                }
                public void onFailure(Throwable caught) {

                }
            };
            serviceEndPoint.uploadAttachement(docProperty, callback);
        }
    });
    RootPanel.get().add(b);
}
为发送属性创建接口

端点:

在服务器上:

当我调试formPanel.submit时:调试器进入服务器并打印ServletWorking Fine这是完美的

当我调试addProperties按钮时,它会转到服务器并打印ServletWorking。但不应采用服务方式。 调试器应该进入UploadAttachement


请告诉我如何使用同一个servlet传递hashMap。

愚蠢的问题是:为什么要使用同一个servlet?@ThomasBroyer:因为我想将hashMap中文档的属性发送到服务器。使用formPanel,我将发送文件并检索内容和mimeType。通过RPC,我将获得属性,这样我可以**组合属性、内容、mimeType**并将其发送到外部存储库。但无论如何,您将执行两个单独的请求,因此使用一个servlet和两个不同的servlet不会有太大的改变。在任何情况下,您都必须将数据/文件存储在服务器上,等待第二个请求完成信息,这样您就可以将两者结合起来,并将它们发送到外部回购。不过,在FormPanel中发送所有内容可能更简单,只需一次request@ThomasBroyer:使用FormPanel只能将小部件发送到服务器。如何通过FormPanel发送hashMap。??将其序列化为JSON或其他格式,并使用隐藏小部件;或者每个键值对使用一个隐藏小部件这是一个映射,所以很容易回答问题,但是:为什么要使用相同的servlet?@ThomasBroyer:因为我想将Hashmap中文档的属性发送到服务器。使用formPanel,我将发送文件并检索内容和mimeType。通过RPC,我将获得属性,这样我可以**组合属性、内容、mimeType**并将其发送到外部存储库。但无论如何,您将执行两个单独的请求,因此使用一个servlet和两个不同的servlet不会有太大的改变。在任何情况下,您都必须将数据/文件存储在服务器上,等待第二个请求完成信息,这样您就可以将两者结合起来,并将它们发送到外部回购。不过,在FormPanel中发送所有内容可能更简单,只需一次request@ThomasBroyer:使用FormPanel只能将小部件发送到服务器。如何通过FormPanel发送hashMap。??将其序列化为JSON或其他格式,并使用隐藏小部件;或者每个键值对使用一个隐藏的小部件,这是一个映射,所以很容易
private FormPanel getFormPanel() {
        if (uploadForm == null) {
            uploadForm = new FormPanel();
            uploadForm.setAction(GWT.getHostPageBaseURL() +"TestUploadFileServlet");
            uploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
            uploadForm.setMethod(FormPanel.METHOD_POST);
            uploadForm.setWidget(getFileUpload());

            System.out.println(GWT.getHostPageBaseURL() +"TestUploadFileServlet");

            uploadForm.addFormHandler(new FormHandler() {

                public void onSubmitComplete(FormSubmitCompleteEvent event) {
                    AddDocument.this.hide(true);        
                }

                public void onSubmit(FormSubmitEvent event) {
                }
            });


        }
        return uploadForm;
    }

private Button getAddButton() {
        if (addButton == null) {
            addButton = new Button("ADD");
            addButton.addClickHandler(new ClickHandler() {
                public void onClick(ClickEvent event) {
                    uploadForm.submit();
                }
            });
            addButton.setText("Add");

        }
public class FileServiceEndPoint implements FileServiceAsync{

FileServiceAsync service = (FileServiceAsync)GWT.create(FileService.class);
ServiceDefTarget endpoint = (ServiceDefTarget) service;

public FileServiceEndPoint() {
endpoint.setServiceEntryPoint(GWT.getHostPageBaseURL() + “TestUploadFileServlet”);
}

public void uploadAttachement(Map docProperty,
AsyncCallback callback) {
service.uploadAttachement(docProperty, callback);
}
}
public class FileUploadImpl extends RemoteServiceServlet implements FileService {

private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(FileUploadImpl.class
.getName());

String a;
protected void service(final HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {

a=”5″;
System.out.println(“ServletWorking Fine “);
}
public String uploadAttachement(Map docProperty) {
// TODO Auto-generated method stub
return “Checked”;
}
}