JSP 페이지에서 PrintWriter 객체를 생성해보자

2 minute read

JSP 페이지에서 PrintWriter 객체를 생성해보자

  • JSP페이지를 아래와 같이 작성하면
<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.io.*"%>
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <h1>response.getWriter() 메소드를 사용해보자!</h1>
        결과가 어떻게 나올지 궁금하다 <br>
        <%
            PrintWriter myOut = response.getWriter();

            for(int i=0;i<100;i++) {
                myOut.printf("%d <br>", i);
            }
        %>
    </body>
</html>
  • 서블릿 클래스의 jspServlet() 메소드는 이렇게 생성이된다.
//~생략
      out.write("\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("    <head>\r\n");
      out.write("        <title>test</title>\r\n");
      out.write("    </head>\r\n");
      out.write("    <body>\r\n");
      out.write("        <h1>response.getWriter() 메소드를 사용해보즈아~!</h1>\r\n");
      out.write("        결과가 어떻게 나올지 궁금하네여~ <br>\r\n");
      out.write("        결과가 어떻게 나올지 궁금하네여~ <br>\r\n");
      out.write("        결과가 어떻게 나올지 궁금하네여~<br>\r\n");
      out.write("        결과가 어떻게 나올지 궁금하네여~<br>\r\n");
      out.write("        결과가 어떻게 나올지 궁금하네여~<br>\r\n");
      out.write("        ");

            PrintWriter myOut = response.getWriter();

            for(int i=0;i<100;i++) {
                myOut.printf("%d <br>", i);
            }
        
      out.write("\r\n");
      out.write("    </body>\r\n");
      out.write("</html>");
//~생략

실행 결과

0 <br>1 <br>2 <br>3 <br>4 <br>5 <br>6 <br>7 <br>8 <br>9 <br>10 <br>11 <br>12 <br>13 <br>14 <br>15 <br>16 <br>17 <br>18 <br>19 <br>20 <br>21 <br>22 <br>23 <br>24 <br>25 <br>26 <br>27 <br>28 <br>29 <br>30 <br>31 <br>32 <br>33 <br>34 <br>35 <br>36 <br>37 <br>38 <br>39 <br>40 <br>41 <br>42 <br>43 <br>44 <br>45 <br>46 <br>47 <br>48 <br>49 <br>50 <br>51 <br>52 <br>53 <br>54 <br>55 <br>56 <br>57 <br>58 <br>59 <br>60 <br>61 <br>62 <br>63 <br>64 <br>65 <br>66 <br>67 <br>68 <br>69 <br>70 <br>71 <br>72 <br>73 <br>74 <br>75 <br>76 <br>77 <br>78 <br>79 <br>80 <br>81 <br>82 <br>83 <br>84 <br>85 <br>86 <br>87 <br>88 <br>89 <br>90 <br>91 <br>92 <br>93 <br>94 <br>95 <br>96 <br>97 <br>98 <br>99 <br>

<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <h1>response.getWriter() 메소드를 사용해보자!</h1>
        결과가 어떻게 나올지 궁금하다 <br>
        
    </body>
</html>
  • 출력 결과가 뒤죽박죽일 것을 예상하고 정수를 100개를 출력했는데
  • 100개의 정수가 먼저 출력되고 html 코드는 그 뒤에 출력이되었다.

이유

  • JSP 페이지가 Servlet으로 변환되면 HTML 코드들을 JspWriter 객체를 통해 출력한다.
  • JspWriter 는 버퍼가 가득 차지 않으면 출력하지 않기 때문에 (더 이상 데이터가 없거나(?))
  • 버퍼가 다 채워지기 전에 PrintWriter 객체로 정수들이 출력되었다.

제대로 출력되게 하려면?

  • JSP 페이지를 작성할 때 page 지시자를 이용해 buffer 속성의 값을 “none”으로 지정한다.
  • buffer 속성은 버퍼 사용 여부를 지정한다.
<%@ page buffer="none" %>

실행 결과

<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <h1>response.getWriter() 메소드를 사용해보자!</h1>
        결과가 어떻게 나올지 궁금하다 <br>
        0 <br>1 <br>2 <br>3 <br>4 <br>5 <br>6 <br>7 <br>8 <br>9 <br>10 <br>11 <br>12 <br>13 <br>14 <br>15 <br>16 <br>17 <br>18 <br>19 <br>20 <br>21 <br>22 <br>23 <br>24 <br>25 <br>26 <br>27 <br>28 <br>29 <br>30 <br>31 <br>32 <br>33 <br>34 <br>35 <br>36 <br>37 <br>38 <br>39 <br>40 <br>41 <br>42 <br>43 <br>44 <br>45 <br>46 <br>47 <br>48 <br>49 <br>50 <br>51 <br>52 <br>53 <br>54 <br>55 <br>56 <br>57 <br>58 <br>59 <br>60 <br>61 <br>62 <br>63 <br>64 <br>65 <br>66 <br>67 <br>68 <br>69 <br>70 <br>71 <br>72 <br>73 <br>74 <br>75 <br>76 <br>77 <br>78 <br>79 <br>80 <br>81 <br>82 <br>83 <br>84 <br>85 <br>86 <br>87 <br>88 <br>89 <br>90 <br>91 <br>92 <br>93 <br>94 <br>95 <br>96 <br>97 <br>98 <br>99 <br>
    </body>
</html>
  • 입출력 스트림에 대해 더 공부해야겠다.

Tags: ,

Categories:

Updated: