[Tomcat 설정] 인텔리제이에서 옛날 이클립스 프로젝트 가져오기

상황설명

약 10년 전에 만든 프로젝트를 이클립스로 실행해야했는데, 아무래도 계속 이클립스로 개발하기는 힘들 것 같아서 초반에 조금 고생하더라도 인텔리제이에 이클립스 프로젝트를 셋팅하기로 했다. 그동안 스프링 부트가 톰캣 설정을 다 해줘서 편했는데…ㅋㅋ

커뮤니티 버전으로도 할 수 있을 것 같았는데, 하다가 결국 intellij ultimate 버전을 새로 깔고 진행했다.

별로 다시 이렇게 설정할 일은 없을 것 같아, 기록으로 남기기로 했다.


1 : Runtime 추가 및 Library 설정해주기

image-20220406175514214

  • 밑에 블로그 보면서 설정 (이부분을 써주렴^^)
  • 결국 이렇든 저렇든 Modules에 라이브러리 추가는 해줘야되네..흠


2. 톰캣 설정

  • edit configuration -> deployment -> application context 를 ‘/’ 로 변경해줌
    • artifact 인 servername_Web_exploded 가 path에 붙는 것을 방지해줌
    • 이걸 설정안해주면 localhost:8080/servername_Web_exploded /main.do 이런식으로 접근해야함


3. 만난 에러

톰캣이 돌면서 실행되어 메인페이지까지는 접속이 되었으나, 다른 jsp 파일을 불러오려고 하면 에러가 발생했다.

확인해보니 jsp에서 NullPointerException이 나고 있었다.

분명 원본 이클립스에서는 실행이 잘 되었기 때문에, 소스문제가 아니라 내가 뭔가 빠뜨린 설정이 있다고 생각했다.

image-20220407172405243


혹시나 참조할 분이 있을까봐 에러메세지는 다음과 같이 났다.

java.lang.NullPointerException
	at org.apache.jsp.jsp.fp_005fadmin.log_005fin_jsp._jspInit(log_005fin_jsp.java:25)
	at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52)
	at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:164)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:321)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at com.ejet.controller.ActionForward.forward(ActionForward.java from InputFileObject:358)
	at com.ejet.controller.ActionForward.execute(ActionForward.java from InputFileObject:322)
	at com.ejet.controller.ActionForward.execute(ActionForward.java from InputFileObject:273)
	at com.ejet.controller.ActionInvoker.service(ActionInvoker.java from InputFileObject:115)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:610)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503)
	at java.lang.Thread.run(Thread.java:662)


3-1. 해결

해당 스택오버플로우를 보고 해결하였다.

java.lang.NullPointerException at org.apache.jsp.foo_jsp._jspInit(foo_jsp.java:22)

생성된 classes 폴더를 열고, WEB-INF > lib 폴더를 확인해보자.

image-20220407172602612


컴파일한 class 파일이 다음 경로에 생성되는데, servlet-apijsp-api , el-api jar 파일이 톰캣과 충돌해서 문제가 발생할 수 있다고 한다.

그래서 servlet-apijsp-api 두 파일을 삭제하고 실행했더니 잘 되었다.

여기서 의문은 빌드하면 다시 두 파일이 생기게 된다는 것인데, 처음부터 아예 제외하는 방법은 없을까?

혹시 알고계시는 분이 있다면 댓글에 남겨주세요..

References

댓글남기기