前提・実現したいこと
『スッキリわかるサーブレット&JSP』第10章「アプリケーション作成」におけるつぶやきアプリの応用で、サーブレットとJSPを用いて家計簿アプリを作成しています。
品物と金額を入力し投稿すると、事前に入力したユーザー名と合わせて表示される機能を実装中に以下のエラーメッセージが発生しました。
恥ずかしながら自力での解決が出来ませんでしたのでお知恵を拝借したいと思います。
よろしくお願いします。
発生している問題・エラーメッセージ
タイプ 例外報告
説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。
例外
java.lang.NullPointerException
model.PostExpensesLogic.execute(PostExpensesLogic.java:7)
servlet.Main.doPost(Main.java:96)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
注意 原因のすべてのスタックトレースは、サーバのログに記録されています```
該当のソースコード
###クラス
package model;
import java.io.Serializable;
public class Expenses implements Serializable{
private String userName;
private String text;
private String money;
public Expenses() {} public Expenses(String userName, String text, String money) { this.userName = userName; this.text = text; this.money = money; } public String getUserName() { return userName; } public String getText() { return text; } public String getMoney() {return money; }
}
package model;
import java.util.List;
public class PostExpensesLogic {
public void execute(Expenses expenses, List<Expenses> expensesList) {
expensesList.add(0,expenses); //先頭に追加
}
}
##サーブレット
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//リクエストパラメータの取得
request.setCharacterEncoding("UTF-8");
String text = request.getParameter("text");
String money = request.getParameter("money");
//入力値チェック
if(text != null && text.length() != 0 && money != null && money.length() != 0){
//アプリケーションスコープに保存された家計簿リストを取得
ServletContext application = this.getServletContext();
@SuppressWarnings("unchecked")
List<Expenses> expensesList =
(List<Expenses>)application.getAttribute("ExpensesList");
//セッションスコープに保存されたユーザー情報を取得
HttpSession session = request.getSession();
User loginUser = (User)session.getAttribute("loginUser");
//家計簿を家計簿リストに追加
Expenses expenses = new Expenses(loginUser.getName(), text, money);
PostExpensesLogic postExpensesLogic = new PostExpensesLogic();
postExpensesLogic.execute(expenses, expensesList);
//アプリケーションスコープに家計簿リストを保存
application.setAttribute("expensesList", expensesList);
}
//メイン画面にフォワード
RequestDispatcher dispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");
dispatcher.forward(request, response);
}
##JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model.User, model.Expenses, java.util.List" %>
<% //セッションスコープに保存されたユーザー情報を取得
User loginUser = (User) session.getAttribute("loginUser");
//アプリケーションスコープに保存された家計簿リストを取得
@SuppressWarnings("unchecked")
List<Expenses>expensesList =
(List<Expenses>) application.getAttribute("expensesList");
%>