サーブレットの勉強を始めて商品管理アプリを作成しています。
外部ファイル出力でつまずいているのでご教授いただけませんでしょうか?
◆関連ファイル
・jsp:insert.jsp
・Writer.java
◆DB
PostgreSQL
◆発生している問題・やりたいこと
サーブレットの出力(本番はPostなのでメソッドをGetにしてから)すると、csvに全アイテム出力できました。
これをjspのボタンを押したら全アイテム出力するようにしたい。
該当のソースコード(Writer.java)
package item; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/writer") public class Writer extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 出力がHTMLではなくダウンロード用のデータであることを示す response.setContentType("application/octet-stream;charset=Windows-31J"); response.setHeader("Content-Disposition", "attachment; filename=db.csv"); PrintWriter out = response.getWriter(); Connection db = null; Statement objStt = null; try { Class.forName("org.postgresql.Driver"); db = DriverManager.getConnection("jdbc:postgresql://***/***", "ID", "password"); objStt = db.createStatement(); ResultSet rs = objStt.executeQuery("SELECT * from item"); ResultSetMetaData objRmd = rs.getMetaData(); // タイトル行の出力 out.println("ID、商品名、説明、カテゴリー、ブランド、在庫、価格、評価"); // 各行の内容を繰り返し出力 while (rs.next()) { // 各カラムの内容を繰り返し出力 for (int i = 1; i <= objRmd.getColumnCount(); i++) { out.print(rs.getString(i)); // 出力の形式 out.print(i <= objRmd.getColumnCount() ? "," : ""); } // 改行コードを取得 out.print(System.getProperty("line.separator")); } } catch (ClassNotFoundException e) { throw new ServletException(e); } catch (SQLException e) { throw new ServletException(e); } finally { try { if (objStt != null) { objStt.close(); } if (db != null) { db.close(); } if (out != null) { out.close(); } } catch (Exception e) { throw new ServletException(e); } } } }
該当のソースコード(search.jsp)
<%@ page contentType="text/html; charset=UTF-8"%> <!DOCTYPE html> <html> <head> <meta> <link rel="stylesheet" href="../css/styletop.css"> <title>タイトル</title> </head> <body> <h1>商品検索</h1> <form action="search" method="post" target="_blank"> <input type="text" size="50" class="area" maxlength="30" name="keyword" placeholder="商品名を入力してください。" onclick="check()"> <br><br> <button type="submit" class="submitbtn" id="jssubmit"> <span>検索</span> </button> <script> var btn = document.getElementById('jssubmit'); btn.addEventListener('click', function() { window.confirm('商品名が未入力の場合、全件表示します'); }) </script> <button type="reset" class="submitbtn" id="jsbtn"> <span>リセット</span> </button> <!-- JSここから//リセットボタンを押したらアラート --> <script> var btn = document.getElementById('jsbtn'); btn.addEventListener('click', function() { window.confirm('リセットしてよろしいですか?'); }) </script> <!-- JSここまで --> <input type="hidden" size="50" class="area" maxlength="30"> <button type="submit" class="submitbtn" id="conf"> <span>在庫一覧</span> </button> <h2>商品情報の登録・削除・編集</h2> <input type="button" value="商品を追加する" onClick="window.open('insert.jsp')" class="addbtn"> <input type="button" value="商品を編集する" onClick="window.open('#')" class="addbtn"> <input type="button" value="商品を削除する" onClick="window.open('delete.jsp')" class="addbtn"> </form> <br> <!-- <a href="#" target="_blank">CSVファイルに出力する</a> --> <h2 class="csvh2">CSVファイルへ出力</h2> <input type="button" value="CSVへ出力" name ="csv" onClick="window.open('../item/Writer.java')" class="csvbtn"> <br> <br> <img src="../img/search.png" alt="img"> </body> </html>
試したこと
今回は、できればjspとjavaのみで対応したいので、jspのボタンにonClick="window.open('リンク')" をやってみましたが
当然何も反応しませんでした。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/16 08:24