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

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

ただいまの
回答率

87.37%

動的Webプロジェクトにおける同じクラス内でのselect/insert/update/deleteの使い分け

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,044

score 18

Eclipseで動的Webプロジェクトを使用して開発をしています。

達成したいこと

同じクラス内で、select/insert/update/deleteのメソッドをそれぞれ実装したい。

現状困っていること

以下で示すソースのように
doGetメソッド→select処理
doPostメソッド→insert処理
として実装しています。
(というか、それ以外実装の仕方が分からず。。)

これだと、update処理とdelete処理が実装できないです。。
同じクラス内でselect/insert/update/deleteの処理を実装する
何か良い方法はありませんでしょうか。

JAVA

package servlet;

※import省略

@WebServlet("/SampleServlet")
public class SampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

// ★1.SELECT処理
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

List<MonthlyExpenseDto> meList = new ArrayList<MonthlyExpenseDto>();
ExpenseDao dao = new ExpenseDao();

// 月間の出費明細を取得
meList = dao.findAll();

request.setAttribute("meList", meList);

RequestDispatcher dispatcher = request.getRequestDispatcher("/test.jsp");
dispatcher.forward(request, response);

}

// ★2.INSERT処理
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// INSERT処理の実行

// doGetを呼び出し、SELECTして一覧を取得
doGet(request,response);
}
}

JSP

<form action="/example/SampleServlet" method="post">
<input type="text" name="catg_name">
<input type="text" name="name">
<input type="text" name="price">
<input type="text" name="item_num">
<input type="text" name="total_price">
<input type="submit" value="追加">
</form>

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

サーブレット側はHTTPメソッドごとに専用のメソッドが用意されていますが、HTML側のformがGETまたはPOSTの2種類のみ指定が可能なため、PUTやDELETEで送信したい場合はJavaScriptでsubmitイベントを拾ってAjax経由で送信するか、ないしはPOSTメソッドで送信する際に判定用のパラメータを追加して、doPostメソッド内で振り分ける方法があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/27 07:58

    ありがとうございます。
    確認してみます。

    キャンセル

  • 2018/12/28 08:52

    照会していただいたURL、アクセス出来なかったです。
    「jquery,submit,ajax」のキーワードで調べてみます。

    他にも調べておくべきキーワードあればご教授願います。

    キャンセル

  • 2018/12/29 01:30

    jQuery put で検索すると、いいサンプルが得られます。

    キャンセル

+2

ajax の受け口でいいなら

doDelete : DELETE
doPatch : UPDATE
doPut : INSERT
doGet : SELECT

がつかえる。( Form リクエストでは使えない )

和訳ドキュメント - HttpServlet

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/26 09:05

    ご回答ありがとうございます。
    Ajaxを調べて実装してみます。

    キャンセル

0

ひとつのサーブレットクラスには当然ですが、 doGet と doPost の二つの受け口しかありません。

普通にHTMLでフォームを作成すると、サーブレットには HTTP リクエストの GET または POST で情報を渡すしかありません。

この二つが対応するようにサーブレットAPIが設計されています。

4種類の動作 select/insert/update/delete を HTTP リクエストの GET と POST のどちらでサーバに渡すかは、通常は

GET  : select
POST : insert, update, delete

となります。何らかサーバ側に変更を加える場合は POST と考えるとよいでしょう。これはサーブレットのメソッドでいうと

doGet  : select
doPost : insert, update, delete

となります。なので、取るべき手段としては2つあります。

  1. insert, update, delete の各々の場合にリクエストするURLを変える=サーブレットクラスを分ける
  2. insert, update, delete のどれをリクエストしたかを示すフラグを、hiddenパラメータで渡して、doPost の中で分岐する。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/24 23:36

    HTML Form での送信がそうなだけであって 7種の HTTP リクエストメソッドはサポートしてますよ

    キャンセル

  • 2018/12/24 23:37

    その情報、質問者さんの役に立ちますかね?

    キャンセル

  • 2018/12/24 23:45

    絞られている位置での嘘を教えちゃいけんでしょ

    キャンセル

  • 2018/12/26 09:04

    ご回答ありがとうございます。
    上で記載した通り、今回はajaxを使用し
    HTTPメソッドごとにJAVAのメソッドを分けていく戦法で行きます。

    キャンセル

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

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る