JSP/서블릿 흝어 보기

요청와 응답

웹서버의 처리순서

p92, [그림 3-1] 서블릿 처리순서

응답정보 처리(HttpServletResponse)

ServletResponse 인터페이스는 클라이언트의 요청에 응답하기 위한 출력스트림을 추출하거나 버퍼의 크기를 설정하고, 응답할 내용의 타입과 문자셋을 설정하는 등의 작업을 수행할 수있다.

HttpServletResponse는 ServletResponse 인터페이스를 상속 받아 웹 애플리케이션을 개발하면서 응답 관련 작업을 수행하기 위한 HTTP 프로토콜 통신 기반의 응답 관련 메소드들도 확장하여 포함하고 있다.

package job.study.web;

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

@WebServlet("/second")
public class ThirdServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletExpcetion,IOException {
	resp.setContentType("text/html;charset=UTF-8");
        System.out.println("ThirdServlet!!");
        PrintWriter out = resp.getWriter();
        out.println("<h1>좋은 하루!<h1>");
        out.close()
    }
}

setContentType( )은 클라이언트에게 보내는 데이터의 문서타입과 문자셋을 응답정보 헤더에 설정하는 메소드이다. 만약 문서타입와 문자셋을 명시하지 않으면 기본적으로 text/html, 문자셋은 8859_1으로 처리하게됩니다. 그런데 8859_1은 한글을 지원하지 않기 떄문에 한글이 깨지는 현상이 나타납니다.

getWriter( )은 클라이언트에 응답하기 위한 출력 스트림을 반환한다. 그리고 이 출력 스트림을 이용해 클라이언트에게 응답을 보내게 된다.

마지막으로, 모든 응답을 마친 후에 출력스트림 객체의 close( )메소드를 이용해 스트림을 닫아 줌으로써 클라이언트와 웹서버간에 연결된 출력 스트림을 끊어 줍니다.

자바의 입출력 스트림에 관해 더 알고자 한다면 책의 99페이지를 참고하자.

[Docs] HttpServletResponse 인터페이스의 메소드 

https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletResponse.html

 

요청정보처리(HttpServletRequest)

클라이언트에서 웹서버로 요청을 보내면 HTTP 요청 규약에 알맞게 다양한 요청 정보들을 전달한다. 이때 클라이언트가 서버로 전달하는 요청정보들은 다음과 같다.

  • 클라이언트의 IP 주소, 포트번호
  • 클라이언트가 전송한 요청 헤더 정보(클라이언트에서 처리 가능한 문서 타입의 종류, 클라이언트 프로그램 정보, 처리 가능한 문자셋, 쿠키정보
  • 요청 방식, 요청 프로토토콜의 종류와 버전, 요청하는 파일의 URI, 요청받은 서버의 정보
  • 서버의 호스트이름, 포트 번호
  • 사용자가 서블릿 요청시 추가로 전달한 정보
  • 질의 문자열
package job.study.web;

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

@WebServlet("/urlInfo")
public class URLInfoServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        res.setContentType("text/html;charset=EUC-KR");
        PrintWriter out = res.getWriter();
        out.println("<html>");
        out.println("<head><title>Request 정보출력 Servlet</title></head>");
        out.println("<body>");
        out.println("<h3>요청 방식과 프로토콜 정보</h3>");
        out.println("Request URI : " + req.getRequestURI()+"<br/>");
        out.println("Request URL : " + req.getRequestURL()+"<br/>");
        out.println("Request Path : " + req.getContextPath()+"<br/>");
        out.println("Request Protocol : " + req.getProtocol()+"<br/>");
        out.println("Servlet Path : " + req.getServletPath()+"<br/>");
        out.println("</body></html>");
        out.close();        
    }
}

[Docs] HttpServletRequest 인터페이스의 메소드 

https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletRequest.html

댓글

댓글 본문
작성자
비밀번호
버전 관리
DongHyun Kim
현재 버전
선택 버전
graphittie 자세히 보기