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

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

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

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

Q&A

解決済

1回答

538閲覧

インスタンス化をした際のメソッド利用で実行時にnulが表示される

hiiro46

総合スコア21

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

0グッド

0クリップ

投稿2022/02/16 01:02

編集2022/02/16 04:26

下記のコードをご覧ください。

Hiromu46.java

java

1package servlet; 2 3public class Hiromu46 extends HttpServlet implements Serializable { 4 5private String name; 6private String id; 7private String password; 8 9protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 10 request.setCharacterEncoding("UTF-8"); 11 response.setContentType("text/html; charset=UTF-8"); 12 13 this.name = request.getParameter("name"); 14 this.id = request.getParameter("id"); 15 this.password = request.getParameter("password"); 16 17 Hiromu46 hiromu46 = new Hiromu46(); 18 request.setAttribute("user", hiromu46); 19 20 RequestDispatcher dispatcher = request.getRequestDispatcher("jsp/lesson.jsp"); 21 dispatcher.forward(request, response); 22 } 23 24public String[] getUser() { 25 String[] user = new String[3]; 26 user[0] = this.name; 27 user[1] = this.id; 28 user[2] = this.password; 29 30 return user; 31 } 32}

getParameterで取得した値を各フィールドに格納しています。
そしてインスタンス化してsetAttributeに保存。
フォワードでJspを設定しています。
メソッド経由で取得するためにgetUserメソッド設定。

次にJspファイルです。

jsp/lesson.jsp

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 import="servlet.Hiromu46"%> 3 4 <% Hiromu46 hiromu46 = (Hiromu46)request.getAttribute("user"); %> 5 6<!DOCTYPE html> 7<html> 8<head> 9<meta charset="UTF-8"> 10<title>フォワードサンプル</title> 11</head> 12<body> 13 14 <% for(int i = 0; i < hiromu46.getUser().length; i++){ %> 15 16 <p><%= hiromu46.getUser()[i] %> </p><br> 17 18 <% } %> 19 20</body> 21</html>

保存したインスタンスをgetAttributeで取得。
キャストしてクラス型変数に格納しています。
そして、getUserを呼び出し、for文で回しています。
しかし結果はnullが出力されます。


解決したいこと

・入力した値を出力させる


試したこと

インスタンス化したメソッドとメソッドのみでコンソールに出力してみた。

java

1 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // TODO Auto-generated method stub 3 request.setCharacterEncoding("UTF-8"); 4 response.setContentType("text/html; charset=UTF-8"); 5 6 this.name = request.getParameter("name"); 7 this.id = request.getParameter("id"); 8 this.password = request.getParameter("password"); 9 10 Hiromu46 hiromu46 = new Hiromu46(); 11 request.setAttribute("user", hiromu46); 12 System.out.println(getUser()[0]);   ←メソッドのみ 13 System.out.println(hiromu46.getUser()[0]);   ←インスタンスとメソッド 14 15 RequestDispatcher dispatcher = request.getRequestDispatcher("jsp/lesson.jsp"); 16 dispatcher.forward(request, response); 17 }

メソッドのみは入力値出力するが、インスタンスメソッドではnull出力になる。


知りたいこと

・インスタンス作成時の状態をnewするため、値入力する前の値が格納されているのか?
・入力した値をjspで出力するためにはどのように組めばいいのか?

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

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

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

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

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

jimbe

2022/02/16 02:35

コードのマークダウンでファイル名を書かれている個所には言語名( java や jsp ) をお書きください。 ファイル名等はマークダウン外に書いてください。
guest

回答1

0

ベストアンサー

JSP で取り出している Hiromu46 オブジェクトは doPost で Hiromu46 hiromu46 = new Hiromu46(); で作成されているモノであり、サーブレットコンテナによって生成されサーブレットとして動作中で request.getParameter で name 等のフィールドに値が設定される Hiromu46 オブジェクトとは 別モノ です。
ですので値入力する前も後もありません。両者に ( 同じクラスであるという以外 ) 関係はありません。

Hiromu46 はサーブレットですので JSP に渡すパラメータとしてはオプジェクトが巨大で不適切です。
パラメータとして使うデータオブジェクトを別途用意するほうが良いと思います。

以下はご提示のコードからのイメージです。(コンパイル・動作確認はしていません。)

java

1public User implements Serializable { 2 final String name; 3 final String id; 4 final String password; 5 6 User(String name, String id, String password) { 7 this.name = name; 8 this.id = id; 9 this.password = password; 10 } 11}

java

1 User user = new User( 2 request.getParameter("name"), 3 request.getParameter("id"), 4 request.getParameter("password") 5 ); 6 request.setAttribute("user", user);

jsp

1<% User user = (User)request.getAttribute("user"); %> 2 3<p><%= user.name %> </p><br> 4<p><%= user.id %> </p><br> 5<p><%= user.password %> </p><br>

投稿2022/02/16 02:46

編集2022/02/16 04:25
jimbe

総合スコア12646

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

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

hiiro46

2022/02/16 04:49

ありがとうございます!! 何とか解決することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問