如何在GWT中为RPC和上载文件使用相同的servlet。
我创建了一个必须使用fileUpload的web应用程序 我必须将文件及其属性发送到服务器。对于发送文件,我使用FormPanel,对于属性,我使用RPC如何在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");
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”;
}
}