📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
Servlet&Jsp | 2018. 8. 6. 09:41

[서블릿/JSP] <jsp:param> 액션태그와 사용자 요청 파라미터 겹칠 때 처리 우선순위

이전글

[서블릿/JSP] <jsp:include> 액션 태그 사용법. <jsp:param>으로 데이터 넘기기. 데이터 공유하기

<jsp:param> 액션태그와 사용자 요청 파라미터가 겹치는 경우

만약 greeting이라는 파라미터 속성에 대해 브라우저에서 URL?greeting=xxxx와 같이 파라미터를 보냄과 동시에 <jsp:param name="greeting" value="xxxx">를 사용하는 것처럼 같은 속성에 대해 겹치게 되면 어떻게 될까요? 이때에는 포함되는 페이지 입장에서 우선적으로 <jsp:param>에 명시된 값을 사용합니다.

main.jsp

<%
      request.setCharacterEncoding("UTF-8");
%>


<jsp:include page="/included.jsp" flush="false">
      <jsp:param name="greeting" value="안녕하세요." />
</jsp:include>

<%= request.getParameter("greeting") %>

included.jsp

<%
      String greeting = request.getParameter("greeting");
%>

<%= greeting %>

다음과 같이 http://localhost/main.jsp?greeting=hello로 요청을 하게 되면 포함되는 페이지에서는 넘겨받은 "안녕하세요."를 출력하고 있습니다. 그런데 included.jsp 페이지 처리 이후 다시 main.jsp로 제어가 돌아왔을 때에는 hello가 출력됩니다.

<jsp:param> 액션태그의 값은 넘겨받는 페이지에서만 적용된다

포함되는 페이지인 included.jsp에서 <jsp:param> 액션태그의 값이 우선순위를 갖는 이유는 제어가 넘어갈 때 별도로 값을 추가하여 넘기기 때문입니다. 또한 <jsp:param>을 통해 넘긴 데이터는 <jsp:param> 액션태그로 포함되는 페이지에서만 사용할 수 있습니다.

main.jsp

<%
      request.setCharacterEncoding("UTF-8");
%>
<jsp:include page="/included.jsp" flush="false">
      <jsp:param name="greeting" value="안녕하세요." />
</jsp:include>

--------------------main.jsp-------------<br>
<%    String[] greeting = request.getParameterValues("greeting");%>
파라미터 개수 : <%= greeting.length %><br>
<%= greeting[0] %><br>
--------------------main.jsp-------------

included.jsp

--------------------includes.jsp-------------<br>

파라미터 개수 : <%= greeting.length %><br>
<%= greeting[0] %><br>
<%= greeting[1] %><br>
--------------------includes.jsp-------------<br>

http://localhost/main.jsp?greeting=hello로 요청한 결과입니다. request.getParameterValues()로 값을 넘겨받도록 해보니 포함되는 페이지에서는 사용자가 넘긴 파라미터와 액션태그를 통해 넘긴 파라미터 둘 다 값을 가지고 있는 것을 확인할 수 있습니다. 그러나 main.jsp에서는 사용자가 쿼리스트링을 통해 넘긴 데이터만을 가지고 있습니다.

즉 사용자가 요청할 때 넘긴 파라미터는 main.jsp가 가지고 있고 included.jsp로 제어가 넘어갈 때 request 파라미터에 "안녕하세요"를 추가하여 넘기고 included.jsp의 처리가 끝난 후 main.jsp 페이지로 제어가 돌아올 때 "안녕하세요"를 제거하여 사용자가 요청한 "hello"만 남게 됩니다.

도로락

도로락

Writer

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