JSPの入力フォームをサーブレット経由でJSPによる確認画面の描画について
- 評価
- クリップ 1
- VIEW 9,162
以下のフォームから内容を入力後、確認画面を経由して記入内容をデータベース登録したいと考えております。
まずは確認画面の作成で躓いているのですが、お知恵をお貸し頂きたく。
入力フォームは以下のとおりです。
そして、MTGConfirmation.jsp上ではMeetingConfirmation(Bean的なもの)から
getメソッドでセッションに保存されたデータを表示することをイメージして以下の様に記載しました。
MeetingConfirmation.java(bean的なもの)
MeetingConfirmation.jsp
エラーを見るとNullPointエラーということは、うまくセッションに情報が保存されていないというでしょうか?
どこのタイミングで誤っているのでしょうか・・・?
大変初歩的なご質問かとは存じますが、みなさまのお知恵をお貸し頂けると助かります。

まずは確認画面の作成で躓いているのですが、お知恵をお貸し頂きたく。
入力フォームは以下のとおりです。
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MTG Registry</title>
</head>
<body>
<form action="MTGConf" method="post">
日付:<input type="date" name="MTGdate"><br>
場所:<input type="text" name="MTGplace"><br>
内容:<input type="text" style="width: 200px; height: 50px;" name="MTGcontents"><br>
<input type="submit" value="Write!">
</form>
<jsp:include page="../common_JSP/footer.jsp" />
</body>
</html>
ここで入力されたデータがaction=MTGConfを基に以下のサーブレットへ連携されるイメージです。
@WebServlet("/MTGConf")
public class MTGConf extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
MeetingConfirmation mtgconf = (MeetingConfirmation) session.getAttribute("MTGConf");
session.setAttribute("MTGConf",mtgconf);
RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/MTG/MTGConfirmation.jsp");
dispatcher.forward(request, response);
}
}
このサーブレットではMeetingConfirmation型のmtgconfオブジェクトに入力された内容をセッションスコープを利用して保存し、そのごMTGConfirmation.jspに遷移するイメージです。
そして、MTGConfirmation.jsp上ではMeetingConfirmation(Bean的なもの)から
getメソッドでセッションに保存されたデータを表示することをイメージして以下の様に記載しました。
MeetingConfirmation.java(bean的なもの)
package model;
import java.util.Date;
public class MeetingConfirmation {
private Date date;
private String place;
private String contents;
public MeetingConfirmation() {
}
public Date getDate() {
return date;
}
public String getPlace() {
return place;
}
public String getContents() {
return contents;
}
}
MeetingConfirmation.jsp
pageEncoding="UTF-8"%>
<%@ page import="model.MeetingConfirmation"%>
<%
MeetingConfirmation mtgconf = (MeetingConfirmation)session.getAttribute("MTGConf");
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MTG Confirmation</title>
</head>
<body>
<p>以下の内容で良いですか?</p>
<%=mtgconf.getDate()%>
<%=mtgconf.getPlace()%>
<%=mtgconf.getContents()%>
<a href="index.jsp"><img src="../image/go.png"></a>
<jsp:include page="../common_JSP/footer.jsp" />
</body>
</html>
そうすると添付の画像のようなエラーが発生いたします。
エラーを見るとNullPointエラーということは、うまくセッションに情報が保存されていないというでしょうか?
どこのタイミングで誤っているのでしょうか・・・?
大変初歩的なご質問かとは存じますが、みなさまのお知恵をお貸し頂けると助かります。

-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
doPost
のMeetingConfirmation mtgconf = (MeetingConfirmation) session.getAttribute("MTGConf");
でnull
が返されているのではないでしょうか。
ここでは、リクエストされた入力値から新しく
MeetingConfirmation
を生成しなければなりません。
そして、一度も
session.setAttribute("MTGConf", mtgconf)
を呼び出していなければ、session.getAttribute("MTGConf")
はnull
を返します。
入力値は、
String place = request.getParameter("MTGplace");
のようにして取得します。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/10/19 23:34
とりあえず入力値は以下のとおり取得しました。
```
String date = request.getParameter("MTGDate");
String place = request.getParameter("MTGPlace");
String contents = request.getParameter("MTGContents");
```
ここで取得した値をMTGConfirmation.jspに遷移する際に連携したいのですが、
どのように記載すればよいでしょうか?
また、入力フォームに内容を記入後Write!をクリックすると
「HTTPステータス 404 - /Miami_Inc/jsp/MTG/MTGConf」となってしまい、サーブレットにうまく遷移しません。
@WebServlet("/MTGConf")であるMTGConf.javaに入力フォームのWrite!をクリックした際遷移するためにはMTGRegistry.jspにはどのように書けば良いのでしょうか?
2015/10/19 23:40 編集
MeetingConfirmation mtgconf = (MeetingConfirmation) session.getAttribute("MTGConf");の代わりに、MeetingConfirmation mtgconf = new MeetingConfirmation();にします。コンストラクターは、date,place,contentsを設定できるようにしてください。
2つめの質問:
送信フォームのページは、/Miami_Inc/jsp/MTG/MTGRegistry.jspに直接アクセスして表示しているのだとしたら、action="/MTGConf"にすればできると思います。これがあるのでJSPは直接アクセスしないで、常にサーブレットからのdispatchにして同じ階層にした方が混乱しなくて済みます。
2015/10/19 23:41
「HTTPステータス 404 - /Miami_Inc/jsp/MTG/MTGConf」となってしまい、サーブレットにうまく遷移しません。
@WebServlet("/MTGConf")であるMTGConf.javaに入力フォームのWrite!をクリックした際遷移するためにはMTGRegistry.jspにはどのように書けば良いのでしょうか?
→すみません。この部分は解決しました。
単純にformのactionの値が間違っておりました。
2015/10/19 23:58
public MeetingConfirmation(String place,String contents){
//this.date = date;
this.place = place;
this.contents = contents;
サーブレット内は以下の記載にしたところ、うまくいきました。
String place = request.getParameter("MTGPlace");
String contents = request.getParameter("MTGContents");
MeetingConfirmation mtgconf = new MeetingConfirmation(place,contents);
session.setAttribute("MTGConf", mtgconf);