<jsp:include> 액션 태그에서 <jsp:param> 사용시 Expecting jsp:param 오류
<jsp:include>를 통해 서브 페이지를 포함시켜 사용하고, 이때 <jsp:param> 액션 태그를 통해 request 파라미터를 넘기려 했으나 다음과 같은 오류가 발생했습니다. 재밌는것은 main.jsp를 10번 요청하면 1 ~ 2번 오류가 발생하고 나머지는 정상적으로 결과가 리턴 된다는 점이었습니다. Stack Trace 정보를 바탕으로 디버깅이라도 해보려고 변환된 서블릿 클래스를 찾아보려 했으나 이상하게 컴파일된 서블릿 클래스가 존재하지 않았습니다.



오류 메시지라도 읽어보자는 마음에 살펴보았습니다. 영알못인 제 기준으로 오류 내용을 살펴보자면 <jsp:param> 액션 태그를 사용하기 위해서는 name과 value 속성을 사용해야 한다 정도로 의역할 수 있을 것 같습니다.
/main.jsp (line: 15, column: 53) Expecting "jsp:param" standard action with "name" and "value" attributes


원인 파악
(그런데 이미 그렇게 하고 있다고..)혹시나 해서 소스를 보았더니 태그 옆에 해둔 주석이 문제가 아닌가 싶었습니다. 주석을 제거해보니 혹시나가 역시나 였습니다. 오류 메시지도 다시 보니 main.jsp의 15번 라인에는 주석이 달려 있더군요.
      <jsp:include page="/included.jsp" flush="false">
            <jsp:param name="value1" value="hello."/>
            <jsp:param name="value2" value="<%= pageName %>"/><%--  주석주석  --%>                
      </jsp:include>
cs

 

 

또한 스택 정보에 jasper.compiler 쪽 오류인것으로 봐서 JSP 페이지가 서블릿으로 변환하는 과정에서 주석때문에 제대로 컴파일 되지 않았을 수 있겠다는 확신이 들었습니다.

<jsp:param> 액션태그는 서블릿으로 변환되는 시점에 <jsp:include> 액션태그에 지정한 대상 JSP 페이지에게(여기서는 included.jsp) 마치 클라이언트에서 쿼리스트링으로 파라미터를 날린것처럼 동작시킵니다.

예를들어 included.jsp 페이지 입장에서는 제어가 자신에게 넘어왔을때 마치 클라이언트(브라우저)가 /included.jsp?value1=hello&value2=pageName값 과 같이 요청한것으로 착각하게 됩니다.

그런데 서블릿으로 컴파일 하는 과정에서 위와 같은 동작을 구현해야 하는데 /included.jsp?value1=hello&value2=pageName값<%----%> 와 같은 식으로 주석이 붙어버리기 때문에 오류가 난것이 아닌가 하는 추측이 되었습니다. 아무튼 확실한 것은 원인이 주석 때문이라는 사실입니다.

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,