2011-12-25 9 views
0

私は、NetBeansを使用していると私はいくつかのツールに応じて任意のXMLとJSONファイルを処理したウェブベースのアプリケーションを作成するつもりです。これまでは、htmlを使用した基本的なサイトを作成しました。また、javabeansで書かれたいくつかのJavaコードもあります。 javaサーブレットを使用してxmlまたはjsonファイルを読み込んで処理する最善の方法は何と思いますか?どのようにしてファイルを渡すことができますか(ユーザーが選択したファイルは、さらに処理を実行できる側に渡します)。私はHTTPClientクラスが良い方法だと読んだことがありますが、これが最善かどうかはわかりません。あなたはマルチパートリクエストを処理するためのApache CommonsのするFileUploadライブラリを使用することができ、あなたの時間Javaサーブレットを使用してjsonまたはxmlファイルを読み取る方法は?

答えて

0

ため

感謝。マルチパートリクエストは、ファイル要素を持つフォームがサーブレットに投稿されたときに受け取るものです。例えば

import java.io.*; 
import java.util.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

import org.apache.commons.fileupload.*; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
import org.apache.commons.io.FilenameUtils; 
import org.apache.commons.lang.StringUtils; 
import org.apache.log4j.Logger; 

(...) 

    public void doPost(HttpServletRequest request, HttpServletResponse response) { 
     if (ServletFileUpload.isMultipartContent(request)) { 
      handleMultiPartContent(request); 
     } 
    } 

    private void handleMultiPartContent(HttpServletRequest request) { 

     ServletFileUpload upload = new ServletFileUpload(); 
     upload.setFileSizeMax(2097152); // 2 Mb 
     try { 
      FileItemIterator iter = upload.getItemIterator(request); 
      while (iter.hasNext()) { 
       FileItemStream item = iter.next(); 
       if (!item.isFormField()) { 
        File tempFile = saveFile(item); 
        // process the file 
       } 
      } 
     } 
     catch (FileUploadException e) { 
      LOG.debug("Error uploading file", e); 
     } 
     catch (IOException e) { 
      LOG.debug("Error uploading file", e); 
     } 
    } 

    private File saveFile(FileItemStream item) { 

     InputStream in = null; 
     OutputStream out = null; 
     try { 
      in = item.openStream(); 
      File tmpFile = File.createTempFile("tmp_upload", null); 
      tmpFile.deleteOnExit(); 
      out = new FileOutputStream(tmpFile); 
      long bytes = 0; 
      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0) { 
       out.write(buf, 0, len); 
       bytes += len; 
      } 
      LOG.debug(String.format("Saved %s bytes to %s ", bytes, tmpFile.getCanonicalPath())); 
      return tmpFile; 
     } 
     catch (IOException e) { 

      LOG.debug("Could not save file", e); 
      Throwable cause = e.getCause(); 
      if (cause instanceof FileSizeLimitExceededException) { 
       LOG.debug("File too large", e); 
      } 
      else { 
       LOG.debug("Technical error", e); 
      } 
      return null; 
     } 
     finally { 
      try { 
       if (in != null) { 
        in.close(); 
       } 
       if (out != null) { 
        out.close(); 
       } 
      } 
      catch (IOException e) { 
       LOG.debug("Could not close stream", e); 
      } 
     } 
    } 

これは、ファイルをアップロードし、サーバのハードディスク上の一時ファイルとして保存します。その後、必要なファイルをファイルと一緒に実行できます。

は、特に非常に大きなファイルのためのより良いアプローチは、貯蓄をスキップして直接InputStreamを処理するかもしれません。ストリームを直接処理できる適切なXMLライブラリ(Staxなど)が必要です。

EDIT:あなたのフォームのaction属性は、サーブレットマッピングのURLパターンと一致する必要があります。

例HTML:

<form action="upload" ENCTYPE='multipart/form-data' method="POST"> 
    <input type="file" name="user_file" accept="text/xml"> 
    <input type="submit" value="Validate" /> 
</form> 

例のweb.xmlの抜粋:あなたが使用することができます

<servlet> 
    <servlet-name>FileReaderServlet</servlet-name> 
    <servlet-class>my.application.FileReaderServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>FileReaderServlet</servlet-name> 
    <url-pattern>/upload</url-pattern> 
</servlet-mapping> 
+0

ありがとう!このコードをサーブレットに使用しますが、実際には何もしません。私はこのエリアを初めて訪れています。私がやったことから何かが欠けていると思います。 JSPファイルにはhtmlコードがあります。サーブレットと通信するフォームは次のとおりです。

Angelina

+0

私は本当にどこに問題があるかわかりません。バリデーションボタンのようなアクションはありません。何もしませんでした。明らかなことは何もありません。再度、感謝します! – Angelina

+0

web.xmlにサーブレットを定義してマップしていますか? –

0

のいずれかのHttpClient apacheの(または)日によって提供さは、両方の良いAPIです、HttpURLClientを提供します。 Apacheを選択する場合は、余分なJarsをインストールする必要があります。

のApacheのHttpClientは、Sunとの比較、余分なメソッドのカップルが1を提供しています。

+0

よろしくお願いいたします。私はthr one bt apacheを試してみます。私はいくつかの瓶が必要であることを発見し、それらをインストールして、今それらをまとめてみよう。 – Angelina

関連する問題