redisセッション共有におけるシーケンス化の問題
4969 ワード
今日セッションオブジェクトのredis(setメソッド)への格納中に、空のポインタ異常に遭遇しました.コードは次のとおりです.
プロパティは次のとおりです.
出力jspコードは次のとおりです.
エラーの原因:AccountBeanはセッションの属性として、セッションがSerializableを継承し、redisに永続化されて保存されるため、属性を作成したAccountBeanもredisに格納するにはシーケンス化されなければならない.
public class CheckAccount extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
HttpSession session=request.getSession();
AccountBean account=new AccountBean();
String username=request.getParameter("username");
String password=request.getParameter("password");
account.setPassword(password);
account.setUsername(username);
if((username!=null)&&(username.trim().equals("jsp"))){
if((password!=null)&&(password.trim().equals("1"))){
session.setAttribute("account", account);
SessionService.getInstance().SaveSession(session);
//System.out.println(session.getId());
String logon_suc="session.jsp";
response.sendRedirect(logon_suc);
return ;
}
}
String logon_fail="fail.jsp";
response.sendRedirect(logon_fail);
return;
}
public void doPost (HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
doGet(request,response);
}
}
プロパティは次のとおりです.
public class AccountBean {
private static final long serialVersionUID = 1390366007623566261L;
private String username="";
private String password="";
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
出力jspコードは次のとおりです.
<body>
<%=request.getSession().getId()%><br/>
<% AccountBean account=(AccountBean)request.getSession().getAttribute("account");%>
user name:<%=account.getUsername() %><br/>
password:<%=account.getPassword() %><br/>
</body>
エラーの原因:AccountBeanはセッションの属性として、セッションがSerializableを継承し、redisに永続化されて保存されるため、属性を作成したAccountBeanもredisに格納するにはシーケンス化されなければならない.