본문 바로가기
IT만들기/Java

jsp 반영 안될 때

by 커피향처럼 2017. 6. 17.

JSP를 운영 서버에 업로드 하였는데 예전의 JSP 화면이 나오고 새로 올린 화면이 나오지 않는 현상을 의외로 많이 겪습니다.

간혹 이전에 그런 현상을 해결하고도 그때를 잊고 다시 원인 찾는라 헤멜때가 종종 있습니다.

WAS(jeus,weblogic)에 jsp가 반영되지 않을 때 조치 하는 방법과 그런 현상이 최대한 발생하지 않게 조치 하는 방법을 설명하겠습니다.

jsp의 서비스 방식을 정확하게 알고 있다면 반영이 안될 때 해결 방법을 쉽게 생각해 낼 수 있을 겁니다. 원인이 머든 간에 즉시 해결하여 정기 운영서버 배포일에 불필요한 삽질을 하지 않을 수 있습니다.

jsp의 서비스 방식은 간단합니다. 이것만 꼭 알고 있으면 되요~~

클라이언트가 접속하게 되면 

jsp -> java -> servlet class 파일로 변환 컴파일되어 사용자에게 서비스 되게 됩니다. 

jsp -> java -> servlet class -> html 데이터 -> web서버 -> 클라이언트

이것은 최초의 사용자가 서비스 요청 하였을 때 단 한번만 이루어지게 됩니다.

그 후 클라이언트들이 요청하였을 때는 servlet class로만 서비스를 하게 됩니다.

java나 servlet class로 컴파일되는 기준은 jsp가 java나 servlet class 파일보다 변경일자(change date)가 클 때 발생합니다.

예를 들어 서버에 업로드된 jsp 파일의 변경일자가 11시 10분인데 java 또는 servlet class 파일은 11시 11분이라면 변환이 되지 않고 jsp 파일의 변경일자가 11시 12분이라면 java 파일 재생성, servlet class 재생성이 되게 됩니다.

include된 jsp 파일이 아닌 단독 jsp파일은 touch 명령으로 현재일시로 시간을 변경하면 되고 include jsp라면 jsp가 include된 jsp까지 2개의 jsp 파일의 시간을 변경해야 합니다. 아니면 생성된 java, servlet class 파일을 모두 삭제하면 jsp가 재 컴파일되어 정상적인 서비스가 이루어지게 됩니다.

a.jsp 파일에서 b.jsp include가 다음과 같이 되어 있다면
<%@ include file="b.jsp" %>

b.jsp가 a.jsp에 포함되어 최종적으로 a.jsp가 컴파일 됨으로 a.jsp를 변경일자를 변경하여 java 파일보다 최신으로 해줘야 합니다.


include jsp가 반영 안될 때 처음부터 발생하지 않게 하면 jsp를 만듭니다.


* 동적 include 사용

<jsp:include page="b.jsp“ flush="false"></jsp:include>

일반적으로 flush는 false로 해야 합니다. true로 하게 되면 b.jsp의 호출이 끝나자 마자 header정보를 클라이언트로 전송하기 때문에 부모 jsp에서 어떤 처리를 하더라도 클라이언트로 전송된 header 정보를 변경 할 수가 없습니다.

다음은 주의해서 코딩해줘야 하는 부분입니다. b.jsp에서 parameter 값을 받을려면 다음과 같이 사용해야 합니다.

<jsp:include page="b.jsp" flush="false">

        <jsp:param name="param1" value="${param1}"/>

</jsp:include>

이렇게 <jsp:param> EL 태그로 a.jsp에서 b.jsp로 값을 넘겨줘야 합니다.

b.jsp에서 받은 값을 바로 출력하는 예는 다음과 같이 하면 됩니다.

<%=request.getParameter(param1) %> 또는 ${param1}

이 부분은 꼭 주의하시기 바랍니다. a.jsp에 <jsp:param> 없이 그 값을 b.jsp에서 ${param1}과 같이 받을 수는 없습니다.


* jeus의 jsp의 java, servlet class 파일 위치

$JEUS_HOME/webhome/컨테이너명/_generated_/어플리케이션명/jeus_jspwork

rm으로 jsp 캐시를 몽땅 지우면 모든 jsp가 재컴파일 되겠죠?


댓글