기존에 잘 되던 홈페이지에 갑작스레 HTTP 404에러가 발생하였다. 방금까지 잘되던걸 확인했었는데 너무 당황스러워 일단 톰캣 재시작을 해도 마찬가지, 해당 경로를 찾아가도 정상적이고 로그를 보니 ClassNotFoundException 이 뜨는데 왜 이 에러가 뜨는지 이해가 안되고 너무 당황스러워 로그를 더 자세히 보지 못했네요ㅠ
잠깐 예전에 vue 프로젝트로 빌드하여 톰캣에 올렸던 적이 있는데 가끔 빌드된 파일들을 다시 못불러 올 때가 있어 tomcat에 올라간 화면 소스를 다시 불러오기 위해 work폴더를 지웠다가 재시작 했던 기억이 나서 그대로 해보니 해결되었는데 해당 문제에 대해 찾는 분이 있을까 공유합니다!
톰캣 경로에 가보면 work라는 폴더가 있는데 해당 폴더에 들어가보면 프로젝트의 폴더가 하나 나옵니다. 이를 지우거나 이름을 변경하고 재시작을 한다면 기존 폴더의 이름으로 다시 생성되는 것을 확인할 수 있습니다.
work 폴더는 jsp가 서블릿으로 변환되고 컴파일이 되는 공간으로 지워도 무방합니다. 원래는 톰캣이 재시작되면서 바뀌어야하는데 안바뀔 때 해당 경로로 가서 삭제 후 재시작하면 캐시 날라가면서 경로 다시 잡히게 됩니다.
Error Log
09-Nov-2023 17:15:58.923 심각 [http-nio-0.0.0.0-9004-exec-2] org.apache.catalina.core.ApplicationDispatcher.invoke 서블릿 [jsp]을(를) 위한 Servlet.service() 호출이 예외를 발생시켰습니다.
java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.jsp.front.tiles.layouts_005ffront_jsp
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:59)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:159)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:192)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:413)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
//////////////////////
09-Nov-2023 17:15:58.924 심각 [http-nio-0.0.0.0-9004-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke 경로 []의 컨텍스트 내의 서블릿 [action]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/jsp/front/tiles/layouts_front.jsp'.]을(를) 발생시켰습니다.
java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.jsp.front.tiles.layouts_005ffront_jsp
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
/////////////////////
Caused by: org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/jsp/error/layouts.jsp'.
Caused by: org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/jsp/error/layouts.jsp'.
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:399)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:238)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:221)
at org.apache.tiles.renderer.DefinitionRenderer.render(DefinitionRenderer.java:59)
at org.springframework.web.servlet.view.tiles3.TilesView.renderMergedOutputModel(TilesView.java:132)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
... 26 more
Caused by: java.io.IOException: ServletException including path '/WEB-INF/jsp/error/layouts.jsp'.
at org.apache.tiles.request.servlet.ServletUtil.wrapServletException(ServletUtil.java:61)
at org.apache.tiles.request.servlet.ServletRequest.doInclude(ServletRequest.java:245)
at org.apache.tiles.request.AbstractClientRequest.dispatch(AbstractClientRequest.java:54)
at org.apache.tiles.request.render.DispatchRenderer.render(DispatchRenderer.java:47)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:259)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:397)
... 36 more
Caused by: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.jsp.error.layouts_jsp
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:59)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:159)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:192)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:413)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:713)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:583)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:519)
at org.apache.tiles.request.servlet.ServletRequest.doInclude(ServletRequest.java:243)
... 40 more