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

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

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

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

Java

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

servlet

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1451閲覧

POST元ではないjspのみを更新したい

saksak_planner

総合スコア6

JSP

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

Java

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

servlet

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/06/19 00:17

編集2020/06/22 15:40

初めて半月です。
的確に説明できず申し訳ありませんが
宜しくお願いします。

前提・実現したいこと

A.jspからPOSTを行い、サーブレットでBeanを書き換え、B.jspにBeanの情報を更新したい。

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

現在は、AからPOSTしてAにフォワード、Bのリロードを行うことでBは更新されてはいますが2回目の更新から再送信ダイアログが常に出てしまうのとAのフォームのユーザー操作が初期化されてしまいます

試したこと

ajaxでAからBの一部を更新する事はできましたが、BeanはActionを使用して更新しているためうまく組み合わせることができませんでした。

考え方自体が間違っているでしょうか。
ご教示いただけますと幸いです。

loin

1<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<!DOCTYPE html> 3<html> 4<head> 5<meta charset="UTF-8"> 6<title>ログインフォーム</title> 7<style> 8 from backgroud-color: red; 9</style> 10</head> 11<body> 12 13<div class="log-form" align="center"> 14 <h5>Login to your account</h5> 15 <form action = "http://localhost:8080/fileConnector/LoginAction" method="post"> 16 <p>user_id : <input type="text" name = "user_id" title="userid" placeholder="userid" /></p> 17 <p>user_comment : <input type="text" name = "user_comment" size="30" maxlength="20" placeholder="comment" /></p> 18 <p><input type="submit" value="Login"></p> 19 </form> 20</div><!--end log form --> 21</body> 22</html>

JAVA

1 2LoginAction.java】 3 4package application; 5 6import java.io.IOException; 7 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13import javax.servlet.http.HttpSession; 14 15import bean.User; 16 17/** 18 * Servlet implementation class TEST 19 */ 20@WebServlet("/LoginAction") 21public class LoginAction extends HttpServlet { 22 private static final long serialVersionUID = 1L; 23 24 /** 25 * @see HttpServlet#HttpServlet() 26 */ 27 public LoginAction() { 28 super(); 29 // TODO Auto-generated constructor stub 30 } 31 32 /** 33 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 34 */ 35 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 36 // TODO Auto-generated method stub 37 response.getWriter().append("Served at: ").append(request.getContextPath()); 38 } 39 40 /** 41 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 42 */ 43 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 44 45 // TODO Auto-generated method stub 46 request.setCharacterEncoding("UTF-8"); 47 48 HttpSession session = request.getSession(); 49 50 int user_id = Integer.parseInt(request.getParameter("user_id")); 51 String user_password = request.getParameter("user_password"); 52 String user_comment = request.getParameter("user_comment"); 53 54 User user = new User(); 55 56 user.setUserId(user_id); 57 user.setPassword(user_password); 58 user.setComment(user_comment); 59 60 session.setAttribute("user", user); 61 request.getRequestDispatcher("home.jsp").forward(request, response); 62 63 } 64 65}

JSP

1 2【home.jsp】 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6<!DOCTYPE html> 7<html> 8<head> 9<meta charset="UTF-8"> 10<title>Insert title here</title> 11</head> 12 13<frameset cols="500,*"> 14 15<frame src="A.jsp" name="frame1" title="左フレーム"> 16<frame src="B.jsp" name="frame2" title="右フレーム"> 17 18<noframes> 19<body> 20<p>フレームの代替内容</p> 21</body> 22</noframes> 23 24</frameset> 25 26</body> 27</html>

JSP

1 2【A.jsp】 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6<!DOCTYPE html> 7<html> 8<head> 9<meta charset="UTF-8"> 10<title>Insert title here</title> 11</head> 12<body> 13 <h3>A.jsp</h3> 14 <br><br> 15 16 <form action="http://localhost:8080/fileConnector/SampleServlet" method="post"> 17 <p>コメントの書き換え<br> 18 <input type="text" name = "user_comment" size="30" maxlength="20" placeholder=${user.comment}></p> 19 <p><input type="submit" value="update"></p> 20 </form> 21 22</body> 23</html>

JSP

1 2【B.jsp】 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6<%@page import="bean.User"%> 7 8<!DOCTYPE html> 9<html> 10<head> 11<meta charset="UTF-8"> 12<title>Insert title here</title> 13</head> 14<body> 15 <h3>B.jsp</h3> 16 <br><br> 17 18 <% User user = (User) session.getAttribute("user");%> 19 <p>ユーザーID : <%=user.getUserId() %></p> 20 <p>コメント : <%=user.getComment() %></p> 21 22</body> 23</html>

Servlet

1 2【SampleServlet.java】 3 4package application; 5 6 7import java.io.IOException; 8 9import javax.servlet.RequestDispatcher; 10import javax.servlet.ServletException; 11import javax.servlet.annotation.WebServlet; 12import javax.servlet.http.HttpServlet; 13import javax.servlet.http.HttpServletRequest; 14import javax.servlet.http.HttpServletResponse; 15import javax.servlet.http.HttpSession; 16 17import bean.User; 18 19/** 20 * Servlet implementation class SampleServlet 21 */ 22@WebServlet("/SampleServlet") 23public class SampleServlet extends HttpServlet { 24 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 25 26 request.setCharacterEncoding("UTF-8"); 27 28 HttpSession session = request.getSession(); 29 String user_comment = request.getParameter("user_comment"); 30 31 User user = new User(); 32 user.setComment(user_comment); 33 34 session.setAttribute("user", user); 35 36 RequestDispatcher dispatcher = request.getRequestDispatcher("B.jsp"); 37 dispatcher.forward(request, response); 38 } 39 40} 41

【ログインフォーム】
イメージ説明

【フレームでの2画面表示】
イメージ説明

【POST実行後】
イメージ説明

【Eclipse構成】
イメージ説明

実現したいことの簡易コードを作成しました。
A.jspからコメントをPOSTして、B.jspのコメントを書き換えたいです。
その際には、innerHTMLは使用せずにBeanを書き換えたものを再表示する方法で
B.jspを更新しなければなりません。

作成いただいたコードを実行すると、A.jspがB.jspに(そのようなコーディングであるためなのですが)なります。

A.jspのテキストが「こんにちは」のまま、B.jspのBean再読み込みはできるのでしょうか。

どうかお知恵をお貸しください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/06/21 03:36

コードがないので一言、 コードが悪い可能性が高いです
saksak_planner

2020/06/22 15:11

簡易的なコードを上げましたのでご確認いただけますと幸いです。
guest

回答3

0

アドバイスいただきありがとうございました。

A.jsp のコードと、SampleServlet.java(ユーザーIDが出力されていない個所も修正しました)の
2つを以下に書き換えることで意図する動きが実現できました。

フォワードとリダイレクトについて、理解を深めたいと思います。

A-pZ様、asahina1979様 ありがとうございました。

JSP

1 2【A.jsp】 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6<!DOCTYPE html> 7<html> 8<head> 9<meta charset="UTF-8"> 10<title>Insert title here</title> 11</head> 12<body> 13 <h3>A.jsp</h3> 14 <br><br> 15 16 <script> 17 <!-- 18 function sample() { 19 document.sampleform.action="http://localhost:8080/fileConnector/SampleServlet"; 20 document.sampleform.method="post"; 21 document.sampleform.target="frame2"; 22 } 23 // --> 24 </script> 25 26 <form name="sampleform" onSubmit="sample()"> 27 <p>コメントの書き換え<br> 28 <input type="text" name = "user_comment" size="30" maxlength="20" placeholder=${user.comment}></p> 29 <p><input type="submit" value="update"></p> 30 </form> 31 32</body> 33</html> 34

JAVA

1 2SampleServlet.java】 3 4package application; 5 6import java.io.IOException; 7 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13import javax.servlet.http.HttpSession; 14 15import bean.User; 16 17/** 18 * Servlet implementation class SampleServlet 19 */ 20@WebServlet("/SampleServlet") 21public class SampleServlet extends HttpServlet { 22 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 24 User user = new User(); 25 26 request.setCharacterEncoding("UTF-8"); 27 28 HttpSession session = request.getSession(); 29 30 User sessionUser = (User) session.getAttribute("user"); 31 32 // ID保持 33 if(sessionUser != null) { 34 user.setUserId(sessionUser.getUserId()); 35 } 36 37 String user_comment = request.getParameter("user_comment"); 38 user.setComment(user_comment); 39 40 session.setAttribute("user", user); 41 42 String url = "B.jsp"; 43 response.sendRedirect(url); 44 45// RequestDispatcher dispatcher = request.getRequestDispatcher("B.jsp"); 46// dispatcher.forward(request, response); 47 } 48 49}

投稿2020/06/23 15:14

saksak_planner

総合スコア6

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

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

0

ベストアンサー

設計だけ

左フレーム

doGet

  • フォーム画面を表示する
  • フォームポストのターゲットは右フレーム

doPost

  • 実装しない

右フレーム

doGet

  • 画面を表示する

doPost

  • ポストされたデータで session を更新
  • 自分自身にredirect (forwardやincludeじゃないよ)

投稿2020/06/22 22:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

saksak_planner

2020/06/23 15:01

無事、意図することが実現できました。 ありがとうございました!
guest

0

A.jsp から POST(ここでは /SampleServlet とする) → サーブレットでBean作成 → その結果をB.jspで表示するのであれば、

java

1import java.io.IOException; 2 3import javax.servlet.RequestDispatcher; 4import javax.servlet.ServletException; 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10@WebServlet("/SampleServlet") 11public class SampleServlet extends HttpServlet { 12 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 13 SampleBean bean = new SampleBean(); 14 15 // リクエストパラメータから値を取得した後、beanの中身を作成していく処理(略) 16 17 request.setAttribute("bean", bean); 18 19 RequestDispatcher dispatcher = request.getRequestDispatcher("B.jsp"); 20 dispatcher.forward(request, response); 21 } 22}

で良いかと。

B.jspを表示したとき、ブラウザに表示されるURLは /SampleServlet になっています。これはA.jspからPOST送信して /SampleServlet を表示した結果です。
その結果画面をリロードした時には、再度同じ内容で送信することになりますので、POSTして良いかをブラウザが判断しています。

投稿2020/06/21 13:27

A-pZ

総合スコア12011

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

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

saksak_planner

2020/06/22 15:12

アドバイスありがとうございます。 作成いただいたコードを基に作成した簡易コードをあげましたので 今一度ご確認いただけないでしょうか。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問