
버튼 안 먹음 = 이벤트 바인딩 문제라고 생각을 했다
[로그] command : /ItemList.do 12월 10, 2025 12:47:12 오후 org.apache.catalina.core.StandardWrapperValve invoke 심각: 경로가 [/paginationPro]인 컨텍스트의 서블릿 [controller.common.FrontController]을(를) 위한 Servlet.service() 호출이 예외를 발생시켰습니다. java.lang.NullPointerException: Cannot invoke "controller.common.ActionForward.isRedirect()" because "forward" is null at controller.common.FrontController.doAction(FrontController.java:59) at controller.common.FrontController.doGet(FrontController.java:27) at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
이런 에러가 발생했다
문제 원인을 보면
java.lang.NullPointerException: Cannot invoke "controller.common.ActionForward.isRedirect()" because "forward" is null
어쩌고저쩌고 하는 부분이 있다
FrontController.java에서 forward.isRedirect()를 호출했는데, forward가 null이라는 뜻이다
왜 null일까?
ItemListAction.java에서 AJAX 요청 시 이렇게 한다
if ("true".equals(ajax)) {
response.setContentType("application/json; charset=UTF-8");
Map<String, Object> map = new HashMap<>();
map.put("list", list);
map.put("totalPage", dao.getTotalPage(limit));
Gson gson = new Gson();
response.getWriter().write(gson.toJson(map));
return null; // <--- 여기서 forward를 null로 반환
}
일반 요청이 아닌 AJAX 요청이면 ActionForward를 반환하지 않고 null을 반환
FrontController는 반드시 ActionForward를 호출하도록 작성되어 있어서 NPE 가 발생한다
즉, AJAX 요청일 때 FrontController가 null 체크 없이 forward를 바로 사용하려고 해서 문제가 발생한 것이다.
해결 방법
FrontController에서 null 체크
doAction() 안에서 forward가 null인지 확인 후, null이면 JSP 포워드 처리 안하도록 수정
ActionForward forward = action.execute(request, response);
if(forward != null){
if(forward.isRedirect()){
response.sendRedirect(forward.getPath());
} else {
request.getRequestDispatcher(forward.getPath()).forward(request, response);
}
}
// null이면 AJAX 처리였으므로 아무것도 하지 않음
해결 완룡~~~