【问题标题】:How exactly servlet Work in GWT?servlet 在 GWT 中究竟是如何工作的?
【发布时间】:2012-03-06 19:58:09
【问题描述】:

我试图找出 servlet 是如何工作的。 我使用这段代码来设计我的 servlet

client!

formPanel.setAction(GWT.getModuleBaseURL()+"fileupload");

然后点击

formPanel.Sumit();

server!

在服务器中,我不明白这个doPost方法将如何被客户端调用。

当我点击提交按钮时,我可以在开发模式下“你选择了 test.doc”。

请人帮忙。

源代码。 客户。

   final FormPanel formPanel = new FormPanel();
    formPanel.addFormHandler(new FormHandler() {

        public void onSubmitComplete(final FormSubmitCompleteEvent event) {
            // TODO Auto-generated method stub
            Window.alert(event.getResults());
        }

        public void onSubmit(final FormSubmitEvent event) {
            // TODO Auto-generated method stub
            event.setCancelled(true);
        }
    });
 final FileUpload upload = new FileUpload();
 formPanel.setMethod(FormPanel.METHOD_POST);
    formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
    formPanel.setAction(GWT.getModuleBaseURL()+"fileupload");
             formPanel.setWidget(upload);

      Button btnAdd = new Button("Add");

        btnAdd.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            GWT.log("you selected " + upload.getFilename(), null);
            formPanel.submit();
        }
    });

服务器

    public class FileUpload extends HttpServlet {

public void dopost(HttpServletRequest request,HttpServletResponse response){
    ServletFileUpload upload = new ServletFileUpload();
    System.out.println("pratyush file upload");
    try {
        FileItemIterator iterator = upload.getItemIterator(request);

        while (iterator.hasNext()){
            FileItemStream itemStream = iterator.next();

            String name = itemStream.getFieldName();
            InputStream stream = itemStream.openStream();

            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            int len;
            byte[] buffer = new byte[8192];
            while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
                outputStream.write(buffer, 0, len);

            }

            int maxFileSize = 2*(1024*1024); 
               if (outputStream.size() > maxFileSize) { 
                   throw new RuntimeException("File is > than " + maxFileSize);
               }

        }
    } catch (FileUploadException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }catch(Exception e){
        throw new RuntimeException();
    }
}
 }

【问题讨论】:

  • 您是否将 /fileupload 绑定到 web.xml 中的 servlet?如果没有,那么就是这样,您需要在 web.xml 中创建一个 servlet 和一个 servlet-mapping。现在,如果你真的想学习,我宁愿使用 GuiceFilter 来简化你的生活。

标签: java gwt servlets client-server gwt2


【解决方案1】:
form.setMethod(FormPanel.METHOD_POST);  //will generate <form method="post"></form>
form.setAction(GWT.getModuleBaseURL()+"fileupload"); 
// and now <form method="post" action="domain/testapp/fileupload"></form>

所以当你点击提交时,它的路径将匹配fileUploaderServler url 模式,因此com.testapp.server.FileUpload.doPost(HttpServletRequest request, HttpServletResponse response); 将被执行。

【讨论】:

  • 我试图打印一个 System.out.println("test success");但我在控制台上看不到这个打印。
  • 在服务器端。方法内部 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
  • 检查你的 web.xml,例如,如果你的 servlet 有 /testapp/fileupload url 模式,从 firebug 检查你的表单 UI 是否也有正确的 url。
  • 我的 servlet 类现在在 src.com.example.MyProject.server.FileUpload 中,请问应该是什么映射。我正在使用上面链接中给出的精确编码。
猜你喜欢
  • 2023-04-01
  • 2011-06-26
  • 2021-08-15
  • 2012-06-08
  • 2011-10-11
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多