본문 바로가기
개발 노트/오답 노트

tomcat 실행 시 두 번 출력?

by tokkiC 2022. 5. 18.

JSP 강의를 듣고 따라 하던 중 이상한 점을 발견했다

요런 html 입력 폼에서 한글 입력 시 깨짐 문제를 서블릿을 이용하여

xml 을 수정하기 or 서블릿에 인코딩 코드추가 or 서블릿 필터에 인코딩 코드 추가  등의 방법으로

해결하고 서블릿 필터에 대해서 배우던 중 이상한 점이 보였다

인풋폼에 입력하고 필터효과를 보기 위해 chain.dofilter() 전 후로 고구마를 출력하도록 했는데

내 이클립스 콘솔에 한번이 아닌 여러번 출력이 뜬것이다. 난 요청 응답 시 한번씩만 출력하게 했는데!

이 문제를 검색해보니

That’s very normal. You have an application listener that loads a the context, and you have a servlet that loads on startup and loads the context also. Remove load on startup from the servlet declaration in web.xml.

Houcem Berrayana 라는 분의 답변 / Stack Overflow 링크

 

Spring - application Initialized twice?

When I starts to run my spring application my tomcat , the ContextRefreshedEvent fires twice. Please see the StackTrace. Dec 20, 2013 6:07:56 PM org.apache.tomcat.util.digester.SetPropertiesRule b...

stackoverflow.com

요약하자면

"그 프로젝트의 톰캣 폴더 환경설정의 web.xml 파일에서 load 부분을 검색해서 찾아서 지워라. 아래 코드처럼" 이다

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>   // 요놈 요놈 이 코드때문에 시작시 멋대로 로드 되는 것이라고 한다. 지우자
    </servlet>

저 load on start 부분을 지워주면 된다고 한다.

근데... 지우고 다시 서버를 재시작하고 새로고침해도 마찬가지 결과가 나오는것이다. 왜... 왜지?

도대체 왜 나에게 이런 시련을?!


한 10초간 콘솔창을 바라보며 생각하니 이유를 알 수 있었다

응? 에?

아직 폼을 전송하기 전에도 고구마들이 하나씩 출력되잖아? 아...


아니... 페이지마다 출력되는 거였어? 그러면...! 그래서 폼전송전 페이지, 전송후 페이지로 2번 출력된거였어?

xml 을 수정해서 페이지를 로드 할때마다 모든 페이지들이 필터를 거치게 하도록 했던걸 생각을 못했었다!


*/ 는 모든 페이지에 적용이지...

저 이유로 페이지마다 필터 적용이 되서 폼 전송 전, 폼 전송 후 페이지 모두에서 출력되니 2번 출력됐던것...

에휴...

댓글