teratail header banner
teratail header banner
質問するログイン新規登録
JSP

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

Q&A

解決済

1回答

7165閲覧

JSPから同一のJSP画面に遷移したい

ypk

総合スコア83

JSP

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

0グッド

0クリップ

投稿2020/05/23 04:53

0

0

初めまして。
現在JSPの学習をしており、下記のようなシステムを作ろうとしています。

https://teratail.com/questions/263920

そこで質問があります。

同一のjsp画面からjsp画面に遷移をすることは可能でしょうか。

具体的には、cmdbtn.jsp(下記のコード)に記載されているボタンを押すと、再びcmdbtn.jspに遷移したいと考えています。アクションメソッドを利用して課題に取り組んでいるのですが、サーブレットとJSPがごちゃ混ぜになってしまったりして思うようにいきません。

長々と話しましたが、

cmdbtn.jspからcmdbtn.jspに遷移をする方法

について、ご教授いただけたら幸いです。

どうぞよろしくお願いいたします

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<% 11 out.println("★ボタンを押してください"); 12 13%> 14<form action="cmdbtn.jsp" method="post"> 15 16<input type="button" name="add" value="追加"> 17<input type="button" name="delate" value="削除"> 18<input type="button" name="change" value="変更"> 19 20 21 22</form> 23</body> 24</html>

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

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

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

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

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

Yasumichi

2020/05/23 05:50

出来なくはないですが、Java コードで POST のパラメーター処理とかを書かないといけないと思うので Servlet をかました方がすっきりする気がします。ある程度、taglib で隠ぺいできる可能性はありますが。
ypk

2020/05/23 05:54

コメントありがとうございます。 そうなのですね、、、ただ、今回はJSPを利用するよう指定されております。JSPを利用して、cmdbtn.jspからcmdbtn.jspに遷移をする方法をご教授いただけたら幸いです。 どうぞよろしくお願いいたします。
guest

回答1

0

ベストアンサー

あまり美しい解ではありませんが。

まず、form のボタンの type を submit に変えました。(そもそも POST しようとしていなかった。)

jsp

1 <input type="submit" name="add" value="追加"> 2 <input type="submit" name="delate" value="削除"> 3 <input type="submit" name="change" value="変更">

そして、POST で呼ばれたときの処理を追加しました。

jsp

1 <div> 2 <% 3 if (request.getMethod().equalsIgnoreCase("POST")) { 4 request.setCharacterEncoding("UTF-8"); 5 Enumeration<String> names = (Enumeration<String>) request.getParameterNames(); 6 while (names.hasMoreElements()) { 7 String key = (String) names.nextElement(); 8 out.println("[" + request.getParameter(key) + "]が押されました。"); 9 } 10 } 11 %> 12 </div>

この際、Enumeration を認識できなかったのでページディレクティブに import="java.util.Enumeration" を追加しました。

結果、以下のようなコードにしてみました。

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 import="java.util.Enumeration" 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 <p>★ボタンを押してください</p> 11 <form action="cmdbtn.jsp" method="post"> 12 <input type="submit" name="add" value="追加"> 13 <input type="submit" name="delate" value="削除"> 14 <input type="submit" name="change" value="変更"> 15 </form> 16 <div> 17 <% 18 // POST で呼ばれたときは、押されたボタンを説明する 19 if (request.getMethod().equalsIgnoreCase("POST")) { 20 request.setCharacterEncoding("UTF-8"); 21 Enumeration<String> names = (Enumeration<String>) request.getParameterNames(); 22 while (names.hasMoreElements()) { 23 String key = (String) names.nextElement(); 24 out.println("[" + request.getParameter(key) + "]が押されました。"); 25 } 26 } 27 %> 28 </div> 29</body> 30</html>

【解説】

java

1if (request.getMethod() == "POST") {

でリクエストの HTTP メソッドが「POST」かどうかを確認しています。

java

1request.setCharacterEncoding("UTF-8");

でリクエストの CharacterEncoding を指定することにより、文字化けを防いでいます。

java

1Enumeration<String> names = (Enumeration<String>) request.getParameterNames();

でパラメーター名の Enumeration を取得しています。

java

1while (names.hasMoreElements()) {

でまだ、パラメーターが残っていれば、繰り返すブロックを構成しています。

投稿2020/05/23 06:24

編集2020/05/23 08:37
Yasumichi

総合スコア1773

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

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

ypk

2020/05/23 07:40

回答ありがとうございました。 JSPにてif文を使おうとすると、エラーが発生してしまう問題を解決できました。大変勉強になりました。 大変申し訳ないのですが、下記のコードを入れてみたところ、out.println("[" + request.getParameter(key) + "]が押されました。");が出力されませんでした。 もし何か、その原因などご存じでしたらご教授いただけたら幸いです。自分も調べてみます。引き続きよろしくお願いいたします。 <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.Enumeration" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p>★ボタンを押してください</p> <form action="cmdbtn.jsp" method="post"> <input type="submit" name="add" value="追加"> <input type="submit" name="delate" value="削除"> <input type="submit" name="change" value="変更"> </form> <div> <% // POST で呼ばれたときは、押されたボタンを説明する if (request.getMethod() == "POST") { request.setCharacterEncoding("UTF-8"); Enumeration<String> names = (Enumeration<String>) request.getParameterNames(); while (names.hasMoreElements()) { String key = (String) names.nextElement(); out.println("[" + request.getParameter(key) + "]が押されました。"); } } %> </div> </body> </html>
Yasumichi

2020/05/23 07:48

貼り付けたコードで合ってますかね。当方では、問題なく動きます。 1 まず、サーバーからリソースを除去して、停止をしてから、再度実行してみてください。   サーバーにリソースが残ったまま、ソース修正、サーバーで実行を繰り返しているとソース変更前の動作になることがたまにあります。 2 初回起動時は、GET メソッドで呼ばれるため、当該部分は、出力されません。 3 「追加」、「削除」、「変更」ボタンを押した時、はじめて POST で呼ばれ、当該部分が表示されます。
ypk

2020/05/23 07:59

ご丁寧にありがとうございます。 どういうわけか、出力がなされないです、、、、ボタンは確かに押すことができているのですが、、、、 ちなみに自分は、Eclipseとトムキャットを利用しています。Yasumichiさんはそのような環境で実行されていますか?お手数をおかけいたしますが、どうぞよろしくお願いいたします。
Yasumichi

2020/05/23 08:03

私の環境は、Spring Tool Suite 4(Eclipseを元にしたもの) で Glassfish 4 のバージョンで動かしています。 Tomcat のバージョンはいくつですか?
ypk

2020/05/23 08:04

ご回答ありがとうございます。 Tomcatのバージョンは9になります。
Yasumichi

2020/05/23 08:15

確かに Tomcat だと動かないですね。こちらでも調べてみます。
ypk

2020/05/23 08:17

お手数をおかけしてしまいすみません。自分のほうでも、引き続き試行錯誤してみます。ありがとうございます。
Yasumichi

2020/05/23 08:35

if の条件を以下のように変えたら、Tomcat でも動きました。 if (request.getMethod().equalsIgnoreCase("POST")) {
ypk

2020/05/23 08:59

ご丁寧な回答及び対応誠にありがとうございました。 equalsIgnoreCase という概念を知りもしませんでした、、、 本当にありがとうございました。自分でも、復習をします。
Yasumichi

2020/05/23 09:02

文字列比較に == は使わない方が安全みたいですね。
ypk

2020/05/23 09:12

そうなのですね、、、、ありがとうございます。頭の片隅に入れておきます。 ちなみになのですが、もしJSPでifを使いたいときは <div> <% %> </div> で挟めば、ifを警告文なく利用することができるという認識で大丈夫でしょうか?
Yasumichi

2020/05/23 09:14

<% %> で囲めば良いです。<div></div> はあくまで HTML の構文なので関係ないです。
ypk

2020/05/23 09:18

ありがとうございます。 大変勉強になりました。今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問