質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

3回答

2191閲覧

jspとjavaのみでエクスポート出力

roro_mochi

総合スコア48

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2018/09/14 06:07

サーブレットの勉強を始めて商品管理アプリを作成しています。
外部ファイル出力でつまずいているのでご教授いただけませんでしょうか?

◆関連ファイル
・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('リンク')" をやってみましたが
当然何も反応しませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

ありがとうございます。
やはり作り直す必要があるようなのでやり直します。

投稿2018/09/16 08:19

roro_mochi

総合スコア48

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/16 08:24

細かいかもしれませんが「やり直します」という「ベストアンサー」はちょっと微妙に思います。 何をどう読み取って「作り直す必要がある」と感じられたのかも分かりません(ベストアンサーは同じ問題を抱えた他の誰かのために選ぶのが通例です) もし余裕があるようでしたらもう少しこの質問で頑張ってみたほうが良いかと思います。
guest

0

全体を見てないので、とりあえず「jsp側の『CSVへ出力ボタン』をクリックしても反応しない」に関して回答します。

formを使用してServlet側へデータを送信するのであれば、下記のinputタグになるかと思います。

html

1<input type="submit" value="CSVへ出力">

また、formタグのactionがsearchになっているので、ServletのURI(おそらく./Writer)を指定しましょう。


formタグで囲ってる中に複数のsubmitボタンがあるので、それらも必要なものであれば
Servlet側で適切な分岐処理をする必要があります。
あと、buttonタグのsubmitかinputタグのsubmitかは統一した方が良いかと思います。

投稿2018/09/14 06:28

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

サーブレットで@WebServlet("/writer")
と指定しているので、 URLは{コンテキストパス}/writerとなるのではないでしょうか。
.javaはWebから直接呼び出せないと思います。

投稿2018/09/14 06:22

編集2018/09/14 06:24
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roro_mochi

2018/09/14 06:30

ありがとうございます。 やはりそうですよね。。。。 DAOに検索や追加のメソッドを書いて jspで入力されたキーワードをjavaクラスに渡し、 DAOのメソッドに移動して処理。 これで検索は出て来るのですが、 同じ要領で良いのでしょうか。 今回は、検索画面(トップ画面のsearch.jsp)にcsv出力ボタンかテキストリンクを配置し、 そこをクリックすれば、全アイテム出力する仕様です。 度々お手数ですが、ご教授よろしくお願いいたします。
m.ts10806

2018/09/14 06:36

いずれにしてもpostとgetはきちんと使い分けられた方が良いかと思います。 あと呼び出し先URL。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問