2012-02-15 16 views
0

私はサーブレットのしくみを見つけようとしています。 このコードを使用してサーブレットを設計しましたGWTでサーブレットがどのように機能しますか?

client

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

およびクリック

formPanel.Sumit();

server

サーバーでは、私はこのdoPostメソッドがクライアントによって呼び出される方法を理解していません。

投稿ボタンをクリックすると、開発モードで "test.docを選択"できます。

誰か助けてください。

ソースコード クライアント。だから、あなたがクリックしたときにそのパスがfileUploaderServler URLパターン、その結果com.testapp.server.FileUpload.doPost(HttpServletRequest request, HttpServletResponse response);が実行されると一致します

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(); 
    } 
} 
} 
+0

web.xmlでサーブレットに/ fileuploadをバインドしましたか?もしそうでなければ、それはあなたのweb.xmlにサーブレットとサーブレット・マッピングを作成する必要があります。あなたが本当に学びたいのであれば、あなたの人生を単純化するGuiceFilterを使いたいと思います。 –

答えて

2
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> 

を提出します。

+0

私は印刷しようとしました System.out.println( "test success"); しかし、私はコンソールでこの印刷を見ることができません。 – NewCodeLearner

+0

どこに書きましたか?あなたが/ testappと/ fileupload' URLパターンのための 'があれば は ます。public void doPostメソッド(HttpServletRequestのリクエスト、HttpServletResponseの応答)ServletExceptionが、IOExceptionがスローするメソッドside.insideサーバー上の –

+0

は{ } – NewCodeLearner

関連する問題