プロが教えるわが家の防犯対策術!

今JavaでWebアプリの開発を行っています。
DBと接続し、データをWeb上に表示させる機能と、
その表示されたものを、csvファイルとしてローカルに保存できるようにしたいのですが、
何かよい方法がありましたら、是非教えてください!
データは動的なのでその都度csvファイルの内容も変わってきます。

A 回答 (2件)

"データをWeb上に表示させる"


ために使った検索ロジックの結果を
格納しているBeanからがあるので、
それからただCSVをつくればよいだけでは?
urlの最後が
http://www.hoge.co.jp?aa=xx&filename=file.xls
などのように.csvで終わってれば
windows環境ではブラウザの窓からエクセルが開いたり
するし。
http://www.hoge.co.jp?aa=xx&filename=file.dat
など、アプリケーションと関連付けされてないもの
であれば、ダウンロードするかどうかのダイアログが
でる。
IEはurlの最後が拡張子になっているもので
判断しているようなのでで
"データをWeb上に表示させる"機能を実現した画面上で
ダウンロードボタンを押下した時に
GETで自分自身に遷移させて、
urlの終わりが.datになるようにしておけば
ダウンロードにはず。
サーバ上でcsvのファイルを作るのはよくない。
同じファイルに毎回上書きするのは論外(排他制御の問題)
で、毎回異なるファイルもサーバにゴミがたまったり
してよくない(消しこみロジックについて考慮したり、うっとおしい。)
なので、
単純に結果を byte[]のなかにでも格納してしまって。
getServletOutputStream
とかそういうクラスで
はいてclose()すればよい。
後は↑に記載したようにurlに細工を施して
ください。

以上
    • good
    • 1

 もう解決されているかもしれませんが。

(^^)

 ブラウザはダウンロードするのか表示するのかを、
拡張子だけで判断しているのでは決してないです。

 一般的には下記のような感じで、
レスポンスに値を設定します。
これはJavaに限ったことではなく、
RFCの規約で決められていることで、
WEBならどの言語を使用しても同じです。
RFCについてはWEB上で日本語訳も、
出回っていますので、それを読んでみましょう。

//CSVをダウンロードするサンプル
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class CsvServlet extends HttpServlet {

 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
  PrintWriter out = response.getWriter();

  //レスポンスヘッダーを設定
  response.setContentType("application/octetstream; charset=MS932");
  response.setHeader("Content-disposition","attachement; filename= sample.csv");

  //CSVを出力
  out.println("123456,あいうえお");
  out.println("123456,あいうえお");
  out.println("123456,あいうえお");
  out.println("123456,あいうえお");
  out.println("123456,あいうえお");

  out = null;
 }

}
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!