JavaBeansとSessionってどっちも値を保持できるけど違いってなんですか?
これを聞かれてうまく答えることができなかったのと、調べても比較しているサイトがあまり出てこなかったのでここにまとめたいと思います📗
対象読者
- Java初心者(私もここです)
- なんとなくJavaBeansとSessionを使っていた
JavaBeansの長所、短所
長所
- getter,setterで入ってきた値を操作することができるJavabeansData.java
/* --------------------------------
今後の説明のために一通りコードを記載しています。
---------------------------------*/
public class JavaBeans implements Serializable { //永続化
//カプセル
private String name = "";
private int age = "";
private String tel = "";
private String gender = "";
private Date birthday = null;
JavaBeans(){}//コンストラクタ
//標準
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
/*省略*/
//変更
public void setBirthday(Date birthday){
//空文字ならnullを代入
if(birthday == ""){
this.birthday = null;
}
this.birthday = birthday;
}
}
- インスタンスに値を保持することで値の出し入れが簡単
javabeans.java
//インスタンス生成
JavaBeansData jbd = new JavaBeansData();
//インスタンスに登録
jb.setName(name);
jb.setAge(age);
jb.setTel(tel);
jb.setGender(gender);
jb.setBirthday(birthday);
//呼び出し
jb.getName();
jb.getAge();
jb.getTel();
jb.getGender();
jb.getBirthday();
短所
- 別のクラスに値を運ぶことができない
JavaBeansのみだと呼び出す際に毎回値の初期化を行ってしまうので永続化を行っていても値の持ち運びができない
javabeans2.java
///初期化されてしまう
JavaBeansData jbd = new JavaBeans();
jdb.getName();//値が初期値
Sessionの長所、短所
長所
別のクラスに値を持ち運べるsession2.java
//セッションの呼び出しでリクエストスコープから値を毎回取得するので初期化されない
HttpSession session = request.getSession();
短所
- たくさんの値を出し入れするのは不向き
session.java
//セッションスタート
HttpSession session = request.getSession();
//登録
session.setAttribute("name", name);
session.setAttribute("age", age);
session.setAttribute("tel", tel);
session.setAttribute("gender", gender);
session.setAttribute("birthday", birthday);
//呼び出し
session.getAttribute("name");
session.getAttribute("age");
session.getAttribute("tel");
session.getAttribute("gender");
session.getAttribute("birthday");
//セッションだと冗長的
- 値の操作ができない
まとめ
- 保持する値を操作したい
- 沢山の値を保持したい
上記のような場合はJavaBeansを使用
- 値をどこにでも持ち運びたい
- 持ち運ぶ数が少ない
上記のような場合はSessionを使用
それぞれの長所短所を理解した上での使い分けが非常に大事ですね✨
補足
>沢山の値を保持したいけどどこにでも持ち運びたい!!という事が多々あると思います。
その場合は、JavaBeansをSessionに入れましょう❗
hoge.java
//インスタンス生成
JavaBeansData jbd = new JavaBeansData();
//インスタンスに登録
jb.setName(name);
jb.setAge(age);
jb.setTel(tel);
jb.setGender(gender);
jb.setBirthday(birthday);
//セッションスタート
HttpSession session = request.getSession();
//JavaBeansのインスタンスをセッションに登録
session.setAttribute("jbd",jbd);
hoge2.java
//セッションスタート
HttpSession session = request.getSession();
//JavaBeansメソッドを扱えるようにセッションをキャスト
JavaBeansData jbd = (JavaBeansData)session.getAttribute("jbd")
jbd.getName();//保持された値が表示される