본문 바로가기
☕ Java 웹 프로그래밍/Servlet & JSP

[Servlet&JSP] Servlet 문자열 출력

by 일단연 2023. 5. 23.

* 본 글은 [뉴렉처]의 Servlet&JSP 프로그래밍 강의를 듣고 정리한 글입니다.

 

2020 Servlet&JSP 프로그래밍

 

www.youtube.com

 

 Servlet 문자열 출력 

기존 자바 프로그램과 서블릿 프로그램에서 달라지는 부분

  • 자바 웹 프로그래밍에서 웹이 담당하는 것은 UI(사용자 입출력)
    • 입력과 출력을 담당하는 부분이 웹으로 바뀜
    • 웹: 클라이언트로부터 입력을 받고, 서버에서 클라이언트로 원격으로 출력 결과를 보여줌
    • UI에는 콘솔 UI, 윈도우 UI도 있음

서블릿 코드 작성: OutputStream과 PrintStream을 이용한 출력

  • service( )메소드는 인자가 2개 - request 객체, response 객체
  • response 객체가 뭘 갖고 있나 확인하기 위해 response.get 하면 많은 도구가 나옴
    • 입출력(파일, 콘솔 등)을 할 땐 Stream을 사용
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Nana extends HttpServlet
{
  public void service(HttpServletRequest request
                      , HttpServletResponse response)
                      throws IOException, ServletException
  {
    OutputStream os = response.getOutputStream();
    PrintStream out = new PrintStream(os, true);
    out.println(”Hello Servlet!”);
  }
}
  • OutputStream os = response.getOutputStream();
    • 출력하기 위해 OutputStream 사용
  • PrintStream out = new PrintStream(os, true);
    • 문자열을 출력하기 편하도록 OutputStream 객체를 이용해 PrintStream으로 매핑
    • 네트워크로 출력되는 Stream은 출력 버퍼 8KB가 채워져야 출력함
      • 버퍼를 꽉 채우지 못하면 출력되지 않고 기다림
    • true: 버퍼를 채우지 못했어도 기다리지 말고 print 단위로 출력하라는 옵션
  • out.println(”Hello Servlet!”);
    • out: PrintStream의 객체 > System.out처럼 println, printf 등을 사용할 수 있음
    • 서버 쪽 콘솔이 아니라, 원격에 있는 클라이언트에 전달됨

다시 수정한 서블릿 코드를 컴파일 및 실행

  • 파일을 수정할 때마다 아래의 복잡한 과정을 반복해야 함 > IDE를 사용하면 해결됨
  • 1) cmd에서 수정한 Nana.java를 컴파일
    • 명령어: javac -cp C:\DEV\apache-tomcat-9.0.75\lib\servlet-api.jar Nana.java
  • 2) 새로 컴파일된 Nana.class를 Tomcat 홈 디렉토리>webapps>ROOT>WEB-INF>classes로 이동
  • 3) 설정을 변경했기 때문에 톰캣 서버를 재실행(bin>startup.bat 파일 재실행)
  • 4) 브라우저에 localhost:8090/hello를 입력하면 Hello Servlet!이 출력됨

서블릿 코드 작성: response을 이용한 출력

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Nana extends HttpServlet
{
  public void service(HttpServletRequest request
                      , HttpServletResponse response)
                      throws IOException, ServletException
  {
    //OutputStream os = response.getOutputStream();
    //PrintStream out = new PrintStream(os, true);
    PrintWriter out = response.getWriter();
    out.println(”Hello Servlet!”);
  }
}
  • 문자열을 출력할 때는 OutputStream을 직접 쓰지 않고 PrintStream을 사용
  • PrintSteram을 기본적으로 제공해주는 getter메소드가 있음: getWriter( )
  • Java에는 Stream 계열과 Writer 계열이 있음
    • Writer는 문자열을 다룸 > 다국어 코드를 다룰 수 있음