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

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

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

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

servlet

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

Q&A

解決済

1回答

9174閲覧

jsp、servletで値を上書きせず、残して出力する方法

Kyouko_kisaragi

総合スコア48

JSP

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

servlet

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

0グッド

0クリップ

投稿2016/09/10 11:50

編集2016/09/10 12:02

jspから値を入力し、java(servlet)で処理を行い、また別のjspで表示させる処理を行うプログラムを作成しています。
値を表示させるところまではできたのですが、一度入力した値が上書きされてしまいます。上書きされることなく、残るようにしたいです。

以下、ソースです。
『Input.jsp』から入力し、
『Test.java』で処理を行い、
『Output.jsp』で出力をしようとしています。

ちなみに、入力画面と出力画面は同じページ内に上下で分けて表示する形式になっていますが、
今回はおそらく関係ないのでソース表示を省略しています。

sessionとArraylistを使用するのかな、と考えているのですが、
使い方がわかりません。

Test.java

public class Test extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { this.doPost(req, res); res.setContentType("text/html; charset=UTF-8"); } protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=UTF-8"); // テキストボックスからデータを受け取る String input = req.getParameter("param"); req.setAttribute("input", input); // 今までの入力分を取得 String[] oldData = req.getParameterValues("input"); String[] Array = oldData; int i = Array.length; if (Array == null) { Array[i] = ""; } HttpSession session = req.getSession(); req.setAttribute("oldData", oldData); RequestDispatcher dispathcer = req.getRequestDispatcher("/jsp/C18_HelloWeb_Output.jsp"); dispathcer.forward(req, res); } }

Input.jsp

<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>C18_HelloWeb_Input</title> <script type="text/javascript" charset=Shift-JIS> <!-- function startAlert(){ if (document.frm.param.value == "") alert('空です'); }} --> </script> </head> <body> <center> <font size=5px>入力画面</font> </center> <br> <form name = "frm" action="http://localhost:8080/Webtest/Test/url" method="POST" target="output"> <input type="text" name="param" size=20 onclick="startAlert()"> <input type="submit" value="クエリ送信"> </form> </body> </html>

Output.jsp

<%@ page language="java" contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS"%> <%@page import="java.util.*" import="java.io.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>C18_HelloWeb_Output</title> </head> <body> <center> <font size=5px>出力画面</font> </center> <br> <% if (request.getAttribute("input") != null) { %> <%=request.getAttribute("input")%> <% } %> <br> <% if (request.getAttribute("oldData") != null) { %> <%=request.getAttribute("oldData")%> <% } %> <!-- <%if (request.getAttribute("AllData") != null) {%> <%=request.getAttribute("AllData")%> <%}%> --> </body> </html>

よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

複数のサーブレットやJSP間でデータを受け渡しするためにはセッションスコープを利用する必要があります。
参考:データの格納先と寿命(スコープ)

以下のコードからするとリクエストスコープで受け渡ししようとしているように見えますが、Testサーブレットに対するリクエストと Output.jsp に対するリクエストは別オブジェクトですので、データの受け渡しはできません。

Test.java

Java

1 req.setAttribute("oldData", oldData);

Output.jsp

Java

1 <%=request.getAttribute("oldData")%>

あと、 ちょっと気になったのですが、以下のコードでは Input.jsp から送られてきた param パラメータの値を oldData に取ろうとしているのかもしれませんが、受け渡しできていないとお思われます。setAttributeしたものを getParameterValues では参照できないと思います。

Java

1 // テキストボックスからデータを受け取る 2 String input = req.getParameter("param"); 3 req.setAttribute("input", input); 4 // 今までの入力分を取得 5 String[] oldData = req.getParameterValues("input");

投稿2016/09/10 12:43

mit0223

総合スコア3401

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

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

wk_rin

2016/09/10 14:09

アドバイスありがとうございます。 Test.javaとOutput.jsp間の値渡しはセッションスコープを使用する、という考えでいいのでしょうか。
mit0223

2016/09/10 18:45

はい、セッションスコープを使ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問