지난번에는 Servlet을 이용해 콘솔에 Hello world를 찍어보았습니다.
관련 글 : https://coding-nyan.tistory.com/26
생각을 해보면 System.out.println("Hello World"); 는 콘솔에 출력하는 코드입니다.
웹의 경우에는 서버에서 클라이언트로 값을 전달해서 출력을 해줘야 할 텐데 그렇다면 다른 방식이 필요하지 않을까요??
웹에 출력하기
웹에 출력하기위해 HttpServletRequest와 HttpServletResponse를 이해하기 쉽게 한 단어로 짚고 넘어갈게요.
HttpServletRequest = 입력 도구이고 HttpServletResponse = 출력 도구입니다.
출력을 하기 위해 HttpServletResponse response 객체를 이용합니다.
1
2
3
4
5
6
|
public class HelloWorld extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
|
cs |
웹에 이렇게 Hello World가 출력이 되는 걸 확인할 수 있습니다.
코드 분석
service 메소드는 클라이언트가 요청한 방식에 따라 doGet()이나 doPost()를 호출합니다.직접 지정해서 doGet()함수에 해당 내용을 작성하셔도 괜찮습니다만 아직 요청 방식을 다루지 않았기에 service를 사용했습니다.
PrintWriter 클래스는 일반적으로 사용하는 PrintStream(System.out.println로 사용하던 그 친구입니다)과 약간의 차이점이 존재합니다. 바로 바이트를 버퍼에 저장하고 이를 자동으로 flush를 해준다는 겁니다.
response.getWriter()는 출력 도구용 출력 스트림에 텍스트를 보내겠다는 뜻이 됩니다.
아랫줄은 어떤 내용을 담을지에 대한 코드입니다.
아쉬운 점
이렇게만 보면 뭔가 아쉽지 않나요??
대부분 HTML을 다뤄보셨을 겁니다.
HTML로 작성한 내용을 Servlet으로 웹에 표시하려면 어떻게 하면 될까요??
1
2
3
4
5
6
|
public class HelloWorld extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
PrintWriter out = response.getWriter();
out.println("<html><body>Hello World</body></html>");
}
}
|
cs |
HTML 태그로 감싸서 출력 스트림에 보내주셔야 합니다.
현 예시는 HTML 관련 코드가 1줄짜리이지만 30줄이 넘는다면 out.println에 일일이 큰따옴표로 감싸줘야겠지요.
여기서 우리는 불편함을 느낍니다.
기존에 편하게 작성하던 거 그대로 가져다 쓸 수 없나?? 이렇게 귀찮은 짓을 해야 하나??
이때 필요한 게 JSP입니다.
JSP에 대한 예고를 남기고 이번 실습은 여기서 마치겠습니다.
감사합니다.
추가 : 한글 출력
해당 예제에서 한글을 출력하면 아마도 글자가 깨질 겁니다. 그 이유는 서버에서 클라이언트로 보내는 과정에서 인코딩이라는 과정을 거칩니다. 이때 한글을 지원하지 않는 방식으로 인코딩을 해서 그래요.
한글을 지원하는 UTF-8로 인코딩 방식과 콘텐츠 내용을 표시하면 문제가 해결됩니다.
1
2
3
4
5
6
7
8
9
10
|
public class HelloWorld extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><body>안녕하세요!</body></html>");
}
}
|
cs |
'web > jsp&servlet' 카테고리의 다른 글
Form radio 속성과 Servlet (0) | 2020.07.10 |
---|---|
HTML 프로젝트 JSP 프로젝트로 바꾸기 (0) | 2020.07.10 |
[servlet] GET 요청 처리하기 (0) | 2020.07.07 |
[Servlet] LifeCycle 이해하기 (0) | 2020.07.04 |
Servlet을 처음 시작해보자!! (0) | 2020.07.01 |