프로그래밍/Java,JSP

"jsp:param" 액션태그의 인코딩 문제(encoding problems)

채윤아빠 2019. 3. 26. 16:43
728x90
반응형



"jsp:param" action tag encoding problem


문제점 및 증상

  include 액션태그를 사용할 때, 파라미터를 함께 보내기 위하여 "jsp:param"에 유니코드 문자열을 입력한 후, 결과 페이지에서 확인하여 보니 입력해 두었던 유니코드가 깨져서 "???" 문자열로 표시되었습니다.


  다음 예제 코드에서와 같이 "jsp:param"에 유니코드 문자열을 입력한 후에 결과를 확인해 보면, 아래 그림과 같이 유니코드 문자열이 "???"로 깨져서 표시됩니다.


  • include.jsp
    <jsp:include  page="duke.jsp"  flush="true" >
        <jsp:param name="name"  value="듀크1(Duke)" />
        <jsp:param name="imgName"  value="duke.png" />
    </jsp:include>
    
  • duke.jsp
    <%
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name" ) ;
        String imgName = request.getParameter("imgName" ) ;
    %>
    <h1>이름은 <%=name %>입니다. </h1><br /><br />
    
  • 실행결과

해결 방법

  이것 저것 검색을 해봐도 마땅한 해결책이 보이지 않았었는데, "jsp:param"의 유니코드 문자열(UTF-8)을 입력하지 않고, UTF-8 문자열을 URLEncoder.encode() 메소드를 이용하여 아스키 문자열로 인코딩하여 입력하도록 하고, 파라미터를 받는 페이지에서는 URLDecoder.decode() 메소드로 전달받은 파라미터를 UTF-8 문자열로 다시 변환한 이후에 출력을 하였더니, 한글이 정상적으로 표시되었습니다.


  다음코드는 URLEncoder.encode() 및 URLDecoder.decode() 메소드를 활용하여 "jsp:param"의 유니코드 문자열(UTF-8)이 정상적으로 표시되는 것을 확인할 수 있습니다.

  • include.jsp
    <jsp:include  page="duke.jsp"  flush="true" >
        <jsp:param name="name"  value='<%=URLEncoder.encode("듀크1(Duke)", "UTF-8") %>' />
        <jsp:param name="imgName"  value="duke.png" />
    </jsp:include>
    
  • duke.jsp
    <%
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name" ) ;
        String imgName = request.getParameter("imgName" ) ;
    %>
    <h1>이름은 <%=URLDecoder.decode(name, "UTF-8") %>입니다. </h1><br /><br />
    
  • 실행결과



참고자료