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

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

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

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

Java

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

servlet

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

Q&A

解決済

1回答

12637閲覧

JSPの入力フォームをサーブレット経由でJSPによる確認画面の描画について

rjberger19

総合スコア33

JSP

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

Java

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

servlet

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

0グッド

1クリップ

投稿2015/10/19 14:11

編集2015/10/19 14:16

以下のフォームから内容を入力後、確認画面を経由して記入内容をデータベース登録したいと考えております。
まずは確認画面の作成で躓いているのですが、お知恵をお貸し頂きたく。

入力フォームは以下のとおりです。

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エラーということは、うまくセッションに情報が保存されていないというでしょうか?
どこのタイミングで誤っているのでしょうか・・・?
大変初歩的なご質問かとは存じますが、みなさまのお知恵をお貸し頂けると助かります。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

doPostMeetingConfirmation mtgconf = (MeetingConfirmation) session.getAttribute("MTGConf");nullが返されているのではないでしょうか。

ここでは、リクエストされた入力値から新しくMeetingConfirmationを生成しなければなりません。
そして、一度もsession.setAttribute("MTGConf", mtgconf)を呼び出していなければ、session.getAttribute("MTGConf")nullを返します。
入力値は、String place = request.getParameter("MTGplace");のようにして取得します。

投稿2015/10/19 14:25

argius

総合スコア9390

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

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

rjberger19

2015/10/19 14: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にはどのように書けば良いのでしょうか?
argius

2015/10/19 14:42 編集

1つ目の質問: MeetingConfirmation mtgconf = (MeetingConfirmation) session.getAttribute("MTGConf");の代わりに、MeetingConfirmation mtgconf = new MeetingConfirmation();にします。コンストラクターは、date,place,contentsを設定できるようにしてください。 2つめの質問: 送信フォームのページは、/Miami_Inc/jsp/MTG/MTGRegistry.jspに直接アクセスして表示しているのだとしたら、action="/MTGConf"にすればできると思います。これがあるのでJSPは直接アクセスしないで、常にサーブレットからのdispatchにして同じ階層にした方が混乱しなくて済みます。
rjberger19

2015/10/19 14:41

また、入力フォームに内容を記入後Write!をクリックすると 「HTTPステータス 404 - /Miami_Inc/jsp/MTG/MTGConf」となってしまい、サーブレットにうまく遷移しません。 @WebServlet("/MTGConf")であるMTGConf.javaに入力フォームのWrite!をクリックした際遷移するためにはMTGRegistry.jspにはどのように書けば良いのでしょうか? →すみません。この部分は解決しました。 単純にformのactionの値が間違っておりました。
rjberger19

2015/10/19 14: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);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問