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
Java 文件上传不起作用_Java_Gwt_Servlets - Fatal编程技术网

Java 文件上传不起作用

Java 文件上传不起作用,java,gwt,servlets,Java,Gwt,Servlets,我创建了小部件,并直接添加到根面板 public class FileUploadWidget extends VerticalPanel { public FileUploadWidget() { super(); final FormPanel form = new FormPanel(); form.setMethod(FormPanel.METHOD_POST); form.setEncoding(FormPane

我创建了小部件,并直接添加到根面板

public class FileUploadWidget extends VerticalPanel {
    public FileUploadWidget() {
        super();
        final FormPanel form = new FormPanel();

        form.setMethod(FormPanel.METHOD_POST);
        form.setEncoding(FormPanel.ENCODING_MULTIPART);
        form.setAction("/FileUpload"); 

        form.setWidget(this);

        final FileUpload fileUpload = new FileUpload();

        fileUpload.setName("uploadFormElement");  
        this.add(fileUpload);

        Label maxUpload = new Label();
        maxUpload.setText("Maximum upload file size: 1MB");
        this.add(maxUpload);

        Button button = new Button("Submit");
        button.addClickHandler(new ClickHandler() {

            public void onClick(ClickEvent event) {
                form.submit();

            }
        });
        this.add(button);

        form.addSubmitCompleteHandler(new SubmitCompleteHandler() {

            public void onSubmitComplete(SubmitCompleteEvent event) {
                Window.alert(event.getResults());

            }
        });
    }

}
我创建了servlet

public class FileUploadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

      protected void doPost(HttpServletRequest request, 
    HttpServletResponse response) 
          throws ServletException, IOException { 
        response.setContentType("text/plain"); 

        FileItem uploadItem = getFileItem(request); //BREAKPOINT

        if (uploadItem == null) { 
          response.getWriter().write("NO-SCRIPT-DATA"); 
          return; 
        } 
        try {
            uploadItem.write(new File("newfile.txt"));
        } catch (Exception e) {
            response.getWriter().write("ERROR");
        }

        response.getWriter().write("OK"); 
      } 

      private FileItem getFileItem(HttpServletRequest request) { 
        FileItemFactory factory = new DiskFileItemFactory(); 
        ServletFileUpload upload = new ServletFileUpload(factory); 

        try { 
          List items = upload.parseRequest(request); 
          Iterator it = items.iterator(); 
          while (it.hasNext()) { 
            FileItem item = (FileItem) it.next(); 
            if (!item.isFormField() 
                && "uploadFormElement".equals(item.getFieldName())) { 
              return item; 
            } 
          } 
        } catch (FileUploadException e) { 
          return null; 
        } 
        return null; 
      } 
     }
我将servlet的web.xml文件映射

<servlet>
    <servlet-name>FileUpload</servlet-name>
    <servlet-class>my.web.app.GwtFileUpload.server.FileUploadServlet</servlet-class>
</servlet>
 ....
<servlet-mapping>
    <servlet-name>FileUpload</servlet-name>
    <url-pattern>/FileUpload</url-pattern>
</servlet-mapping>

文件上传
my.web.app.GwtFileUpload.server.FileUploadServlet
....
文件上传
/文件上传
现在,当我选择file并调用submit时, 当我使用firefox时,什么也没发生(我得到的只是SubmitEvent),我在servlet代码中标记的断点永远不会到达

当我在chrome下尝试相同的代码时,它正在提交到servlet中,但没有找到任何文件


有人能解释一下为什么会有如此不同的行为,以及我如何修复它吗?

将fileUpload控件添加到
FormPanel
,因为
fileUpload
小部件(实现HasName的小部件)如果包含在此面板中,将提交给服务器

在执行
form.setWidget(此操作)之后,您将
fileupload
添加到verticlepanel中。喜欢

this.add(fileUpload);
form.setWidget(this);

将fileUpload控件添加到
FormPanel
,因为
fileUpload
小部件(实现HasName的小部件)如果包含在此面板中,则会提交到服务器

在执行
form.setWidget(此操作)之后,您将
fileupload
添加到verticlepanel中。喜欢

this.add(fileUpload);
form.setWidget(this);

FileUpload
小部件包装
HTML
元素。如果要将此小部件提交到服务器,则必须将其与
FormPanel
一起使用。 因此,有必要将文件上载添加到
FormPanel
。您已将其直接添加到
面板
。 请替换代码

this.add(fileUpload);


有关更多详细信息,请浏览链接
FileUpload
小部件包装
HTML
元素。如果要将此小部件提交到服务器,则必须将其与
FormPanel
一起使用。 因此,有必要将文件上载添加到
FormPanel
。您已将其直接添加到
面板
。 请替换代码

this.add(fileUpload);


有关更多详细信息,请浏览链接

我建议使用gwtupload库,它将节省大量编写自己代码的时间,并为您的应用程序提供许多功能,如自定义按钮、进度条、文件扩展名、大小限制等


你有这个和这个页面。

我建议使用gwtupload库,它可以节省大量编写自己代码的时间,并为你的应用程序提供许多功能,如自定义按钮、进度条、文件扩展名、大小限制等

你有这个和这个页面