🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JSP

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

Java

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

servlet

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

Q&A

解決済

2回答

1656閲覧

名前に紐づくレコードを取得するために、jspの画面からServletにパラメータを渡す方法がわかりません。

kjrk

総合スコア15

JSP

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

Java

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

servlet

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

0グッド

0クリップ

投稿2021/01/27 05:40

前提・実現したいこと

DBの住所録一覧を取得し、表示させている画面(住所録一覧画面のjsp)で、名前の部分に、doGet()メソッドが走るリンクを指定し、名前に紐づくレコードを取得したいのです。

DBのテーブル構造は、名前をプライマリーキーにしていまして、jspの画面から選択した名前部分をServlet側に渡したいです。どのようにすればよろしいでしょうか?

発生している問題・エラーメッセージ

名前に紐づくレコードを取得したいが、jsp画面のからServlet側に特定の名前を渡す方法がわかりません。

該当のソースコード

java

1package servlet; 2 3import java.io.IOException; 4import java.sql.SQLException; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12 13import logic.EditAddressInfoLogic; 14import model.AddressBookInfo; 15import model.AddressBookInfoCondDto; 16 17 18/** 19 * 20 * 住所録のデータを編集するServletクラス 21 * @author 22 * 23 */ 24@WebServlet("/EditAddressInfo") 25public class EditAddressInfoServlet extends HttpServlet { 26 private static final long serialVersionUID = 1L; 27 28 /** 29 * 編集画面をフォワード 30 */ 31 @Override 32 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 33 34 // 文字コード指定 35 response.setContentType("text/html; charset=UTF-8"); 36 37 // EditAddressInfoLogicのインスタンス化 38 EditAddressInfoLogic editAddress = new EditAddressInfoLogic(); 39 40 // 名前情報を取得 41 String name = null; 42 43 // 名前に紐づくレコードを取得 44 AddressBookInfo addressInfo = editAddress.getRecode(name); 45 46 // リクエストスコープに保存 47 request.setAttribute("addressInfo", addressInfo); 48 49 // 編集画面をフォワード 50 RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/addressEdit.jsp"); 51 dispatcher.forward(request, response); 52 53 } 54 55 /** 56 * データベースに編集を登録 57 */ 58 @Override 59 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 60 61 // 文字コード指定 62 response.setContentType("text/html; charset=Shift_JIS"); 63 64 // EditAddressInfoLogicのインスタンス化 65 EditAddressInfoLogic addressInfo = new EditAddressInfoLogic(); 66 67 // formデータを格納した変数?の作成 68 AddressBookInfoCondDto condDto = convertFormToCondDto(request); 69 70 // UPDATEをかけるメソッドの呼び出し(引数にformから受け取ったデータ) 71 try { 72 addressInfo.edit(condDto); 73 } catch (ClassNotFoundException e) { 74 // TODO 自動生成された catch ブロック 75 e.printStackTrace(); 76 } catch (InstantiationException e) { 77 // TODO 自動生成された catch ブロック 78 e.printStackTrace(); 79 } catch (IllegalAccessException e) { 80 // TODO 自動生成された catch ブロック 81 e.printStackTrace(); 82 } catch (SQLException e) { 83 // TODO 自動生成された catch ブロック 84 e.printStackTrace(); 85 } 86 87 } 88 89 /** 90 * formデータパラメータの詰め替え 91 */ 92 private AddressBookInfoCondDto convertFormToCondDto(HttpServletRequest request) { 93 94 // パラメータの詰替変数?の作成 95 AddressBookInfoCondDto condDto = new AddressBookInfoCondDto(); 96 97 // パラメータにformデータを詰める 98 condDto.setName(request.getParameter("name")); 99 condDto.setAddr(request.getParameter("addr")); 100 condDto.setTelNum(request.getParameter("telNum")); 101 102 return condDto; 103 } 104 105}

住所録一覧画面

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="model.AddressBookInfo, java.util.List"%> 4<% 5List<AddressBookInfo> addressBookList = (List<AddressBookInfo>)request.getAttribute("addressBookList"); 6%> 7<!DOCTYPE html> 8<html> 9<head> 10<meta charset="UTF-8"> 11<title>Insert title here</title> 12</head> 13<body> 14 15 <form action="/FileUploadApp/CsvFileReadServlet" enctype="multipart/form-data" method="POST"> 16 アップロードするcsvファイルを選択してください<br> 17     <input type="file" name="uploadFile"><br> 18 <input type="submit" value="upload"> 19 </form> 20 21 <table> 22 <tr> 23 <td>名前</td> 24 <td>住所</td> 25 <td>電話番号</td> 26 </tr> 27 <% for(AddressBookInfo addressBook : addressBookList) { %> 28 <tr> 29 <td><a href="/FileUploadApp/EditAddressInfoServlet"><%= addressBook.getName() %></a></td> 30 <td><%= addressBook.getAddr() %></td> 31 <td><%= addressBook.getTelNum() %></td> 32 </tr> 33 <% } %> 34 </table> 35 36</body> 37</html>

編集画面

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>Insert title here</title> 8</head> 9<body> 10 <form action="/FileUploadApp/EditAddressInfoServlet" method="POST"> 11 <br> 12 名 前 :<input type="text" name="name" value=<%= %>><br> 13 住 所 :<input type="text" name="addr"><br> 14 電話番号:<input type="text" name="telNum"><br> 15 <input type="submit" value="update"> 16 </form> 17</body> 18</html> 19

補足情報(FW/ツールのバージョンなど)

formのパラメータをServletに渡す際にHttpServletRequestクラスのgetParameter()メソッドを使いますが、同じように、HttpServletRequestクラスでaタグ内の文字をServletに渡すことはできないのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

<a>タグで囲んでも残念ながらパラメータとして送信されませんので、

  • クエリ文字列(URLの末尾につける?からのパラメータ名=値の組み合わせ)で送信する
  • hiddenやJavaScriptからフォームのパラメータに追加して送信する

一番簡単なのは前者ですが、、

html

1<a href="/FileUploadApp/EditAddressInfoServlet?name=<%= addressBook.getName() %>&addr=<%= addressBook.getAddr() %>&telNum=<%= addressBook.getTelNum() %>">

URLのクエリパラメータに値を設定していますのでURLEncodingが必要になるのと、リンクを押した際に再度 name,address,telNumの3つから検索するよりも、そのレコードを一意に決定する番号で再表示したほうが作りやすくなるかと思います。

投稿2021/01/27 05:55

A-pZ

総合スコア12011

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

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

0

同じように、HttpServletRequestクラスでaタグ内の文字をServletに渡すことはできないのでしょうか?

できます。
GETはURLのクエリストリングを作りますので、
「同じ形のURL文字列」をリンクとして埋め込めば良いです。

ただGETはURLを手打ちでも変更してしまえばリクエスト値を任意に書き換え可能です。もちろんキーも書き換えられます。そのあたりを考慮した実装にする必要があります。

投稿2021/01/27 05:44

編集2021/01/27 05:46
m.ts10806

総合スコア80875

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問